Allow CPUs to specify their own CPU ids.
Make the AlphaConsole calculate the number of CPUs instead
of passing that in as a parameter.
cpu/base.cc:
pass the desired cpu_id into registerExecContext, offsetting it
by the thread number. a cpu_id of -1 means that it should be
generated for you.
cpu/base.hh:
Take the cpu_id as a parameter
cpu/o3/alpha_cpu_builder.cc:
cpu/simple/cpu.cc:
Accept the cpu_id as a parameter
while we're here, let's remove the multiplier since it is
not used.
dev/alpha_console.cc:
don't take the number of CPUs as a parameter. Calculate it from
the system based on the number of CPUs that have been registered.
move init() code to startup() to ensure that all CPUs are registerd.
dev/alpha_console.hh:
python/m5/objects/AlphaConsole.py:
don't take the number of CPUs as a parameter.
move init() code to startup() to ensure that all CPUs are registerd.
python/m5/objects/BaseCPU.py:
take the cpu_id as a parameter. Default it to -1 which means
that it will be generated.
sim/system.cc:
allow the registerExecContext functioin to take a desired
cpu_id as a parameter. Check to ensure that the id isn't
already used. Accept -1 as a request to have an id assigned.
sim/system.hh:
keep track of the number of registered exec contexts.
provide a function for accessing the number of exec contexts
that checks to ensure that they are all registered correctly.
--HG--
extra : convert_revision : 8e12f96ff8a49fa16cdbbdb4c05c651376c35788
This commit is contained in:
14
cpu/base.cc
14
cpu/base.cc
@@ -189,15 +189,15 @@ BaseCPU::registerExecContexts()
|
||||
{
|
||||
for (int i = 0; i < execContexts.size(); ++i) {
|
||||
ExecContext *xc = execContexts[i];
|
||||
int cpu_id;
|
||||
|
||||
#ifdef FULL_SYSTEM
|
||||
cpu_id = system->registerExecContext(xc);
|
||||
#else
|
||||
cpu_id = xc->process->registerExecContext(xc);
|
||||
#endif
|
||||
int id = params->cpu_id;
|
||||
if (id != -1)
|
||||
id += i;
|
||||
|
||||
xc->cpu_id = cpu_id;
|
||||
xc->cpu_id = system->registerExecContext(xc, id);
|
||||
#else
|
||||
xc->cpu_id = xc->process->registerExecContext(xc);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -111,6 +111,7 @@ class BaseCPU : public SimObject
|
||||
Tick functionTraceStart;
|
||||
#ifdef FULL_SYSTEM
|
||||
System *system;
|
||||
int cpu_id;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -71,9 +71,9 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(DerivAlphaFullCPU)
|
||||
|
||||
#ifdef FULL_SYSTEM
|
||||
SimObjectParam<System *> system;
|
||||
Param<int> cpu_id;
|
||||
SimObjectParam<AlphaITB *> itb;
|
||||
SimObjectParam<AlphaDTB *> dtb;
|
||||
Param<int> mult;
|
||||
#else
|
||||
SimObjectVectorParam<Process *> workload;
|
||||
#endif // FULL_SYSTEM
|
||||
@@ -164,9 +164,9 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivAlphaFullCPU)
|
||||
|
||||
#ifdef 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(mult, "System clock multiplier"),
|
||||
#else
|
||||
INIT_PARAM(workload, "Processes to run"),
|
||||
#endif // FULL_SYSTEM
|
||||
@@ -274,9 +274,6 @@ CREATE_SIM_OBJECT(DerivAlphaFullCPU)
|
||||
DerivAlphaFullCPU *cpu;
|
||||
|
||||
#ifdef FULL_SYSTEM
|
||||
if (mult != 1)
|
||||
panic("Processor clock multiplier must be 1?\n");
|
||||
|
||||
// Full-system only supports a single thread for the moment.
|
||||
int actual_num_threads = 1;
|
||||
#else
|
||||
@@ -300,6 +297,7 @@ CREATE_SIM_OBJECT(DerivAlphaFullCPU)
|
||||
|
||||
#ifdef FULL_SYSTEM
|
||||
params.system = system;
|
||||
params.cpu_id = cpu_id;
|
||||
params.itb = itb;
|
||||
params.dtb = dtb;
|
||||
#else
|
||||
|
||||
@@ -823,7 +823,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||
SimObjectParam<AlphaDTB *> dtb;
|
||||
SimObjectParam<FunctionalMemory *> mem;
|
||||
SimObjectParam<System *> system;
|
||||
Param<int> mult;
|
||||
Param<int> cpu_id;
|
||||
#else
|
||||
SimObjectParam<Process *> workload;
|
||||
#endif // FULL_SYSTEM
|
||||
@@ -855,7 +855,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||
INIT_PARAM(dtb, "Data TLB"),
|
||||
INIT_PARAM(mem, "memory"),
|
||||
INIT_PARAM(system, "system object"),
|
||||
INIT_PARAM(mult, "system clock multiplier"),
|
||||
INIT_PARAM(cpu_id, "processor ID"),
|
||||
#else
|
||||
INIT_PARAM(workload, "processes to run"),
|
||||
#endif // FULL_SYSTEM
|
||||
@@ -873,11 +873,6 @@ END_INIT_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||
|
||||
CREATE_SIM_OBJECT(SimpleCPU)
|
||||
{
|
||||
#ifdef FULL_SYSTEM
|
||||
if (mult != 1)
|
||||
panic("processor clock multiplier must be 1\n");
|
||||
#endif
|
||||
|
||||
SimpleCPU::Params *params = new SimpleCPU::Params();
|
||||
params->name = getInstanceName();
|
||||
params->numberOfThreads = 1;
|
||||
@@ -898,6 +893,7 @@ CREATE_SIM_OBJECT(SimpleCPU)
|
||||
params->dtb = dtb;
|
||||
params->mem = mem;
|
||||
params->system = system;
|
||||
params->cpu_id = cpu_id;
|
||||
#else
|
||||
params->process = workload;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user