クラス Onikiri::PipelineNodeBase

#include <PipelineNodeBase.h>

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

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

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

Public メソッド

virtual void AddLowerPipeline (Pipeline *pipe)
virtual bool CanAllocate (int ops)
virtual void Cancel (OpIterator op)
virtual void Commit (OpIterator op)
void DisableLatch ()
virtual void ExitLowerPipeline (OpIterator op)
virtual void ExitUpperPipeline (OpIterator op)
virtual void Flush (OpIterator op)
CoreGetCore (int index=0)
virtual PipelineGetLowerPipeline ()
virtual PipelineNodeIFGetLowerPipelineNode ()
virtual PipelineNodeIFGetUpperPipelineNode ()
virtual void Initialize (InitPhase phase)
 PipelineNodeBase ()
virtual void Retire (OpIterator op)
virtual void SetLowerPipelineNode (PipelineNodeIF *lower)
virtual void SetUpperPipelineNode (PipelineNodeIF *upper)
virtual void StallNextCycle (int cycle)
virtual void StallThisCycle ()
virtual void StallThisNodeAndUpperThisCycle ()
const char * Who () const
virtual ~PipelineNodeBase ()

Protected 型

typedef ClockedResourceBase BaseT

Protected 変数

PhysicalResourceArray< Corem_core
bool m_enableLatch
std::vector< Pipeline * > m_exLowerPipelines
bool m_initialized
PipelineLatch m_latch
Pipeline m_lowerPipeline
PipelineNodeIFm_lowerPipelineNode
PhysicalResourceArray< Threadm_thread
Pipelinem_upperPipeline
PipelineNodeIFm_upperPipelineNode

説明

PipelineNodeBase.h48 行で定義されています。


型定義

typedef ClockedResourceBase Onikiri::PipelineNodeBase::BaseT [protected]

PipelineNodeBase.h229 行で定義されています。


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

Onikiri::PipelineNodeBase::PipelineNodeBase (  )  [inline]

PipelineNodeBase.h61 行で定義されています。

参照先 Onikiri::ClockedResourceBase::AddChild()Onikiri::Pipeline::AddUpperPipelineNode()m_latchm_lowerPipeline.

00061                            : 
00062             m_initialized( false ),
00063             m_enableLatch( true ),
00064             m_upperPipelineNode( NULL ),
00065             m_upperPipeline( NULL ),
00066             m_lowerPipelineNode( NULL )
00067         {
00068             BaseT::AddChild( &m_latch );            // gcc needs 'BaseT::'
00069             BaseT::AddChild( &m_lowerPipeline );    
00070             m_lowerPipeline.AddUpperPipelineNode( this );
00071         }

関数の呼び出しグラフ:

virtual Onikiri::PipelineNodeBase::~PipelineNodeBase (  )  [inline, virtual]

PipelineNodeBase.h73 行で定義されています。

参照先 ASSERTm_initialized.

00074         {
00075             ASSERT( m_initialized, "Initialize() has not been called." );
00076         }


関数

virtual void Onikiri::PipelineNodeBase::AddLowerPipeline ( Pipeline pipe  )  [inline, virtual]

PipelineNodeBase.h180 行で定義されています。

参照先 Onikiri::ClockedResourceBase::AddChild()Onikiri::Pipeline::AddUpperPipelineNode()m_exLowerPipelines.

00181         {
00182             this->AddChild( pipe ); // gcc needs 'BaseT::'
00183             pipe->AddUpperPipelineNode( this );
00184             m_exLowerPipelines.push_back( pipe );
00185         }

関数の呼び出しグラフ:

virtual bool Onikiri::PipelineNodeBase::CanAllocate ( int  ops  )  [inline, virtual]

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

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

PipelineNodeBase.h174 行で定義されています。

参照元 Onikiri::Renamer::CanRename().

00175         {
00176             return true;
00177         }

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::Cancel ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h188 行で定義されています。

00188 {}

virtual void Onikiri::PipelineNodeBase::Commit ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h187 行で定義されています。

