クラス Onikiri::ClockedResourceBase

#include <ClockedResourceBase.h>

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

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

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

Public 型

enum  PHASE {
  PHASE_BEGIN, PHASE_EVALUATE, PHASE_TRANSITION, PHASE_UPDATE,
  PHASE_END
}
 PHASE_BEGIN
 PHASE_END
 PHASE_EVALUATE
 PHASE_TRANSITION
 PHASE_UPDATE

Public メソッド

virtual void AddChild (ClockedResourceIF *child)
virtual void Begin ()
virtual void BeginStall ()
virtual void CacnelStallPeriod ()
 ClockedResourceBase (const char *name="")
virtual void End ()
virtual void EndStall ()
virtual void Evaluate ()
virtual int GetPriority () const
bool IsStalledLastCycle ()
bool IsStalledThisCycle ()
virtual void SetParent (ClockedResourceIF *parent)
virtual void StallNextCycle (int cycles)
virtual void StallThisCycle ()
void StallThisCycleExcludingChildren ()
virtual void Tick ()
virtual void Transition ()
virtual void TriggerUpdate ()
virtual void Update ()
virtual const char * Who () const
 ~ClockedResourceBase ()

Protected 型

typedef std::vector< ClockedResourceIF * > Children

Protected メソッド

PHASE GetCurrentPhase () const
s64 GetCycles () const
s64 GetStalledCycles () const
void SetPriority (int priority)

Protected 変数

Children m_children

構成

struct  ComparePriority

説明

ClockedResourceBase.h40 行で定義されています。


型定義

typedef std::vector<ClockedResourceIF*> Onikiri::ClockedResourceBase::Children [protected]

ClockedResourceBase.h283 行で定義されています。


列挙型

enum Onikiri::ClockedResourceBase::PHASE

列挙型の値:
PHASE_BEGIN 
PHASE_EVALUATE 
PHASE_TRANSITION 
PHASE_UPDATE 
PHASE_END 

ClockedResourceBase.h43 行で定義されています。

00044         {
00045             PHASE_BEGIN,
00046             PHASE_EVALUATE,
00047             PHASE_TRANSITION,
00048             PHASE_UPDATE,
00049             PHASE_END
00050         };


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

Onikiri::ClockedResourceBase::ClockedResourceBase ( const char *  name = ""  )  [inline]

ClockedResourceBase.h58 行で定義されています。

00058                                                      : 
00059             m_name( name ),
00060             m_reqStallThisCycle( false ),
00061             m_stallPeriod( 0 ),
00062             m_thisCycleStalled( false ),
00063             m_lastCycleStalled( false ),
00064             m_parent( NULL ),
00065             m_cycles( 0 ),
00066             m_stalledCycles( 0 ),
00067             m_phase( PHASE_BEGIN ),
00068             m_priority( RP_DEFAULT_UPDATE )
00069         {
00070         }

Onikiri::ClockedResourceBase::~ClockedResourceBase (  )  [inline]

ClockedResourceBase.h72 行で定義されています。

00073         {
00074         }


関数

virtual void Onikiri::ClockedResourceBase::AddChild ( ClockedResourceIF child  )  [inline, virtual]

ClockedResourceBase.h245 行で定義されています。

参照先 m_childrenOnikiri::ClockedResourceIF::SetParent().

参照元 Onikiri::PipelineNodeBase::AddLowerPipeline()Onikiri::Scheduler::Initialize()Onikiri::PipelineNodeBase::PipelineNodeBase().

