クラス Onikiri::InorderIssueSelector

#include <InorderIssueSelector.h>

Onikiri::InorderIssueSelectorに対する継承グラフ

Inheritance graph
[凡例]
Onikiri::InorderIssueSelectorのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public 型

typedef Scheduler::SchedulingOps SchedulingOps

Public メソッド

virtual void EvaluateSelect (Scheduler *scheduler)
virtual void Finalize ()
virtual void Initialize (InitPhase)
 InorderIssueSelector ()
virtual ~InorderIssueSelector ()

説明

InorderIssueSelector.h44 行で定義されています。


型定義

typedef Scheduler::SchedulingOps Onikiri::InorderIssueSelector::SchedulingOps

InorderIssueSelector.h49 行で定義されています。


コンストラクタとデストラクタ

InorderIssueSelector::InorderIssueSelector (  ) 

InorderIssueSelector.cpp39 行で定義されています。

00040 {
00041 
00042 }

InorderIssueSelector::~InorderIssueSelector (  )  [virtual]

InorderIssueSelector.cpp44 行で定義されています。

00045 {
00046 
00047 }


関数

void InorderIssueSelector::EvaluateSelect ( Scheduler scheduler  )  [virtual]

Onikiri::IssueSelectorIFを実装しています。

InorderIssueSelector.cpp58 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()Onikiri::OpList::begin()Onikiri::Scheduler::CanSelect()Onikiri::DS_WAITING_UNITOnikiri::Dumper::Dump()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()Onikiri::OpList::end()Onikiri::g_dumperOnikiri::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.cpp53 行で定義されています。

参照先 Onikiri::PhysicalResourceNode::ReleaseParam().

00054 {
00055     ReleaseParam();
00056 }

関数の呼び出しグラフ:

void InorderIssueSelector::Initialize ( InitPhase   )  [virtual]

InorderIssueSelector.cpp49 行で定義されています。

00050 {
00051 }


このクラスの説明は次のファイルから生成されました:
Onikiri2に対してTue Jun 18 15:01:53 2013に生成されました。  doxygen 1.4.7