参照元 Onikiri::InorderList::NotifyCommit().

00187 {}

Here is the caller graph for this function:

void Onikiri::PipelineNodeBase::DisableLatch (  )  [inline]

PipelineNodeBase.h213 行で定義されています。

参照先 Onikiri::ClockedResourceBase::m_childrenm_enableLatchm_latch.

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

00214         {
00215             for( Children::iterator i = m_children.begin(); i != m_children.end(); ++i ){
00216                 if( *i == (ClockedResourceIF*)&m_latch ){
00217                     m_children.erase( i );
00218                     break;
00219                 }
00220             }
00221             m_enableLatch = false;
00222         }

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::ExitLowerPipeline ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h138 行で定義されています。

00139         {
00140         };

virtual void Onikiri::PipelineNodeBase::ExitUpperPipeline ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h130 行で定義されています。

参照先 m_enableLatchm_latchOnikiri::PipelineLatch::Receive().

00131         {
00132             if( m_enableLatch ){
00133                 m_latch.Receive( op );
00134             }
00135         };

関数の呼び出しグラフ:

virtual void Onikiri::PipelineNodeBase::Flush ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h190 行で定義されています。

参照先 Onikiri::PipelineLatch::Delete()Onikiri::Pipeline::Flush()m_enableLatchm_exLowerPipelinesm_latchm_lowerPipeline.

参照元 Onikiri::Scheduler::Flush()Onikiri::Dispatcher::Flush()Onikiri::InorderList::NotifyFlush().

