本文整理汇总了C++中Core::GetRetirer方法的典型用法代码示例。如果您正苦于以下问题:C++ Core::GetRetirer方法的具体用法?C++ Core::GetRetirer怎么用?C++ Core::GetRetirer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Core
的用法示例。
在下文中一共展示了Core::GetRetirer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Run
void SimulationSystem::Run( SystemContext* context )
{
try{
m_context = context;
InitializeResources();
context->executedCycles = 1;
s64 numInsns = context->executionInsns;
s64 numCycles = context->executionCycles;
while(true){
context->globalClock->Tick();
for( int i = 0; i < context->threads.GetSize(); i++ ){
Thread* thread = context->threads[i];
g_dumper.SetCurrentInsnCount( thread, thread->GetCore()->GetRetirer()->GetNumRetiredInsns() );
g_dumper.SetCurrentCycle( thread, context->executedCycles );
}
SimulateCycle();
bool exitSimulation = true;
s64 retiredInsns = 0;
for( int i = 0; i < context->cores.GetSize(); i++ ){
Core* core = context->cores[i];
if( !core->GetRetirer()->IsEndOfProgram() ){
// Next PC が 0 になる分岐命令がリタイアしていたら終了
exitSimulation = false;
}
retiredInsns += core->GetRetirer()->GetNumRetiredInsns();
}
// 終了条件
if(exitSimulation){
break;
}
else if( numCycles > 0 ){
// 実行サイクル数を指定した場合
if( context->executedCycles >= numCycles )
break;
}
else{
// 実行命令数を指定した場合
if( retiredInsns >= numInsns )
break;
}
++context->executedCycles;
}
// リタイアした命令数をupdate
context->executedInsns.clear();
for( int i = 0; i < context->threads.GetSize(); i++ ){
context->executedInsns.push_back( context->threads[i]->GetInorderList()->GetRetiredInsns() );
}
}
catch( std::runtime_error& error ){
String msg;
msg.format(
"%s\n"
"Last simulated cycle: %lld\n" ,
error.what(),
m_context->executedCycles
);
throw std::runtime_error( msg.c_str() );
}
}