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