00246         {
00247             m_children.push_back( child );
00248             child->SetParent( this );
00249         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::Begin (  )  [inline, virtual]

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

Onikiri::Schedulerで再定義されています。

ClockedResourceBase.h81 行で定義されています。

参照先 ASSERTm_childrenPHASE_BEGINPHASE_EVALUATE.

参照元 Onikiri::Scheduler::Begin().

00082         {
00083             ASSERT( m_phase == PHASE_BEGIN );
00084 
00085             m_lastCycleStalled = m_thisCycleStalled;
00086             m_thisCycleStalled  = false;
00087             m_reqStallThisCycle = false;
00088 
00089             if( m_stallPeriod > 0 ) {
00090                 m_reqStallThisCycle = true;
00091                 --m_stallPeriod;
00092             }
00093 
00094             m_phase = PHASE_EVALUATE;
00095 
00096             Children::iterator end = m_children.end();
00097             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00098                 (*i)->Begin();
00099             }
00100             
00101             m_cycles++;
00102         }

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::BeginStall (  )  [inline, virtual]

Onikiri::OpBufferOnikiri::PipelineOnikiri::PipelineLatchで再定義されています。

ClockedResourceBase.h282 行で定義されています。

参照元 Onikiri::PipelineLatch::BeginStall()Transition().

00282 {};

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::CacnelStallPeriod (  )  [inline, virtual]

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

ClockedResourceBase.h214 行で定義されています。

参照先 m_children.

00215         {
00216             m_stallPeriod = 0;
00217 
00218             Children::iterator end = m_children.end();
00219             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00220                 (*i)->CacnelStallPeriod();
00221             }
00222         }

virtual void Onikiri::ClockedResourceBase::End (  )  [inline, virtual]

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

Onikiri::TimeWheelBaseOnikiri::PipelineLatchで再定義されています。

ClockedResourceBase.h162 行で定義されています。

参照先 ASSERTm_childrenPHASE_BEGINPHASE_ENDTick().

参照元 Onikiri::PipelineLatch::End()Onikiri::TimeWheelBase::End().

00163         {
00164             ASSERT( m_phase == PHASE_END, "Do you call Process() of a base class?"  );
00165             m_phase = PHASE_BEGIN;
00166 
00167             Children::iterator end = m_children.end();
00168             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00169                 (*i)->End();
00170             }
00171 
00172             if( !m_thisCycleStalled ){
00173                 // Proceed a time tick.
00174                 Tick();
00175             }
00176         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::EndStall (  )  [inline, virtual]

Onikiri::OpBufferOnikiri::PipelineOnikiri::PipelineLatchで再定義されています。

ClockedResourceBase.h283 行で定義されています。

参照元 Onikiri::PipelineLatch::EndStall()Transition().

00283 {};

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::Evaluate (  )  [inline, virtual]

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

Onikiri::CoreOnikiri::DispatcherOnikiri::FetcherOnikiri::RenamerOnikiri::RetirerOnikiri::Schedulerで再定義されています。

ClockedResourceBase.h105 行で定義されています。

参照先 ASSERTm_childrenPHASE_EVALUATEPHASE_TRANSITION.

参照元 Onikiri::Scheduler::Evaluate()Onikiri::Retirer::Evaluate()Onikiri::Renamer::Evaluate()Onikiri::Fetcher::Evaluate()Onikiri::Dispatcher::Evaluate()Onikiri::Core::Evaluate().

00106         {
00107             ASSERT( m_phase == PHASE_EVALUATE, "Do you call Begin() of a base class?" );
00108             m_phase = PHASE_TRANSITION;
00109 
00110             Children::iterator end = m_children.end();
00111             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00112                 (*i)->Evaluate();
00113             }
00114         }

Here is the caller graph for this function:

PHASE Onikiri::ClockedResourceBase::GetCurrentPhase (  )  const [inline, protected]

ClockedResourceBase.h293 行で定義されています。

参照元 Onikiri::TimeWheelBase::AddEvent()Onikiri::Scheduler::CanSelect()Onikiri::Scheduler::EvaluateDependency()Onikiri::TimeWheelBase::GetNow()Onikiri::Scheduler::ReserveSelect().

00294         {
00295             return m_phase;
00296         }

Here is the caller graph for this function:

s64 Onikiri::ClockedResourceBase::GetCycles (  )  const [inline, protected]

ClockedResourceBase.h298 行で定義されています。

00299         {
00300             return m_cycles;
00301         }

