当前位置: 首页>>代码示例>>C++>>正文


C++ Core::GetRetirer方法代码示例

本文整理汇总了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() );
    }
}
开发者ID:nrkurata,项目名称:onikiri2,代码行数:68,代码来源:SimulationSystem.cpp


注:本文中的Core::GetRetirer方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。