A couple of minor fixes.
1. Set CPU ID in all modes for the O3 CPU. 2. Use nextCycle() function to prevent phase drift in O3 CPU. 3. Remove assertion in rename map that is no longer true. src/cpu/o3/alpha/cpu_builder.cc: Allow for CPU id in all modes, not just full system. Also include a parameter that was left out by accident. src/cpu/o3/alpha/cpu_impl.hh: Set the CPU ID properly. src/cpu/o3/cpu.cc: src/cpu/o3/cpu.hh: Use nextCycle() function so that the CPU does not get out of phase when starting up from quiesces. src/cpu/o3/rename_map.cc: Remove assertion that is no longer true. tests/configs/o3-timing.py: Set CPU's id to 0. --HG-- extra : convert_revision : 2b69c19adfce2adcc2d1939e89d702bd6674d5d5
This commit is contained in:
parent
fdaff2b108
commit
55a45d3644
6 changed files with 22 additions and 18 deletions
|
@ -50,11 +50,11 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(DerivO3CPU)
|
|||
Param<int> clock;
|
||||
Param<int> phase;
|
||||
Param<int> numThreads;
|
||||
Param<int> cpu_id;
|
||||
Param<int> activity;
|
||||
|
||||
#if FULL_SYSTEM
|
||||
SimObjectParam<System *> system;
|
||||
Param<int> cpu_id;
|
||||
SimObjectParam<AlphaISA::ITB *> itb;
|
||||
SimObjectParam<AlphaISA::DTB *> dtb;
|
||||
Param<Tick> profile;
|
||||
|
@ -161,11 +161,11 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivO3CPU)
|
|||
INIT_PARAM(clock, "clock speed"),
|
||||
INIT_PARAM_DFLT(phase, "clock phase", 0),
|
||||
INIT_PARAM(numThreads, "number of HW thread contexts"),
|
||||
INIT_PARAM(cpu_id, "processor ID"),
|
||||
INIT_PARAM_DFLT(activity, "Initial activity count", 0),
|
||||
|
||||
#if FULL_SYSTEM
|
||||
INIT_PARAM(system, "System object"),
|
||||
INIT_PARAM(cpu_id, "processor ID"),
|
||||
INIT_PARAM(itb, "Instruction translation buffer"),
|
||||
INIT_PARAM(dtb, "Data translation buffer"),
|
||||
INIT_PARAM(profile, ""),
|
||||
|
@ -305,14 +305,15 @@ CREATE_SIM_OBJECT(DerivO3CPU)
|
|||
AlphaSimpleParams *params = new AlphaSimpleParams;
|
||||
|
||||
params->clock = clock;
|
||||
params->phase = phase;
|
||||
|
||||
params->name = getInstanceName();
|
||||
params->numberOfThreads = actual_num_threads;
|
||||
params->cpu_id = cpu_id;
|
||||
params->activity = activity;
|
||||
|
||||
#if FULL_SYSTEM
|
||||
params->system = system;
|
||||
params->cpu_id = cpu_id;
|
||||
params->itb = itb;
|
||||
params->dtb = dtb;
|
||||
params->profile = profile;
|
||||
|
|
|
@ -114,6 +114,7 @@ AlphaO3CPU<Impl>::AlphaO3CPU(Params *params) : FullO3CPU<Impl>(params)
|
|||
#endif
|
||||
// Give the thread the TC.
|
||||
this->thread[i]->tc = tc;
|
||||
this->thread[i]->setCpuId(params->cpu_id);
|
||||
|
||||
// Add the TC to the CPU's list of TC's.
|
||||
this->threadContexts.push_back(tc);
|
||||
|
|
|
@ -466,7 +466,7 @@ FullO3CPU<Impl>::tick()
|
|||
lastRunningCycle = curTick;
|
||||
timesIdled++;
|
||||
} else {
|
||||
tickEvent.schedule(curTick + cycles(1));
|
||||
tickEvent.schedule(nextCycle(curTick + cycles(1)));
|
||||
DPRINTF(O3CPU, "Scheduling next tick!\n");
|
||||
}
|
||||
}
|
||||
|
@ -880,7 +880,7 @@ FullO3CPU<Impl>::resume()
|
|||
#endif
|
||||
|
||||
if (!tickEvent.scheduled())
|
||||
tickEvent.schedule(curTick);
|
||||
tickEvent.schedule(nextCycle());
|
||||
_status = Running;
|
||||
}
|
||||
|
||||
|
@ -973,11 +973,11 @@ FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU)
|
|||
ThreadContext *tc = threadContexts[i];
|
||||
if (tc->status() == ThreadContext::Active && _status != Running) {
|
||||
_status = Running;
|
||||
tickEvent.schedule(curTick);
|
||||
tickEvent.schedule(nextCycle());
|
||||
}
|
||||
}
|
||||
if (!tickEvent.scheduled())
|
||||
tickEvent.schedule(curTick);
|
||||
tickEvent.schedule(nextCycle());
|
||||
|
||||
Port *peer;
|
||||
Port *icachePort = fetch.getIcachePort();
|
||||
|
@ -1406,7 +1406,7 @@ FullO3CPU<Impl>::wakeCPU()
|
|||
|
||||
idleCycles += (curTick - 1) - lastRunningCycle;
|
||||
|
||||
tickEvent.schedule(curTick);
|
||||
tickEvent.schedule(nextCycle());
|
||||
}
|
||||
|
||||
template <class Impl>
|
||||
|
|
|
@ -146,9 +146,9 @@ class FullO3CPU : public BaseO3CPU
|
|||
void scheduleTickEvent(int delay)
|
||||
{
|
||||
if (tickEvent.squashed())
|
||||
tickEvent.reschedule(curTick + cycles(delay));
|
||||
tickEvent.reschedule(nextCycle(curTick + cycles(delay)));
|
||||
else if (!tickEvent.scheduled())
|
||||
tickEvent.schedule(curTick + cycles(delay));
|
||||
tickEvent.schedule(nextCycle(curTick + cycles(delay)));
|
||||
}
|
||||
|
||||
/** Unschedule tick event, regardless of its current state. */
|
||||
|
@ -186,9 +186,11 @@ class FullO3CPU : public BaseO3CPU
|
|||
{
|
||||
// Schedule thread to activate, regardless of its current state.
|
||||
if (activateThreadEvent[tid].squashed())
|
||||
activateThreadEvent[tid].reschedule(curTick + cycles(delay));
|
||||
activateThreadEvent[tid].
|
||||
reschedule(nextCycle(curTick + cycles(delay)));
|
||||
else if (!activateThreadEvent[tid].scheduled())
|
||||
activateThreadEvent[tid].schedule(curTick + cycles(delay));
|
||||
activateThreadEvent[tid].
|
||||
schedule(nextCycle(curTick + cycles(delay)));
|
||||
}
|
||||
|
||||
/** Unschedule actiavte thread event, regardless of its current state. */
|
||||
|
@ -235,9 +237,11 @@ class FullO3CPU : public BaseO3CPU
|
|||
{
|
||||
// Schedule thread to activate, regardless of its current state.
|
||||
if (deallocateContextEvent[tid].squashed())
|
||||
deallocateContextEvent[tid].reschedule(curTick + cycles(delay));
|
||||
deallocateContextEvent[tid].
|
||||
reschedule(nextCycle(curTick + cycles(delay)));
|
||||
else if (!deallocateContextEvent[tid].scheduled())
|
||||
deallocateContextEvent[tid].schedule(curTick + cycles(delay));
|
||||
deallocateContextEvent[tid].
|
||||
schedule(nextCycle(curTick + cycles(delay)));
|
||||
}
|
||||
|
||||
/** Unschedule thread deallocation in CPU */
|
||||
|
|
|
@ -192,8 +192,6 @@ SimpleRenameMap::rename(RegIndex arch_reg)
|
|||
// known that the prev reg was outside the range of normal registers
|
||||
// so the free list can avoid adding it.
|
||||
prev_reg = renamed_reg;
|
||||
|
||||
assert(renamed_reg < numPhysicalRegs + numMiscRegs);
|
||||
}
|
||||
|
||||
DPRINTF(Rename, "Renamed reg %d to physical reg %d old mapping was %d\n",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2006 The Regents of The University of Michigan
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
@ -37,7 +37,7 @@ class MyCache(BaseCache):
|
|||
mshrs = 10
|
||||
tgts_per_mshr = 5
|
||||
|
||||
cpu = DerivO3CPU()
|
||||
cpu = DerivO3CPU(cpu_id=0)
|
||||
cpu.addTwoLevelCacheHierarchy(MyCache(size = '128kB'), MyCache(size = '256kB'),
|
||||
MyCache(size = '2MB'))
|
||||
|
||||
|
|
Loading…
Reference in a new issue