#include <FinishEvent.h>
Onikiri::OpFinishEventに対する継承グラフ
Public メソッド | |
OpFinishEvent (OpIterator op) | |
virtual void | Update () |
Static Public 変数 | |
static HookPoint< OpFinishEvent, FinishHookParam > | s_finishHook |
Protected 変数 | |
OpIterator | m_op |
構成 | |
struct | FinishHookParam |
FinishEvent.h の 42 行で定義されています。
OpFinishEvent::OpFinishEvent | ( | OpIterator | op | ) |
FinishEvent.cpp の 62 行で定義されています。
参照先 Onikiri::RP_EXECUTION_FINISH・Onikiri::EventBaseImplement::SetPriority().
00062 : 00063 m_op( op ) 00064 { 00065 SetPriority( RP_EXECUTION_FINISH ); 00066 }
関数の呼び出しグラフ:
void OpFinishEvent::Update | ( | ) | [virtual] |
Onikiri::EventBaseImplementを実装しています。
FinishEvent.cpp の 68 行で定義されています。
参照先 ASSERT・Onikiri::Scheduler::Finished()・Onikiri::MemOrderManager::Finished()・Onikiri::Fetcher::Finished()・Onikiri::LatPred::Finished()・Onikiri::Core::GetFetcher()・Onikiri::Core::GetLatPred()・Onikiri::Thread::GetMemOrderManager()・HOOK_SECTION_OP_PARAM・Onikiri::OpIterator::IsAlive()・m_op・Onikiri::OpStatus::OS_EXECUTING・s_finishHook.
00069 { 00070 OpIterator op = m_op; 00071 ASSERT( 00072 op->GetStatus() == OpStatus::OS_EXECUTING, 00073 "Op:%s", 00074 op->ToString().c_str() 00075 ); 00076 00077 FinishHookParam param; 00078 param.flushed = false; 00079 00080 HOOK_SECTION_OP_PARAM( s_finishHook, op, param ) 00081 { 00082 Core* core = op->GetCore(); 00083 Thread* thread = op->GetThread(); 00084 Scheduler* scheduler = m_op->GetScheduler(); 00085 00086 // 00087 // Notify the finish of execution to each module. 00088 // 00089 00090 // Write back results to physical registers and update status. 00091 op->ExecutionEnd(); 00092 00093 // Each 'Finished' method may flush an op itself, 00094 // so need to check whether an op is alive or not. 00095 00096 // Update a latency predictor. 00097 if( op.IsAlive() ){ 00098 core->GetLatPred()->Finished( op ); 00099 } 00100 00101 // To a fetcher. 00102 // In Fetcher::Finished(), Check branch miss prediction and 00103 // recover if it is necessary. 00104 if( op.IsAlive() ){ 00105 core->GetFetcher()->Finished( op ); 00106 } 00107 00108 // To a memory order manager. 00109 // In MemOrderManager::Finished(), check access order violation 00110 // and recover if violation occurs. 00111 if( op.IsAlive() ){ 00112 thread->GetMemOrderManager()->Finished( op ); 00113 } 00114 00115 // To a scheduler. 00116 if( op.IsAlive() ){ 00117 scheduler->Finished( op ); 00118 } 00119 00120 if( !op.IsAlive() ){ 00121 param.flushed = true; 00122 } 00123 00124 // Value prediction is not implemented yet. 00125 //if( ValuePredictionMiss(m_op) ) { 00126 // return m_op->GetThread()->RecoverValPredMiss(m_op, DataPredType::VALUE); 00127 //} 00128 } 00129 00130 }
関数の呼び出しグラフ:
OpIterator Onikiri::OpFinishEvent::m_op [protected] |