クラス Onikiri::ConservativeMemDepPred

#include <ConservativeMemDepPred.h>

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

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

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

Public メソッド

virtual void Allocate (OpIterator op)
virtual bool CanAllocate (OpIterator *infoArray, int numOp)
virtual void Commit (OpIterator op)
 ConservativeMemDepPred ()
virtual void Flush (OpIterator op)
virtual void Initialize (InitPhase phase)
virtual void OrderConflicted (OpIterator producer, OpIterator consumer)
virtual void Resolve (OpIterator op)
virtual ~ConservativeMemDepPred ()

説明

ConservativeMemDepPred.h45 行で定義されています。


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

ConservativeMemDepPred::ConservativeMemDepPred (  ) 

ConservativeMemDepPred.cpp43 行で定義されています。

00043                                                :
00044     m_core(0),
00045     m_checkpointMaster(0),
00046     m_latestStoreDst(),
00047     m_latestMemDst()
00048 {
00049 }

ConservativeMemDepPred::~ConservativeMemDepPred (  )  [virtual]

ConservativeMemDepPred.cpp51 行で定義されています。

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

00052 {
00053     ReleaseParam();
00054 }

関数の呼び出しグラフ:


関数

void ConservativeMemDepPred::Allocate ( OpIterator  op  )  [virtual]

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

ConservativeMemDepPred.cpp117 行で定義されています。

参照先 Onikiri::Core::GetNumScheduler().

00118 {
00119     // memoryI
00120     if( !op->GetOpClass().IsMem() ) {
00121         return;
00122     }
00123 
00124     // op  dstMemMemDependency
00125     if( op->GetDstMem(0) == NULL ) {
00126         MemDependencyPtr tmpMem(
00127             m_memDepPool.construct(m_core->GetNumScheduler()) );
00128         tmpMem->Clear();
00129         op->SetDstMem(0, tmpMem);
00130     }
00131 
00132     *m_latestMemDst = op->GetDstMem(0);
00133     if (op->GetOpClass().IsStore()) {
00134         *m_latestStoreDst = op->GetDstMem(0);
00135     }
00136 }

関数の呼び出しグラフ:

bool ConservativeMemDepPred::CanAllocate ( OpIterator infoArray,
int  numOp 
) [virtual]

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

ConservativeMemDepPred.cpp177 行で定義されています。

00178 {
00179     return true;
00180 }

void ConservativeMemDepPred::Commit ( OpIterator  op  )  [virtual]

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

ConservativeMemDepPred.cpp151 行で定義されています。

00152 {
00153     if( op->GetOpClass().IsMem() ) {
00154         Deallocate(op);
00155     }
00156 }

void ConservativeMemDepPred::Flush ( OpIterator  op  )  [virtual]

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

ConservativeMemDepPred.cpp158 行で定義されています。

参照先 Onikiri::OpStatus::OS_FETCH.

00159 {
00160     if( op->GetStatus() == OpStatus::OS_FETCH ){
00161         return;
00162     }
00163     if( op->GetOpClass().IsMem() ) {
00164         Deallocate(op);
00165     }
00166 }

void ConservativeMemDepPred::Initialize ( InitPhase  phase  )  [virtual]

ConservativeMemDepPred.cpp56 行で定義されています。

参照先 Onikiri::PhysicalResourceNode::CheckNodeInitialized()Onikiri::Core::GetNumScheduler()Onikiri::PhysicalResourceNode::INIT_POST_CONNECTIONOnikiri::CheckpointMaster::SLOT_RENAME.

00057 {
00058     if(phase == INIT_POST_CONNECTION){
00059         // checkpointMaster Zbg`FbN
00060         CheckNodeInitialized( "checkpointMaster", m_checkpointMaster );
00061 
00062         m_latestStoreDst.Initialize(
00063             m_checkpointMaster,
00064             CheckpointMaster::SLOT_RENAME
00065         );
00066         m_latestMemDst.Initialize(
00067             m_checkpointMaster,
00068             CheckpointMaster::SLOT_RENAME
00069         );
00070         
00071         MemDependencyPtr
00072             tmpStoreDst( 
00073                 m_memDepPool.construct( m_core->GetNumScheduler() )
00074             );
00075         tmpStoreDst->Set();
00076         m_latestStoreDst.GetCurrent() = tmpStoreDst;
00077 
00078         MemDependencyPtr
00079             tmpMemDst(
00080                 m_memDepPool.construct( m_core->GetNumScheduler() )
00081             );
00082         tmpMemDst->Set();
00083         m_latestMemDst.GetCurrent() = tmpMemDst;
00084     }
00085 }

関数の呼び出しグラフ:

void ConservativeMemDepPred::OrderConflicted ( OpIterator  producer,
OpIterator  consumer 
) [virtual]

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

ConservativeMemDepPred.cpp170 行で定義されています。

参照先 THROW_RUNTIME_ERROR.

00171 {
00172     THROW_RUNTIME_ERROR("Access order violation must not occur with Conservative MemDepPred");
00173 }

void ConservativeMemDepPred::Resolve ( OpIterator  op  )  [virtual]

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

ConservativeMemDepPred.cpp90 行で定義されています。

参照先 THROW_RUNTIME_ERROR.

00091 {
00092     // memoryI
00093     if( !op->GetOpClass().IsMem() ) {
00094         return;
00095     }
00096 
00097     if( op->GetOpClass().IsLoad() ) {
00098         if( m_latestStoreDst.GetCurrent() == NULL ) {
00099             return;
00100         }
00101 
00102         op->SetSrcMem(0, m_latestStoreDst.GetCurrent());
00103     
00104     }else if( op->GetOpClass().IsStore() ) {
00105         if( m_latestMemDst.GetCurrent() == NULL ) {
00106             return;
00107         }
00108 
00109         op->SetSrcMem(0, m_latestMemDst.GetCurrent());
00110 
00111     }else {
00112         THROW_RUNTIME_ERROR("Unknown Memory Instruction");
00113     }
00114 }


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