#include <AgeIssueSelector.h>
Onikiri::AgeIssueSelectorに対する継承グラフ
Public 型 | |
typedef Scheduler::SchedulingOps | SchedulingOps |
Public メソッド | |
AgeIssueSelector () | |
virtual void | EvaluateSelect (Scheduler *scheduler) |
virtual void | Finalize () |
virtual void | Initialize (InitPhase) |
virtual | ~AgeIssueSelector () |
AgeIssueSelector.h の 45 行で定義されています。
AgeIssueSelector.h の 50 行で定義されています。
AgeIssueSelector::AgeIssueSelector | ( | ) |
AgeIssueSelector::~AgeIssueSelector | ( | ) | [virtual] |
void AgeIssueSelector::EvaluateSelect | ( | Scheduler * | scheduler | ) | [virtual] |
Onikiri::IssueSelectorIFを実装しています。
AgeIssueSelector.cpp の 58 行で定義されています。
参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()・Onikiri::OpList::begin()・Onikiri::Scheduler::CanSelect()・Onikiri::DS_WAITING_UNIT・Onikiri::Dumper::Dump()・Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()・Onikiri::OpList::end()・Onikiri::g_dumper・Onikiri::Scheduler::GetIssueWidth()・Onikiri::Scheduler::GetReadyOps()・Onikiri::Scheduler::GetWokeUpOps()・Onikiri::Scheduler::ReserveSelect().
00059 { 00060 // Select issued ops. 00061 int issueCount = 0; 00062 int issueWidth = scheduler->GetIssueWidth(); 00063 00064 const OpList& readyOps = scheduler->GetReadyOps(); 00065 const SchedulingOps& wokeUpOps = scheduler->GetWokeUpOps(); 00066 00067 OpList::const_iterator r = readyOps.begin(); 00068 SchedulingOps::const_iterator w = wokeUpOps.begin(); 00069 00070 while( issueCount < issueWidth ){ 00071 OpIterator selected; 00072 00073 // AgeIssueSelector selects the oldest ops from ready ops on issue. 00074 if( r != readyOps.end() && w != wokeUpOps.end() ){ 00075 // There are both of ready ops and woke-up ops. 00076 if( (*r)->GetGlobalSerialID() < (*w)->GetGlobalSerialID() ){ 00077 selected = *r; ++r; 00078 } 00079 else{ 00080 selected = *w; ++w; 00081 } 00082 } 00083 else if( r != readyOps.end() ){ 00084 // There are only ready ops. 00085 selected = *r; ++r; 00086 } 00087 else if( w != wokeUpOps.end() ){ 00088 // There are only woke-up ops. 00089 selected = *w; ++w; 00090 } 00091 else{ 00092 // No op can be selected. 00093 break; 00094 } 00095 00096 if( scheduler->CanSelect( selected ) ) { 00097 scheduler->ReserveSelect( selected ); 00098 ++issueCount; 00099 } 00100 else{ 00101 g_dumper.Dump( DS_WAITING_UNIT, selected ); 00102 } 00103 } 00104 }
関数の呼び出しグラフ:
void AgeIssueSelector::Finalize | ( | ) | [virtual] |
Onikiri::PhysicalResourceNodeを再定義しています。
AgeIssueSelector.cpp の 53 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::ReleaseParam().
00054 { 00055 ReleaseParam(); 00056 }
関数の呼び出しグラフ:
void AgeIssueSelector::Initialize | ( | InitPhase | ) | [virtual] |