sim: Add an option to forward work items to Python
There are cases where we want the Python world to handle work items instead of the C++ world. However, that's currently not possible. This changeset adds the forward_work_items option to the System class. Then it is set to True, work items will generate workbegin/workend simulation exists with the work item ID as the exit code and the old C++ handling is completely bypassed. --HG-- extra : rebase_source : 8de637a744fc4b6ff2bc763f00cdf8ddf2bff885
This commit is contained in:
parent
f5f04c3120
commit
08754488a3
2 changed files with 18 additions and 6 deletions
|
@ -73,6 +73,8 @@ class System(MemObject):
|
|||
|
||||
cache_line_size = Param.Unsigned(64, "Cache line size in bytes")
|
||||
|
||||
exit_on_work_items = Param.Bool(True, "Exit from the simulation loop when "
|
||||
"encountering work item annotations.")
|
||||
work_item_id = Param.Int(-1, "specific work item id")
|
||||
num_work_ids = Param.Int(16, "Number of distinct work item types")
|
||||
work_begin_cpu_id_exit = Param.Int(-1,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2012 ARM Limited
|
||||
* Copyright (c) 2010-2012, 2015 ARM Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
|
@ -616,13 +616,18 @@ void
|
|||
workbegin(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
||||
{
|
||||
DPRINTF(PseudoInst, "PseudoInst::workbegin(%i, %i)\n", workid, threadid);
|
||||
tc->getCpuPtr()->workItemBegin();
|
||||
System *sys = tc->getSystemPtr();
|
||||
const System::Params *params = sys->params();
|
||||
sys->workItemBegin(threadid, workid);
|
||||
|
||||
DPRINTF(WorkItems, "Work Begin workid: %d, threadid %d\n", workid,
|
||||
if (params->exit_on_work_items) {
|
||||
exitSimLoop("workbegin", static_cast<int>(workid));
|
||||
return;
|
||||
}
|
||||
|
||||
DPRINTF(WorkItems, "Work Begin workid: %d, threadid %d\n", workid,
|
||||
threadid);
|
||||
tc->getCpuPtr()->workItemBegin();
|
||||
sys->workItemBegin(threadid, workid);
|
||||
|
||||
//
|
||||
// If specified, determine if this is the specific work item the user
|
||||
|
@ -674,12 +679,17 @@ void
|
|||
workend(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
||||
{
|
||||
DPRINTF(PseudoInst, "PseudoInst::workend(%i, %i)\n", workid, threadid);
|
||||
tc->getCpuPtr()->workItemEnd();
|
||||
System *sys = tc->getSystemPtr();
|
||||
const System::Params *params = sys->params();
|
||||
sys->workItemEnd(threadid, workid);
|
||||
|
||||
if (params->exit_on_work_items) {
|
||||
exitSimLoop("workend", static_cast<int>(workid));
|
||||
return;
|
||||
}
|
||||
|
||||
DPRINTF(WorkItems, "Work End workid: %d, threadid %d\n", workid, threadid);
|
||||
tc->getCpuPtr()->workItemEnd();
|
||||
sys->workItemEnd(threadid, workid);
|
||||
|
||||
//
|
||||
// If specified, determine if this is the specific work item the user
|
||||
|
|
Loading…
Reference in a new issue