#include <ConservativeMemDepPred.h>
Onikiri::ConservativeMemDepPredに対する継承グラフ
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.h の 45 行で定義されています。
ConservativeMemDepPred::ConservativeMemDepPred | ( | ) |
ConservativeMemDepPred.cpp の 43 行で定義されています。
00043 : 00044 m_core(0), 00045 m_checkpointMaster(0), 00046 m_latestStoreDst(), 00047 m_latestMemDst() 00048 { 00049 }
ConservativeMemDepPred::~ConservativeMemDepPred | ( | ) | [virtual] |
ConservativeMemDepPred.cpp の 51 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::ReleaseParam().
00052 { 00053 ReleaseParam(); 00054 }
関数の呼び出しグラフ:
void ConservativeMemDepPred::Allocate | ( | OpIterator | op | ) | [virtual] |
Onikiri::MemDepPredIFを実装しています。
ConservativeMemDepPred.cpp の 117 行で定義されています。
参照先 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] |
void ConservativeMemDepPred::Commit | ( | OpIterator | op | ) | [virtual] |
void ConservativeMemDepPred::Flush | ( | OpIterator | op | ) | [virtual] |
Onikiri::MemDepPredIFを実装しています。
ConservativeMemDepPred.cpp の 158 行で定義されています。
参照先 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.cpp の 56 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::CheckNodeInitialized()・Onikiri::Core::GetNumScheduler()・Onikiri::PhysicalResourceNode::INIT_POST_CONNECTION・Onikiri::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.cpp の 170 行で定義されています。
参照先 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.cpp の 90 行で定義されています。
参照先 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 }