#include <Core.h>
Onikiri::Coreに対する継承グラフ
typedef std::vector< Scheduler* > Onikiri::Core::SchedulerArray [protected] |
Core::~Core | ( | ) | [virtual] |
参照先 m_opArray・Onikiri::PhysicalResourceNode::ReleaseParam().
00086 { 00087 if( m_opArray != 0 ) delete m_opArray; 00088 ReleaseParam(); 00089 }
関数の呼び出しグラフ:
void Core::AddScheduler | ( | Scheduler * | scheduler | ) |
Onikiri::Core::BEGIN_PARAM_PATH | ( | GetParamPath() | ) |
Onikiri::Core::CHAIN_PARAM_MAP | ( | "PartialLoadRecovery" | , | |
m_partialLoadRecovery | ||||
) |
Onikiri::Core::CHAIN_PARAM_MAP | ( | "ValuePredRecovery" | , | |
m_valuePredRecv | ||||
) |
Onikiri::Core::CHAIN_PARAM_MAP | ( | "AddrMatchPredRecovery" | , | |
m_addrMatchPredRecv | ||||
) |
void Core::Evaluate | ( | ) | [virtual] |
Onikiri::ClockedResourceBaseを再定義しています。
参照先 Onikiri::ClockedResourceBase::Evaluate()・Onikiri::CacheSystem::GetFirstLevelDataCache()・Onikiri::CacheSystem::GetFirstLevelInsnCache()・Onikiri::Cache::IsStallRequired()・m_cacheSystem・m_dispatcher・m_retirer・m_scheduler・Onikiri::ClockedResourceBase::StallThisCycle()・Onikiri::PipelineNodeBase::StallThisCycle().
00244 { 00245 ClockedResourceBase::Evaluate(); 00246 00247 // Front-end stall decision 00248 Cache* lv1ICache = m_cacheSystem->GetFirstLevelInsnCache(); 00249 if( lv1ICache->IsStallRequired() ){ 00250 m_dispatcher->StallThisCycle(); 00251 } 00252 // Back-end stall decision 00253 Cache* lv1DCache = m_cacheSystem->GetFirstLevelDataCache(); 00254 if( lv1DCache->IsStallRequired() ){ 00255 00256 m_retirer->StallThisCycle(); 00257 for( size_t i = 0; i < m_scheduler.size(); i++ ){ 00258 m_scheduler[i]->StallThisCycle(); 00259 } 00260 } 00261 00262 }
関数の呼び出しグラフ:
const DataPredMissRecovery& Onikiri::Core::GetAddrPredMissRecovery | ( | ) | const [inline] |
BPred* Onikiri::Core::GetBPred | ( | ) | const [inline] |
CacheSystem* Onikiri::Core::GetCacheSystem | ( | ) | const [inline] |
参照先 m_cacheSystem.
参照元 Onikiri::InorderList::Initialize()・Onikiri::InorderSystem::Run().
00153 { return m_cacheSystem; }
Here is the caller graph for this function:
CheckpointingPolicy Onikiri::Core::GetCheckpointingPolicy | ( | ) | const [inline] |
int Core::GetCID | ( | ) |
Dispatcher* Onikiri::Core::GetDispatcher | ( | ) | const [inline] |
参照先 m_dispatcher.
参照元 Onikiri::InorderList::Initialize().
00148 { return m_dispatcher; }
Here is the caller graph for this function:
EmulatorIF* Onikiri::Core::GetEmulator | ( | ) | const [inline] |
参照先 m_emulator.
参照元 Onikiri::Op::ExecutionBegin().
00157 { return m_emulator; }
Here is the caller graph for this function:
ExecLatencyInfo* Onikiri::Core::GetExecLatencyInfo | ( | ) | const [inline] |
Fetcher* Onikiri::Core::GetFetcher | ( | ) | const [inline] |
参照先 m_fetcher.
参照元 Onikiri::MemOrderManager::Initialize()・Onikiri::InorderList::Initialize()・Onikiri::Recoverer::RecoverBPredMiss()・Onikiri::Recoverer::RecoverException()・Onikiri::InorderSystem::Run()・Onikiri::OpFinishEvent::Update().
00146 { return m_fetcher; }
Here is the caller graph for this function:
GlobalClock* Onikiri::Core::GetGlobalClock | ( | ) | const [inline] |
参照先 m_globalClock.
参照元 Onikiri::ExecUnitBase::Finalize().
00156 { return m_globalClock; }
Here is the caller graph for this function:
LatPred* Onikiri::Core::GetLatPred | ( | ) | const [inline] |
参照先 m_latPred.
参照元 Onikiri::InorderSystem::Run()・Onikiri::OpFinishEvent::Update().
00151 { return m_latPred; }
Here is the caller graph for this function:
const DataPredMissRecovery& Onikiri::Core::GetLatPredMissRecovery | ( | ) | const [inline] |
LoadPipelineModel Onikiri::Core::GetLoadPipelineModel | ( | ) | const [inline] |
参照先 m_loadPipeLineModel.
参照元 Onikiri::Scheduler::Initialize().
00166 { return m_loadPipeLineModel; }
Here is the caller graph for this function:
int Core::GetNumScheduler | ( | ) | const |
参照先 m_scheduler.
参照元 Onikiri::ConservativeMemDepPred::Allocate()・Onikiri::RegisterFile::Initialize()・Onikiri::ConservativeMemDepPred::Initialize()・Onikiri::Scheduler::Initialize()・Onikiri::OpCodeDispatchSteerer::Initialize()・Onikiri::Dispatcher::Initialize()・Initialize().
00173 { 00174 return static_cast<int>(m_scheduler.size()); 00175 }
Here is the caller graph for this function:
OpArray* Onikiri::Core::GetOpArray | ( | ) | const [inline] |
参照先 m_opArray.
参照元 Onikiri::StoreSet::Initialize()・Onikiri::GShare::Initialize()・Onikiri::BPred::Initialize()・Onikiri::Scheduler::Initialize()・Onikiri::MemOrderManager::Initialize()・Onikiri::InorderList::Initialize().
00159 { return m_opArray; };
Here is the caller graph for this function:
const DataPredMissRecovery& Onikiri::Core::GetPartialLoadRecovery | ( | ) | const [inline] |
参照元 Onikiri::Recoverer::Initialize().
00164 { return m_partialLoadRecovery; }
Here is the caller graph for this function:
RegisterFile* Onikiri::Core::GetRegisterFile | ( | ) | const [inline] |
参照先 m_registerFile.
参照元 Onikiri::Op::Initialize().
00150 { return m_registerFile; }
Here is the caller graph for this function:
Renamer* Onikiri::Core::GetRenamer | ( | ) | const [inline] |
参照先 m_renamer.
参照元 Onikiri::InorderList::Initialize()・Onikiri::InorderSystem::Run().
00147 { return m_renamer; }
Here is the caller graph for this function:
Retirer* Onikiri::Core::GetRetirer | ( | ) | const [inline] |
参照先 m_retirer.
参照元 Onikiri::InorderList::Initialize().
00149 { return m_retirer; }
Here is the caller graph for this function:
Scheduler * Core::GetScheduler | ( | int | index | ) |
参照先 ASSERT・m_scheduler.
参照元 Onikiri::Scheduler::Initialize()・Onikiri::OpCodeDispatchSteerer::Initialize()・Initialize().
00164 { 00165 ASSERT( 00166 index >= 0 && index < static_cast<int>(m_scheduler.size()), 00167 "illegal index: %d", index 00168 ); 00169 return m_scheduler[index]; 00170 }
Here is the caller graph for this function:
SchedulerRemovePolicy Onikiri::Core::GetSchedulerRemovePolicy | ( | ) | const [inline] |
参照元 Onikiri::Scheduler::Initialize().
00167 { return m_schedulerRemovePolicy; }
Here is the caller graph for this function:
Thread * Core::GetThread | ( | int | tid | ) |
参照先 m_thread.
参照元 Onikiri::Retirer::FinishThread().
00178 { 00179 return m_thread[tid]; 00180 }
Here is the caller graph for this function:
int Core::GetThreadCount | ( | ) | [virtual] |
Onikiri::PhysicalResourceBaseを再定義しています。
参照先 m_thread.
参照元 Onikiri::Retirer::FinishThread()・Onikiri::Renamer::Initialize()・Initialize().
00183 { 00184 return m_thread.GetSize(); 00185 }
Here is the caller graph for this function:
int Core::GetTID | ( | const int | index | ) | [virtual] |
Onikiri::PhysicalResourceBaseを再定義しています。
参照先 Onikiri::PhysicalResourceBase::GetTID().
00154 { 00155 return PhysicalResourceNode::GetTID( index ); 00156 }
関数の呼び出しグラフ:
int Onikiri::Core::GetTimeWheelSize | ( | ) | const [inline] |
参照先 m_timeWheelSize.
参照元 Onikiri::ExecUnitBase::Initialize().
00170 { return m_timeWheelSize; };
Here is the caller graph for this function:
const DataPredMissRecovery& Onikiri::Core::GetValuePredMissRecovery | ( | ) | const [inline] |
void Core::Initialize | ( | InitPhase | phase | ) |
参照先 Onikiri::PhysicalResourceNode::CheckNodeInitialized()・GetNumScheduler()・GetScheduler()・GetThreadCount()・Onikiri::PhysicalResourceNode::INIT_POST_CONNECTION・Onikiri::PhysicalResourceNode::INIT_PRE_CONNECTION・Onikiri::ParamExchange::LoadParam()・m_addrMatchPredRecv・m_cacheSystem・m_dispatcher・m_emulator・m_execLatencyInfo・m_fetcher・m_latencyPredRecv・m_latPred・m_opArray・m_opArrayCapacity・m_partialLoadRecovery・m_registerFile・m_renamer・m_retirer・m_thread・m_valuePredRecv・THROW_RUNTIME_ERROR・Onikiri::DataPredMissRecovery::Validate().
00092 { 00093 if(phase == INIT_PRE_CONNECTION){ 00094 LoadParam(); 00095 00096 m_opArray = new OpArray( m_opArrayCapacity ); 00097 00098 m_latencyPredRecv.Validate(); 00099 m_addrMatchPredRecv.Validate(); 00100 m_valuePredRecv.Validate(); 00101 m_partialLoadRecovery.Validate(); 00102 00103 00104 } 00105 else if(phase == INIT_POST_CONNECTION){ 00106 00107 CheckNodeInitialized( "registerFile", m_registerFile ); 00108 CheckNodeInitialized( "fetcher", m_fetcher ); 00109 CheckNodeInitialized( "renamer", m_renamer ); 00110 CheckNodeInitialized( "dispatcher", m_dispatcher ); 00111 CheckNodeInitialized( "retirer", m_retirer ); 00112 CheckNodeInitialized( "latPred", m_latPred ); 00113 CheckNodeInitialized( "execLatencyInfo", m_execLatencyInfo ); 00114 CheckNodeInitialized( "thread", m_thread ); 00115 CheckNodeInitialized( "cacheSystem", m_cacheSystem ); 00116 CheckNodeInitialized( "emulator", m_emulator ); 00117 00118 for( int localTID = 0; localTID < GetThreadCount(); localTID++ ){ 00119 m_thread[localTID]->SetLocalThreadID( localTID ); 00120 } 00121 00122 // scheduler index d`FbN 00123 for(int i = 0; i < GetNumScheduler(); ++i) { 00124 for(int k = i + 1; k < GetNumScheduler(); ++k) { 00125 if( GetScheduler(i)->GetIndex() == GetScheduler(k)->GetIndex() ) { 00126 THROW_RUNTIME_ERROR("same schduler index %d(%d, %d).", 00127 GetScheduler(k)->GetIndex(), i, k); 00128 } 00129 } 00130 } 00131 00132 // Check OpArray's capacity. 00133 int totalInorderListCapacity = 0; 00134 for( int i = 0; i < m_thread.GetSize(); ++i ){ 00135 totalInorderListCapacity += 00136 m_thread[i]->GetInorderList()->GetCapacity(); 00137 } 00138 if( m_opArrayCapacity < totalInorderListCapacity ){ 00139 THROW_RUNTIME_ERROR( 00140 "The capacity(%d) of 'OpArray' is too small. Make 'Core/@OpArrayCapacity' more larger.", 00141 m_opArrayCapacity 00142 ); 00143 } 00144 } 00145 }
関数の呼び出しグラフ:
参照先 ASSERT・Onikiri::CP_ALL・Onikiri::CP_AUTO・Onikiri::OpInfo::GetOpClass()・HOOK_SECTION_PARAM・Onikiri::Core::CheckpointDecisionHookParam::info・Onikiri::OpClass::IsBranch()・Onikiri::DataPredMissRecovery::IsRequiredAfterCheckpoint()・m_addrMatchPredRecv・m_checkpointingPolicy・m_latencyPredRecv・m_partialLoadRecovery・m_valuePredRecv・Onikiri::Core::CheckpointDecisionHookParam::requried・s_checkpointDecisionHook.
参照元 Onikiri::Renamer::BackupOnCheckpoint().
00219 { 00220 CheckpointDecisionHookParam param = { &pc, info, false/*before*/, false/*reqruired*/ } ; 00221 HOOK_SECTION_PARAM( s_checkpointDecisionHook, param ){ 00222 if( m_checkpointingPolicy == CP_ALL ){ 00223 param.requried = true; 00224 } 00225 else if ( m_checkpointingPolicy == CP_AUTO ){ 00226 const OpClass& opClass = param.info->GetOpClass(); 00227 param.requried = 00228 opClass.IsBranch() || 00229 m_latencyPredRecv.IsRequiredAfterCheckpoint ( opClass ) || 00230 m_addrMatchPredRecv.IsRequiredAfterCheckpoint ( opClass ) || 00231 m_valuePredRecv.IsRequiredAfterCheckpoint ( opClass ) || 00232 m_partialLoadRecovery.IsRequiredAfterCheckpoint ( opClass ); 00233 } 00234 else{ 00235 ASSERT( "Unknown check-pointing policy." ); 00236 } 00237 } 00238 00239 return param.requried; 00240 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
参照先 ASSERT・Onikiri::CP_ALL・Onikiri::CP_AUTO・Onikiri::OpInfo::GetOpClass()・HOOK_SECTION_PARAM・Onikiri::Core::CheckpointDecisionHookParam::info・Onikiri::DataPredMissRecovery::IsRequiredBeforeCheckpoint()・m_addrMatchPredRecv・m_checkpointingPolicy・m_latencyPredRecv・m_partialLoadRecovery・m_valuePredRecv・Onikiri::Core::CheckpointDecisionHookParam::requried・s_checkpointDecisionHook.
参照元 Onikiri::Renamer::BackupOnCheckpoint().
00193 { 00194 CheckpointDecisionHookParam param = { &pc, info, true/*before*/, false/*reqruired*/ } ; 00195 00196 HOOK_SECTION_PARAM( s_checkpointDecisionHook, param ){ 00197 if( m_checkpointingPolicy == CP_ALL ){ 00198 param.requried = true; 00199 } 00200 else if ( m_checkpointingPolicy == CP_AUTO ){ 00201 const OpClass& opClass = param.info->GetOpClass(); 00202 param.requried = 00203 m_latencyPredRecv.IsRequiredBeforeCheckpoint ( opClass ) || 00204 m_addrMatchPredRecv.IsRequiredBeforeCheckpoint ( opClass ) || 00205 m_valuePredRecv.IsRequiredBeforeCheckpoint ( opClass ) || 00206 m_partialLoadRecovery.IsRequiredBeforeCheckpoint( opClass ); 00207 } 00208 else{ 00209 ASSERT( "Unknown check-pointing policy." ); 00210 } 00211 } 00212 00213 return param.requried; 00214 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
Onikiri::Core::PARAM_ENTRY | ( | "@Size" | , | |
m_timeWheelSize | ||||
) |
Onikiri::Core::RESOURCE_SETTER_ENTRY | ( | Scheduler | , | |
"scheduler" | , | |||
AddScheduler | ||||
) |
const char* Onikiri::Core::Who | ( | ) | const [inline] |
Onikiri::PhysicalResourceNodeを再定義しています。
参照先 Onikiri::PhysicalResourceNode::Who().
00184 { 00185 return PhysicalResourceNode::Who(); 00186 };
関数の呼び出しグラフ:
BPred* Onikiri::Core::m_bPred [protected] |
CacheSystem* Onikiri::Core::m_cacheSystem [protected] |
Dispatcher* Onikiri::Core::m_dispatcher [protected] |
EmulatorIF* Onikiri::Core::m_emulator [protected] |
ExecLatencyInfo* Onikiri::Core::m_execLatencyInfo [protected] |
Fetcher* Onikiri::Core::m_fetcher [protected] |
GlobalClock* Onikiri::Core::m_globalClock [protected] |
DataPredMissRecovery Onikiri::Core::m_latencyPredRecv [protected] |
LatPred* Onikiri::Core::m_latPred [protected] |
LoadPipelineModel Onikiri::Core::m_loadPipeLineModel [protected] |
OpArray* Onikiri::Core::m_opArray [protected] |
int Onikiri::Core::m_opArrayCapacity [protected] |
RegisterFile* Onikiri::Core::m_registerFile [protected] |
Renamer* Onikiri::Core::m_renamer [protected] |
Retirer* Onikiri::Core::m_retirer [protected] |
SchedulerArray Onikiri::Core::m_scheduler [protected] |
PhysicalResourceArray<Thread> Onikiri::Core::m_thread [protected] |
int Onikiri::Core::m_timeWheelSize [protected] |
DataPredMissRecovery Onikiri::Core::m_valuePredRecv [protected] |