virtual int Onikiri::ClockedResourceBase::GetPriority (  )  const [inline, virtual]

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

ClockedResourceBase.h262 行で定義されています。

00263         {
00264             return m_priority;
00265         }

s64 Onikiri::ClockedResourceBase::GetStalledCycles (  )  const [inline, protected]

ClockedResourceBase.h303 行で定義されています。

参照元 Onikiri::Renamer::Finalize()Onikiri::Fetcher::Finalize().

00304         {
00305             return m_stalledCycles;
00306         }

Here is the caller graph for this function:

bool Onikiri::ClockedResourceBase::IsStalledLastCycle (  )  [inline]

ClockedResourceBase.h235 行で定義されています。

参照先 ASSERTPHASE_BEGIN.

00236         {
00237             ASSERT(
00238                 m_phase != PHASE_BEGIN,
00239                 "IsStalledLastCycle() cannot be called in PHASE_BEGIN." 
00240             );
00241             return m_lastCycleStalled;
00242         }

bool Onikiri::ClockedResourceBase::IsStalledThisCycle (  )  [inline]

ClockedResourceBase.h225 行で定義されています。

参照先 ASSERTPHASE_ENDPHASE_UPDATE.

参照元 Onikiri::OpBuffer::CheckAndDumpStallBegin()Onikiri::PipelineLatch::End()Onikiri::TimeWheelBase::End()Onikiri::PipelineLatch::Receive()Onikiri::Scheduler::Transition()Onikiri::Retirer::Transition()Onikiri::PipelineLatch::Transition().

00226         {
00227             ASSERT(
00228                 m_phase == PHASE_UPDATE || m_phase == PHASE_END,
00229                 "IsStalledThisCycle() can be called only in PHASE_PROCESS/END."
00230             );
00231             return m_thisCycleStalled;
00232         }

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::SetParent ( ClockedResourceIF parent  )  [inline, virtual]

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

ClockedResourceBase.h252 行で定義されています。

参照先 Onikiri::String::format()Onikiri::ClockedResourceIF::Who().

00253         {
00254             m_parent = parent;
00255             
00256             m_who = m_name + "(" + typeid(*this).name() + ")";
00257             if( m_parent ){
00258                 m_who += String().format( " <= %s(Parent)  ", m_parent->Who() );
00259             }
00260         }

関数の呼び出しグラフ:

void Onikiri::ClockedResourceBase::SetPriority ( int  priority  )  [inline, protected]

ClockedResourceBase.h309 行で定義されています。

参照元 Onikiri::Retirer::Initialize().

00310         {
00311             m_priority = priority;
00312         }

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::StallNextCycle ( int  cycles  )  [inline, virtual]

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

Onikiri::PipelineNodeBaseで再定義されています。

ClockedResourceBase.h203 行で定義されています。

参照先 m_children.

参照元 Onikiri::PipelineNodeBase::StallNextCycle().

00204         {
00205             m_stallPeriod = std::max( cycles, m_stallPeriod );
00206 
00207             Children::iterator end = m_children.end();
00208             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00209                 (*i)->StallNextCycle( cycles );
00210             }
00211         }

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::StallThisCycle (  )  [inline, virtual]

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

Onikiri::PipelineNodeBaseで再定義されています。

ClockedResourceBase.h179 行で定義されています。

参照先 ASSERTm_childrenPHASE_EVALUATEPHASE_TRANSITION.

参照元 Onikiri::Core::Evaluate()Onikiri::PipelineNodeBase::StallThisCycle()Onikiri::PipelineNodeBase::StallThisNodeAndUpperThisCycle().

00180         {
00181             ASSERT(
00182                 m_phase == PHASE_EVALUATE || m_phase == PHASE_TRANSITION,
00183                 "IsStalledThisCycle() can be called only in PHASE_EVALUATE/TRANSITION."
00184             );
00185             m_reqStallThisCycle = true;
00186 
00187             Children::iterator end = m_children.end();
00188             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00189                 (*i)->StallThisCycle();
00190             }
00191         }

