#include <InorderList.h>
Onikiri::InorderListに対する継承グラフ
InorderList.h の 60 行で定義されています。
InorderList::~InorderList | ( | ) | [virtual] |
InorderList.cpp の 89 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::ReleaseParam().
00090 { 00091 ReleaseParam(); 00092 }
関数の呼び出しグラフ:
Onikiri::InorderList::BEGIN_PARAM_PATH | ( | GetResultPath() | ) |
Onikiri::InorderList::BEGIN_PARAM_PATH | ( | GetParamPath() | ) |
bool InorderList::CanAllocate | ( | int | ops | ) |
InorderList.cpp の 307 行で定義されています。
参照先 m_capacity・m_committedList・m_inorderList・m_removeOpsOnCommit・Onikiri::OpList::size().
参照元 Onikiri::Fetcher::CanFetch().
00308 { 00309 int current = (int)m_inorderList.size(); 00310 if( !m_removeOpsOnCommit ){ 00311 current += (int)m_committedList.size(); 00312 } 00313 return ops + current <= m_capacity; 00314 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
virtual void Onikiri::InorderList::ChangeSimulationMode | ( | PhysicalResourceNode::SimulationMode | mode | ) | [inline, virtual] |
Onikiri::PhysicalResourceNodeを再定義しています。
InorderList.h の 150 行で定義されています。
参照先 m_mode.
00151 { 00152 m_mode = mode; 00153 }
void InorderList::Commit | ( | OpIterator | op | ) |
InorderList.cpp の 317 行で定義されています。
参照先 ASSERT・Onikiri::DS_COMMIT・Onikiri::Dumper::Dump()・Onikiri::OpList::front()・Onikiri::g_dumper・m_committedList・m_inorderList・m_mode・NotifyCommit()・Onikiri::OpStatus::OS_COMITTING・Onikiri::OpList::pop_front()・Onikiri::OpList::push_back()・Onikiri::PhysicalResourceNode::SM_SIMULATION.
参照元 Onikiri::InorderSystem::Run().
00318 { 00319 if( m_mode == SM_SIMULATION ){ 00320 ASSERT( 00321 m_inorderList.front() == op, 00322 "The front of a raw inorder list and the committed op are inconsistent. The committed op:\n%s", 00323 op->ToString().c_str() 00324 ); 00325 00326 g_dumper.Dump( DS_COMMIT, op ); 00327 NotifyCommit( op ); 00328 op->SetStatus( OpStatus::OS_COMITTING ); 00329 00330 // Move to the committed list. 00331 m_inorderList.pop_front(); 00332 m_committedList.push_back( op ); 00333 } 00334 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::ConstructOp | ( | const OpInitArgs & | args | ) |
InorderList.cpp の 136 行で定義されています。
参照先 Onikiri::OpArray::CreateOp()・m_opArray.
参照元 Onikiri::Fetcher::Fetch()・Onikiri::InorderSystem::Run().
00137 { 00138 OpIterator op = m_opArray->CreateOp(); 00139 op->Initialize(args); 00140 00141 return op; 00142 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::DestroyOp | ( | OpIterator | op | ) |
InorderList.cpp の 145 行で定義されています。
参照先 m_opArray・Onikiri::OpArray::ReleaseOp().
参照元 FlushBackward()・Retire()・Onikiri::InorderSystem::Run().
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::Flush | ( | OpIterator | op | ) | [protected] |
InorderList.cpp の 397 行で定義されています。
参照先 Onikiri::DS_FLUSH・Onikiri::Dumper::Dump()・Onikiri::g_dumper・HOOK_SECTION_OP・NotifyFlush()・Onikiri::OpStatus::OS_FLUSHED・s_opFlushHook.
参照元 FlushBackward().
00398 { 00399 HOOK_SECTION_OP( s_opFlushHook, op ) 00400 { 00401 g_dumper.Dump( DS_FLUSH, op ); 00402 NotifyFlush( op ); 00403 op->SetStatus( OpStatus::OS_FLUSHED ); 00404 } 00405 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
int InorderList::FlushBackward | ( | OpIterator | startOp | ) |
InorderList.cpp の 368 行で定義されています。
参照先 DestroyOp()・Flush()・GetBackOp()・Onikiri::OpIterator::IsNull()・PopBack().
参照元 Onikiri::Recoverer::RecoverBPredMiss()・Onikiri::Recoverer::RecoverByRefetch().
00369 { 00370 // ~XtFb` 00371 if( startOp.IsNull() ){ 00372 return 0; 00373 } 00374 00375 // back() startOp Flush 00376 int flushedInsns = 0; 00377 while( true ){ 00378 OpIterator op = GetBackOp(); 00379 Flush( op ); 00380 flushedInsns++; 00381 00382 PopBack(); 00383 00384 bool end = ( op == startOp ) ? true : false; 00385 00386 // op 00387 DestroyOp( op ); 00388 00389 if( end ){ 00390 break; 00391 } 00392 } 00393 00394 return flushedInsns; 00395 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetBackOp | ( | ) |
InorderList.cpp の 187 行で定義されています。
参照先 Onikiri::OpList::back()・Onikiri::OpList::empty()・m_inorderList.
参照元 FlushBackward().
00188 { 00189 if(m_inorderList.empty()) 00190 return OpIterator(0); 00191 else 00192 return m_inorderList.back(); 00193 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
int Onikiri::InorderList::GetCapacity | ( | ) | const [inline] |
OpIterator InorderList::GetCommittedFrontOp | ( | ) |
InorderList.cpp の 168 行で定義されています。
参照先 Onikiri::OpList::empty()・Onikiri::OpList::front()・m_committedList.
参照元 Onikiri::Retirer::CheckCommitCounters()・Onikiri::Fetcher::IsSerializingRequired().
00169 { 00170 if( m_committedList.empty() ){ 00171 return OpIterator(0); 00172 } 00173 00174 return m_committedList.front(); 00175 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetFrontOp | ( | ) |
InorderList.cpp の 177 行で定義されています。
参照先 Onikiri::OpList::empty()・Onikiri::OpList::front()・m_inorderList.
参照元 Onikiri::Retirer::CheckCommitCounters()・Onikiri::Retirer::EvaluateCommit()・GetFrontOpOfSamePC()・GetPrevIndexOp()・Onikiri::Fetcher::IsSerializingRequired().
00178 { 00179 if( m_inorderList.empty() ){ 00180 return OpIterator(0); 00181 } 00182 00183 return m_inorderList.front(); 00184 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetFrontOpOfSamePC | ( | OpIterator | op | ) |
InorderList.cpp の 289 行で定義されています。
参照先 GetFrontOp()・GetNextIndexOp()・GetPrevPCOp()・Onikiri::OpIterator::IsNull().
参照元 Onikiri::Retirer::CanCommitInsn()・Onikiri::Recoverer::RecoverByRefetch().
00290 { 00291 OpIterator previousOp = GetPrevPCOp(op); 00292 00293 if( ! previousOp.IsNull() ) { 00294 return GetNextIndexOp(previousOp); 00295 }else { 00296 return GetFrontOp(); 00297 } 00298 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetNextIndexOp | ( | OpIterator | op | ) |
InorderList.cpp の 222 行で定義されています。
参照先 Onikiri::OpList::back()・Onikiri::OpList::get_iterator()・m_inorderList.
参照元 Onikiri::Retirer::CanCommitInsn()・Onikiri::Retirer::EvaluateCommit()・GetFrontOpOfSamePC()・GetNextPCOp()・Onikiri::Recoverer::RecoverByRescheduleAll()・Onikiri::Recoverer::RecoverByRescheduleNotFinished().
00223 { 00224 if(m_inorderList.back() == op) { 00225 return OpIterator(0); 00226 } 00227 00228 return *(++m_inorderList.get_iterator(op)); 00229 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetNextPCOp | ( | OpIterator | op | ) |
InorderList.cpp の 267 行で定義されています。
参照先 GetNextIndexOp()・Onikiri::OpIterator::IsNull().
参照元 Onikiri::Recoverer::GetRecoveryStartOp()・Onikiri::Recoverer::RecoverBPredMiss().
00268 { 00269 00270 OpIterator next = GetNextIndexOp(op); 00271 00272 // No == 0 T 00273 while( (!next.IsNull()) && (next->GetNo() != 0) ) { 00274 next = GetNextIndexOp(next); 00275 } 00276 00277 return next; 00278 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpNotifier* Onikiri::InorderList::GetNotifier | ( | ) | const [inline] |
OpIterator InorderList::GetPrevIndexOp | ( | OpIterator | op | ) |
InorderList.cpp の 204 行で定義されています。
参照先 Onikiri::OpList::get_iterator()・GetFrontOp()・m_inorderList.
参照元 GetPrevPCOp()・Onikiri::PerfectMemDepPred::Resolve().
00205 { 00206 if( GetFrontOp() == op ){ 00207 return OpIterator(0); 00208 } 00209 00210 return *(--m_inorderList.get_iterator(op)); 00211 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
OpIterator InorderList::GetPrevPCOp | ( | OpIterator | op | ) |
InorderList.cpp の 241 行で定義されています。
参照先 GetPrevIndexOp()・Onikiri::OpIterator::IsNull().
参照元 GetFrontOpOfSamePC()・Onikiri::Recoverer::RecoverByRefetch().
00242 { 00243 int opNo = op->GetNo(); 00244 00245 OpIterator prev = op; 00246 00247 // opNo + 1 GetPrevIndexOp OPC 00248 // op3 1Aop4 2 00249 for(int i = 0; i <= opNo; ++i) { 00250 prev = GetPrevIndexOp(prev); 00251 00252 if( prev.IsNull() ) { 00253 break; 00254 } 00255 } 00256 return prev; 00257 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
s64 Onikiri::InorderList::GetRetiredInsns | ( | ) | const [inline] |
s64 Onikiri::InorderList::GetRetiredInstructionCount | ( | ) | const [inline] |
s64 Onikiri::InorderList::GetRetiredOps | ( | ) | const [inline] |
void InorderList::Initialize | ( | InitPhase | phase | ) |
InorderList.cpp の 94 行で定義されています。
参照先 Onikiri::Core::GetCacheSystem()・Onikiri::Core::GetDispatcher()・Onikiri::Core::GetFetcher()・Onikiri::Fetcher::GetFetchWidth()・Onikiri::Thread::GetMemDepPred()・Onikiri::Thread::GetMemOrderManager()・Onikiri::Core::GetOpArray()・Onikiri::Thread::GetRegDepPred()・Onikiri::Core::GetRenamer()・Onikiri::Core::GetRetirer()・Onikiri::PhysicalResourceNode::INIT_POST_CONNECTION・Onikiri::PhysicalResourceNode::INIT_PRE_CONNECTION・Onikiri::ParamExchange::LoadParam()・m_cacheSystem・m_capacity・m_checkpointMaster・m_committedList・m_core・m_dispatcher・m_fetcher・m_inorderList・m_memDepPred・m_memOrderManager・m_notifier・m_opArray・m_regDepPred・m_renamer・m_retirer・m_thread・Onikiri::OpList::resize()・THROW_RUNTIME_ERROR.
00095 { 00096 if(phase == INIT_PRE_CONNECTION){ 00097 LoadParam(); 00098 } 00099 else if(phase == INIT_POST_CONNECTION){ 00100 if( m_core == 0 ) { 00101 THROW_RUNTIME_ERROR("core not set."); 00102 } 00103 if( m_checkpointMaster == 0 ) { 00104 THROW_RUNTIME_ERROR("CheckpointMaster not set."); 00105 } 00106 if( m_thread == 0 ) { 00107 THROW_RUNTIME_ERROR("thread not set."); 00108 } 00109 00110 m_opArray = m_core->GetOpArray(); 00111 m_notifier = new OpNotifier(); 00112 00113 m_inorderList.resize( *m_opArray ); 00114 m_committedList.resize( *m_opArray ); 00115 00116 m_memOrderManager = m_thread->GetMemOrderManager(); 00117 m_regDepPred = m_thread->GetRegDepPred(); 00118 m_memDepPred = m_thread->GetMemDepPred(); 00119 00120 m_fetcher = m_core->GetFetcher(); 00121 m_dispatcher = m_core->GetDispatcher(); 00122 m_renamer = m_core->GetRenamer(); 00123 m_retirer = m_core->GetRetirer(); 00124 00125 m_cacheSystem = m_core->GetCacheSystem(); 00126 00127 if( m_fetcher->GetFetchWidth() > m_capacity ){ 00128 THROW_RUNTIME_ERROR( "The capacity of InOrderList is too small. It must be larger than fetch width." ); 00129 } 00130 } 00131 }
関数の呼び出しグラフ:
bool InorderList::IsEmpty | ( | ) |
InorderList.cpp の 301 行で定義されています。
参照先 Onikiri::OpList::empty()・m_committedList・m_inorderList.
参照元 Onikiri::Fetcher::CanFetch()・Onikiri::Retirer::CheckCommitCounters()・Onikiri::Fetcher::Evaluate()・Onikiri::Fetcher::IsSerializingRequired().
00302 { 00303 return m_inorderList.empty() && m_committedList.empty(); 00304 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::NotifyCommit | ( | OpIterator | op | ) | [protected] |
InorderList.cpp の 407 行で定義されています。
参照先 Onikiri::Renamer::Commit()・Onikiri::PipelineNodeBase::Commit()・Onikiri::Fetcher::Commit()・Onikiri::MemDepPredIF::Commit()・Onikiri::DepPredIF::Commit()・Onikiri::CacheSystem::Commit()・Onikiri::MemOrderManager::Commit()・Onikiri::CheckpointMaster::Commit()・m_cacheSystem・m_checkpointMaster・m_dispatcher・m_fetcher・m_memDepPred・m_memOrderManager・m_notifier・m_regDepPred・m_renamer・Onikiri::OpNotifier::NotifyCommit().
参照元 Commit().
00408 { 00409 // `FbN|CgR~bg 00410 if( op->GetBeforeCheckpoint() ) { 00411 m_checkpointMaster->Commit(op->GetBeforeCheckpoint()); 00412 } 00413 if( op->GetAfterCheckpoint() ) { 00414 m_checkpointMaster->Commit(op->GetAfterCheckpoint()); 00415 } 00416 00417 // CacheSystem must be retired after that of MemOrderManager, 00418 // because CacheSystem uses cache access results of stores 00419 // set by MemOrderManager. 00420 m_memOrderManager->Commit( op ); 00421 m_cacheSystem->Commit( op ); 00422 00423 m_regDepPred->Commit(op); 00424 m_memDepPred->Commit(op); 00425 00426 m_fetcher->Commit(op); 00427 m_dispatcher->Commit(op); 00428 m_renamer->Commit(op); 00429 if( op->GetScheduler() != 0 ) { 00430 op->GetScheduler()->Commit(op); 00431 } 00432 00433 m_notifier->NotifyCommit( op ); 00434 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::NotifyFlush | ( | OpIterator | op | ) | [protected] |
InorderList.cpp の 456 行で定義されています。
参照先 Onikiri::MemDepPredIF::Flush()・Onikiri::DepPredIF::Flush()・Onikiri::PipelineNodeBase::Flush()・Onikiri::Dispatcher::Flush()・Onikiri::Retirer::Flush()・Onikiri::MemOrderManager::Flush()・Onikiri::CacheSystem::Flush()・Onikiri::CheckpointMaster::Flush()・m_cacheSystem・m_checkpointMaster・m_dispatcher・m_fetcher・m_memDepPred・m_memOrderManager・m_notifier・m_regDepPred・m_renamer・m_retirer・Onikiri::OpNotifier::NotifyFlush().
参照元 Flush().
00457 { 00458 if( op->GetAfterCheckpoint() ){ 00459 m_checkpointMaster->Flush( op->GetAfterCheckpoint() ); 00460 } 00461 if( op->GetBeforeCheckpoint() ){ 00462 m_checkpointMaster->Flush( op->GetBeforeCheckpoint() ); 00463 } 00464 00465 op->CancelEvent(); 00466 op->ClearEvent(); 00467 if( op->GetScheduler() ){ 00468 op->GetScheduler()->Flush( op ); 00469 } 00470 00471 m_cacheSystem->Flush( op ); 00472 m_memOrderManager->Flush( op ); 00473 m_retirer->Flush( op ); 00474 m_dispatcher->Flush( op ); 00475 m_renamer->Flush( op ); 00476 m_fetcher->Flush( op ); 00477 m_regDepPred->Flush(op); 00478 m_memDepPred->Flush(op); 00479 00480 op->DissolveSrcReg(); // src dependency ` 00481 op->DissolveSrcMem(); 00482 00483 m_notifier->NotifyFlush( op ); 00484 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::NotifyRetire | ( | OpIterator | op | ) | [protected] |
InorderList.cpp の 437 行で定義されています。
参照先 m_cacheSystem・m_dispatcher・m_fetcher・m_memOrderManager・m_renamer・Onikiri::PipelineNodeBase::Retire()・Onikiri::Dispatcher::Retire()・Onikiri::MemOrderManager::Retire()・Onikiri::CacheSystem::Retire().
参照元 Retire().
00438 { 00439 op->ClearEvent(); 00440 00441 if( op->GetScheduler() ){ 00442 op->GetScheduler()->Retire( op ); 00443 } 00444 00445 m_cacheSystem->Retire( op ); 00446 m_memOrderManager->Retire( op ); 00447 m_dispatcher->Retire( op ); 00448 m_renamer->Retire( op ); 00449 m_fetcher->Retire( op ); 00450 00451 // src dependency ` 00452 op->DissolveSrcReg(); 00453 op->DissolveSrcMem(); 00454 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
Onikiri::InorderList::PARAM_ENTRY | ( | "@RemoveOpsOnCommit" | , | |
m_removeOpsOnCommit | ||||
) |
void InorderList::PopBack | ( | ) |
InorderList.cpp の 160 行で定義されています。
参照先 m_inorderList・Onikiri::OpList::pop_back().
参照元 FlushBackward().
00161 { 00162 m_inorderList.pop_back(); 00163 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::PushBack | ( | OpIterator | op | ) |
InorderList.cpp の 153 行で定義されています。
参照先 m_inorderList・Onikiri::OpList::push_back().
参照元 Onikiri::Fetcher::Fetch().
00154 { 00155 // Gg 00156 m_inorderList.push_back(op); 00157 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void InorderList::Retire | ( | OpIterator | op | ) |
InorderList.cpp の 336 行で定義されています。
参照先 DestroyOp()・Onikiri::DS_RETIRE・Onikiri::Dumper::Dump()・Onikiri::OpList::empty()・Onikiri::OpList::front()・Onikiri::g_dumper・m_committedList・m_mode・m_retiredInsns・m_retiredOps・NotifyRetire()・Onikiri::OpStatus::OS_RETIRED・Onikiri::OpList::pop_front()・Onikiri::PhysicalResourceNode::SM_SIMULATION.
参照元 Onikiri::InorderSystem::Run().
00337 { 00338 bool headOp = op->GetNo() == 0; // This op is a head of divided micro ops or not. 00339 00340 if( m_mode == SM_SIMULATION ){ 00341 g_dumper.Dump( DS_RETIRE, op ); 00342 op->SetStatus( OpStatus::OS_RETIRED ); 00343 00344 for( OpIterator i = m_committedList.front(); 00345 i->GetStatus() == OpStatus::OS_RETIRED; 00346 ){ 00347 m_committedList.pop_front(); 00348 NotifyRetire( i ); 00349 DestroyOp( i ); 00350 00351 if( m_committedList.empty() ){ 00352 break; 00353 } 00354 00355 i = m_committedList.front(); 00356 } 00357 } 00358 00359 if( headOp ){ 00360 ++m_retiredInsns; 00361 } 00362 m_retiredOps++; 00363 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
CacheSystem* Onikiri::InorderList::m_cacheSystem [protected] |
int Onikiri::InorderList::m_capacity [protected] |
InorderList.h の 188 行で定義されています。
CheckpointMaster* Onikiri::InorderList::m_checkpointMaster [protected] |
OpList Onikiri::InorderList::m_committedList [protected] |
InorderList.h の 182 行で定義されています。
参照元 CanAllocate()・Commit()・GetCommittedFrontOp()・Initialize()・IsEmpty()・Retire().
Core* Onikiri::InorderList::m_core [protected] |
Dispatcher* Onikiri::InorderList::m_dispatcher [protected] |
Fetcher* Onikiri::InorderList::m_fetcher [protected] |
OpList Onikiri::InorderList::m_inorderList [protected] |
MemDepPredIF* Onikiri::InorderList::m_memDepPred [protected] |
MemOrderManager* Onikiri::InorderList::m_memOrderManager [protected] |
OpNotifier* Onikiri::InorderList::m_notifier [protected] |
OpArray* Onikiri::InorderList::m_opArray [protected] |
RegDepPredIF* Onikiri::InorderList::m_regDepPred [protected] |
bool Onikiri::InorderList::m_removeOpsOnCommit [protected] |
Renamer* Onikiri::InorderList::m_renamer [protected] |
s64 Onikiri::InorderList::m_retiredInsns [protected] |
s64 Onikiri::InorderList::m_retiredOps [protected] |
Retirer* Onikiri::InorderList::m_retirer [protected] |
Thread* Onikiri::InorderList::m_thread [protected] |
HookPoint< InorderList > Onikiri::InorderList::s_opFlushHook [static] |