00191         {
00192             if( m_enableLatch ){
00193                 m_latch.Delete( op );
00194             }
00195             m_lowerPipeline.Flush( op );
00196             for( size_t i = 0; i < m_exLowerPipelines.size(); i++ ){
00197                 m_exLowerPipelines[i]->Flush( op );
00198             }
00199         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

Core* Onikiri::PipelineNodeBase::GetCore ( int  index = 0  )  [inline]

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

参照先 m_core.

参照元 Onikiri::Fetcher::BackupOnCheckpoint()Onikiri::Fetcher::CanFetch()Onikiri::Fetcher::CreateCheckpoint()Onikiri::Fetcher::Fetch()Onikiri::Retirer::FinishThread()Onikiri::Scheduler::Initialize()Onikiri::Renamer::Initialize()Onikiri::Dispatcher::Initialize().

00225 { return m_core[index]; }

Here is the caller graph for this function:

virtual Pipeline* Onikiri::PipelineNodeBase::GetLowerPipeline (  )  [inline, virtual]

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

PipelineNodeBase.h156 行で定義されています。

参照先 m_lowerPipeline.

参照元 Onikiri::Retirer::Commit()Onikiri::Dispatcher::Dispatch()Onikiri::Renamer::EnterPipeline()Onikiri::Fetcher::EnterPipeline()Onikiri::Scheduler::Finished()Onikiri::Scheduler::Initialize()Onikiri::Cache::Initialize()Onikiri::ExecUnitBase::RegisterDetectEvent()Onikiri::Scheduler::RegisterWakeUpEvent()Onikiri::Scheduler::WriteBackBegin()Onikiri::Scheduler::WriteBackEnd().

00157         {
00158             return &m_lowerPipeline;
00159         }

Here is the caller graph for this function:

virtual PipelineNodeIF* Onikiri::PipelineNodeBase::GetLowerPipelineNode (  )  [inline, virtual]

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

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

参照先 m_lowerPipelineNode.

参照元 Onikiri::Renamer::EnterPipeline()Onikiri::Fetcher::EnterPipeline()Onikiri::Fetcher::Initialize().

00163         {
00164             return m_lowerPipelineNode;
00165         }

Here is the caller graph for this function:

virtual PipelineNodeIF* Onikiri::PipelineNodeBase::GetUpperPipelineNode (  )  [inline, virtual]

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

PipelineNodeBase.h168 行で定義されています。

参照先 m_upperPipelineNode.

参照元 StallNextCycle()StallThisCycle()StallThisNodeAndUpperThisCycle().

00169         {
00170             return m_upperPipelineNode;
00171         }

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::Initialize ( InitPhase  phase  )  [inline, virtual]

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

PipelineNodeBase.h78 行で定義されています。

参照先 Onikiri::PhysicalResourceNode::INIT_POST_CONNECTIONm_corem_initializedm_threadTHROW_RUNTIME_ERROR.

参照元 Onikiri::Scheduler::Initialize()Onikiri::Retirer::Initialize()Onikiri::Renamer::Initialize()Onikiri::Fetcher::Initialize()Onikiri::Dispatcher::Initialize()Onikiri::Cache::Initialize().

00079         {
00080             if( phase == INIT_POST_CONNECTION ){
00081                 if( m_thread.GetSize() == 0 ) {
00082                     THROW_RUNTIME_ERROR("thread not set.");
00083                 }
00084                 if( m_core.GetSize() == 0 ) {
00085                     THROW_RUNTIME_ERROR("core not set.");
00086                 }
00087             }
00088 
00089             m_initialized = true;
00090         }

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::Retire ( OpIterator  op  )  [inline, virtual]

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

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

PipelineNodeBase.h201 行で定義されています。

参照先 Onikiri::PipelineLatch::Delete()m_enableLatchm_exLowerPipelinesm_latchm_lowerPipelineOnikiri::Pipeline::Retire().

参照元 Onikiri::InorderList::NotifyRetire()Onikiri::Scheduler::Retire()Onikiri::Dispatcher::Retire().

00202         {
00203             if( m_enableLatch ){
00204                 m_latch.Delete( op );
00205             }
00206             m_lowerPipeline.Retire( op );
00207             for( size_t i = 0; i < m_exLowerPipelines.size(); i++ ){
00208                 m_exLowerPipelines[i]->Retire( op );
00209             }
00210         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::SetLowerPipelineNode ( PipelineNodeIF lower  )  [inline, virtual]

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

PipelineNodeBase.h150 行で定義されています。

参照先 m_lowerPipelineNode.

00151         {
00152             m_lowerPipelineNode = lower;
00153         }

virtual void Onikiri::PipelineNodeBase::SetUpperPipelineNode ( PipelineNodeIF upper  )  [inline, virtual]

PipelineNodeBase.h143 行で定義されています。

参照先 Onikiri::PipelineNodeIF::GetLowerPipeline()m_upperPipelinem_upperPipelineNodeOnikiri::PipelineNodeIF::SetLowerPipelineNode().

00144         {
00145             m_upperPipelineNode = upper;
00146             m_upperPipeline     = upper->GetLowerPipeline();
00147             upper->SetLowerPipelineNode( this );
00148         }

関数の呼び出しグラフ:

virtual void Onikiri::PipelineNodeBase::StallNextCycle ( int  cycle  )  [inline, virtual]

Onikiri::ClockedResourceBaseを再定義しています。

PipelineNodeBase.h103 行で定義されています。

参照先 GetUpperPipelineNode()Onikiri::PipelineNodeIF::StallNextCycle()Onikiri::ClockedResourceBase::StallNextCycle().

参照元 Onikiri::Recoverer::RecoverBPredMiss()Onikiri::Recoverer::RecoverException()Onikiri::Fetcher::Update().

00104         {
00105             BaseT::StallNextCycle( cycle );
00106 
00107             PipelineNodeIF* upper = GetUpperPipelineNode();
00108             if( upper ){
00109                 upper->StallNextCycle( cycle );
00110             }
00111         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

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

Onikiri::ClockedResourceBaseを再定義しています。

PipelineNodeBase.h93 行で定義されています。

参照先 GetUpperPipelineNode()Onikiri::PipelineNodeIF::StallThisCycle()Onikiri::ClockedResourceBase::StallThisCycle().

参照元 Onikiri::Core::Evaluate().

00094         {
00095             BaseT::StallThisCycle();
00096             
00097             PipelineNodeIF* upper = GetUpperPipelineNode();
00098             if( upper ){
00099                 upper->StallThisCycle();
00100             }
00101         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

virtual void Onikiri::PipelineNodeBase::StallThisNodeAndUpperThisCycle (  )  [inline, virtual]

PipelineNodeBase.h115 行で定義されています。

参照先 GetUpperPipelineNode()m_enableLatchm_latchOnikiri::ClockedResourceBase::StallThisCycle()Onikiri::PipelineNodeIF::StallThisCycle()Onikiri::ClockedResourceBase::StallThisCycleExcludingChildren().

参照元 Onikiri::Renamer::Evaluate()Onikiri::Dispatcher::Evaluate().

00116         {
00117             PipelineNodeIF* upper = GetUpperPipelineNode();
00118             if( upper ){
00119                 upper->StallThisCycle();
00120             }
00121             if( m_enableLatch ){
00122                 m_latch.StallThisCycle();
00123             }
00124             BaseT::StallThisCycleExcludingChildren();   // gcc needs 'BaseT::'
00125         }

関数の呼び出しグラフ:

Here is the caller graph for this function:

const char* Onikiri::PipelineNodeBase::Who (  )  const [inline]

Onikiri::PhysicalResourceNodeを再定義しています。

PipelineNodeBase.h56 行で定義されています。

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

00057         {
00058             return PhysicalResourceNode::Who(); 
00059         };

関数の呼び出しグラフ:


変数

PhysicalResourceArray<Core> Onikiri::PipelineNodeBase::m_core [protected]

PipelineNodeBase.h233 行で定義されています。

参照元 GetCore()Initialize().

bool Onikiri::PipelineNodeBase::m_enableLatch [protected]

PipelineNodeBase.h228 行で定義されています。

参照元 DisableLatch()ExitUpperPipeline()Flush()Retire()StallThisNodeAndUpperThisCycle().

std::vector<Pipeline*> Onikiri::PipelineNodeBase::m_exLowerPipelines [protected]

PipelineNodeBase.h239 行で定義されています。

参照元 AddLowerPipeline()Flush()Retire().

bool Onikiri::PipelineNodeBase::m_initialized [protected]

Onikiri::PhysicalResourceNodeを再定義しています。

PipelineNodeBase.h227 行で定義されています。

参照元 Initialize()~PipelineNodeBase().

PipelineLatch Onikiri::PipelineNodeBase::m_latch [protected]

PipelineNodeBase.h231 行で定義されています。

参照元 Onikiri::Scheduler::Begin()DisableLatch()Onikiri::Renamer::Evaluate()Onikiri::Dispatcher::Evaluate()ExitUpperPipeline()Flush()PipelineNodeBase()Retire()StallThisNodeAndUpperThisCycle()Onikiri::Renamer::Update()Onikiri::Dispatcher::Update().

Pipeline Onikiri::PipelineNodeBase::m_lowerPipeline [protected]

PipelineNodeBase.h238 行で定義されています。

参照元 Flush()GetLowerPipeline()PipelineNodeBase()Retire().

PipelineNodeIF* Onikiri::PipelineNodeBase::m_lowerPipelineNode [protected]

PipelineNodeBase.h237 行で定義されています。

参照元 GetLowerPipelineNode()SetLowerPipelineNode().

PhysicalResourceArray<Thread> Onikiri::PipelineNodeBase::m_thread [protected]

PipelineNodeBase.h232 行で定義されています。

参照元 Onikiri::Retirer::GetCommitableThread()Onikiri::Fetcher::GetFetchThread()Initialize().

Pipeline* Onikiri::PipelineNodeBase::m_upperPipeline [protected]

PipelineNodeBase.h236 行で定義されています。

参照元 SetUpperPipelineNode().

PipelineNodeIF* Onikiri::PipelineNodeBase::m_upperPipelineNode [protected]

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

参照元 GetUpperPipelineNode()SetUpperPipelineNode().


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