Here is the caller graph for this function:

void Onikiri::ClockedResourceBase::StallThisCycleExcludingChildren (  )  [inline]

ClockedResourceBase.h193 行で定義されています。

参照先 ASSERTPHASE_EVALUATEPHASE_TRANSITION.

参照元 Onikiri::PipelineNodeBase::StallThisNodeAndUpperThisCycle().

00194         {
00195             ASSERT(
00196                 m_phase == PHASE_EVALUATE || m_phase == PHASE_TRANSITION,
00197                 "IsStalledThisCycle() can be called only in PHASE_EVALUATE/TRANSITION."
00198             );
00199             m_reqStallThisCycle = true;
00200         }

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::Tick (  )  [inline, virtual]

Onikiri::TimeWheelBaseで再定義されています。

ClockedResourceBase.h279 行で定義されています。

参照元 End().

00279 {};

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::Transition (  )  [inline, virtual]

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

Onikiri::PipelineLatchOnikiri::RetirerOnikiri::Schedulerで再定義されています。

ClockedResourceBase.h118 行で定義されています。

参照先 ASSERTBeginStall()EndStall()m_childrenPHASE_TRANSITIONPHASE_UPDATE.

参照元 Onikiri::Scheduler::Transition()Onikiri::Retirer::Transition()Onikiri::PipelineLatch::Transition().

00119         {
00120             ASSERT( m_phase == PHASE_TRANSITION, "Do you call Evaluate() of a base class?"  );
00121 
00122             // Fix stall state
00123             m_thisCycleStalled = m_reqStallThisCycle;
00124             m_phase = PHASE_UPDATE;
00125 
00126             
00127             if( m_thisCycleStalled ){
00128                 // Stall this cycle.
00129                 m_stalledCycles++;
00130             }
00131 
00132             if( !m_lastCycleStalled && m_thisCycleStalled ){
00133                 BeginStall();   
00134             }
00135             else if ( m_lastCycleStalled && !m_thisCycleStalled ){
00136                 EndStall(); 
00137             }
00138 
00139             Children::iterator end = m_children.end();
00140             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00141                 (*i)->Transition();
00142             }
00143         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

virtual void Onikiri::ClockedResourceBase::TriggerUpdate (  )  [inline, virtual]

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

ClockedResourceBase.h146 行で定義されています。

参照先 ASSERTm_childrenPHASE_ENDPHASE_UPDATEUpdate().

00147         {
00148             ASSERT( m_phase == PHASE_UPDATE, "Do you call Event() of a base class?" );
00149 
00150             if( !m_thisCycleStalled ){
00151                 Update();
00152             }
00153             m_phase = PHASE_END;
00154 
00155             Children::iterator end = m_children.end();
00156             for( Children::iterator i = m_children.begin(); i != end; ++i ){
00157                 (*i)->TriggerUpdate();
00158             }
00159         }

関数の呼び出しグラフ:

virtual void Onikiri::ClockedResourceBase::Update (  )  [inline, virtual]

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

Onikiri::CacheOnikiri::DispatcherOnikiri::FetcherOnikiri::RenamerOnikiri::RetirerOnikiri::Schedulerで再定義されています。

ClockedResourceBase.h274 行で定義されています。

参照元 TriggerUpdate().

00274 {};

Here is the caller graph for this function:

virtual const char* Onikiri::ClockedResourceBase::Who (  )  const [inline, virtual]

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

Onikiri::CoreOnikiri::PipelineNodeBaseで再定義されています。

ClockedResourceBase.h267 行で定義されています。

00268         {
00269 
00270             return m_who.c_str();
00271         }


変数

Children Onikiri::ClockedResourceBase::m_children [protected]

ClockedResourceBase.h291 行で定義されています。

参照元 AddChild()Begin()CacnelStallPeriod()Onikiri::PipelineNodeBase::DisableLatch()End()Evaluate()StallNextCycle()StallThisCycle()Transition()TriggerUpdate().


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