#include <DataPredTypes.h>
Onikiri::DataPredMissRecoveryに対する継承グラフ
DataPredTypes.h の 45 行で定義されています。
DataPredTypes.h の 105 行で定義されています。
00106 { 00107 // Recovered from a producer( an instruction that did prediction ). 00108 // This means that an instruction that did prediction itself is recovered. 00109 FROM_PRODUCER, 00110 00111 // Recovered from a next instruction of a producer. 00112 FROM_NEXT_OF_PRODUCER, 00113 00114 // Recovered from a first consumer instruction of a producer. 00115 FROM_CONSUMER, 00116 00117 // End sentinel 00118 FROM_END 00119 };
POLICY_REFETCH | |
POLICY_REISSUE_ALL | |
POLICY_REISSUE_SELECTIVE | |
POLICY_REISSUE_NOT_FINISHED | |
POLICY_REDISPATCH_ALL | |
POLICY_END |
DataPredTypes.h の 74 行で定義されています。
00075 { 00076 // Re-fetch 00077 POLICY_REFETCH, 00078 00079 // Invalidate ready signals of ALL successor instructions 00080 // and re-issue these from a issue queue. 00081 // This policy requires that a scheduler must 00082 // hold instructions after instruction issue. 00083 POLICY_REISSUE_ALL, 00084 00085 // Invalidate ONLY ready signals of dependent successor instructions 00086 // and re-issue these from a issue queue. 00087 // This policy requires that a scheduler must 00088 // hold instructions after instruction issue. 00089 POLICY_REISSUE_SELECTIVE, 00090 00091 // Invalidate ready signals of ALL Unfinished instructions 00092 // and re-issue these from a issue queue. 00093 // This policy requires that a scheduler 00094 // hold instructions before instruction finish. 00095 POLICY_REISSUE_NOT_FINISHED, 00096 00097 // Re-dispatch ALL successor instructions from a re-dispatch buffer. 00098 POLICY_REDISPATCH_ALL, 00099 00100 // End sentinel 00101 POLICY_END 00102 };
DataPredTypes.h の 52 行で定義されています。
00053 { 00054 TYPE_LATENCY, // Latency prediction 00055 00056 TYPE_ADDRESS_MATCH, // Address match/unmatch prediction 00057 00058 TYPE_PARTIAL_LOAD, // Partial load 00059 // This type is not exactly data prediction, 00060 // but this is defined here. 00061 // This type defines a recovery method on partial load, 00062 // which read data that is written by its predecessor. 00063 00064 TYPE_VALUE, // Value prediction 00065 // Value prediction is not implemented yet and this 00066 // is for user extension. 00067 00068 TYPE_END // End sentinel 00069 };
Onikiri::DataPredMissRecovery::DataPredMissRecovery | ( | Type | type = TYPE_END , |
|
Policy | policy = POLICY_END , |
|||
From | from = FROM_END | |||
) | [inline] |
bool Onikiri::DataPredMissRecovery::FromConsumer | ( | ) | const [inline] |
DataPredTypes.h の 163 行で定義されています。
参照先 FROM_CONSUMER・m_from.
00163 { return m_from == FROM_CONSUMER; }
bool Onikiri::DataPredMissRecovery::FromNextOfProducer | ( | ) | const [inline] |
DataPredTypes.h の 162 行で定義されています。
参照先 FROM_NEXT_OF_PRODUCER・m_from.
参照元 Onikiri::Recoverer::Initialize().
00162 { return m_from == FROM_NEXT_OF_PRODUCER; }
Here is the caller graph for this function:
bool Onikiri::DataPredMissRecovery::FromProducer | ( | ) | const [inline] |
DataPredTypes.h の 161 行で定義されています。
参照先 FROM_PRODUCER・m_from.
参照元 Onikiri::Recoverer::Initialize().
00161 { return m_from == FROM_PRODUCER; }
Here is the caller graph for this function:
From Onikiri::DataPredMissRecovery::GetFrom | ( | ) | const [inline] |
DataPredTypes.h の 153 行で定義されています。
参照先 m_from.
参照元 Onikiri::Recoverer::RecoverDataPredMiss().
00153 { return m_from; }
Here is the caller graph for this function:
Policy Onikiri::DataPredMissRecovery::GetPolicy | ( | ) | const [inline] |
DataPredTypes.h の 152 行で定義されています。
参照先 m_policy.
参照元 Onikiri::Recoverer::RecoverDataPredMiss().
00152 { return m_policy; }
Here is the caller graph for this function:
bool Onikiri::DataPredMissRecovery::IsRedispatch | ( | ) | const [inline] |
DataPredTypes.h の 158 行で定義されています。
参照先 m_policy・POLICY_REDISPATCH_ALL.
00158 { return m_policy == POLICY_REDISPATCH_ALL; }
bool Onikiri::DataPredMissRecovery::IsRefetch | ( | ) | const [inline] |
DataPredTypes.h の 155 行で定義されています。
参照先 m_policy・POLICY_REFETCH.
00155 { return m_policy == POLICY_REFETCH; }
bool Onikiri::DataPredMissRecovery::IsReissueAll | ( | ) | const [inline] |
DataPredTypes.h の 156 行で定義されています。
参照先 m_policy・POLICY_REISSUE_ALL.
00156 { return m_policy == POLICY_REISSUE_ALL; }
bool Onikiri::DataPredMissRecovery::IsReissueNotFinished | ( | ) | const [inline] |
DataPredTypes.h の 159 行で定義されています。
参照先 m_policy・POLICY_REISSUE_NOT_FINISHED.
00159 { return m_policy == POLICY_REISSUE_NOT_FINISHED; }
bool Onikiri::DataPredMissRecovery::IsReissueSelective | ( | ) | const [inline] |
DataPredTypes.h の 157 行で定義されています。
参照先 m_policy・POLICY_REISSUE_SELECTIVE.
00157 { return m_policy == POLICY_REISSUE_SELECTIVE;}
bool DataPredMissRecovery::IsRequiredAfterCheckpoint | ( | const OpClass & | opClass | ) | const |
DataPredTypes.cpp の 119 行で定義されています。
参照先 ASSERT・FROM_NEXT_OF_PRODUCER・Onikiri::OpClass::IsLoad()・Onikiri::OpClass::IsStore()・m_from・m_policy・m_type・POLICY_REFETCH・TYPE_ADDRESS_MATCH・TYPE_LATENCY・TYPE_PARTIAL_LOAD・TYPE_VALUE.
参照元 Onikiri::Core::IsRequiredCheckpointAfter().
00120 { 00121 if( m_policy != POLICY_REFETCH ){ 00122 // An only re-fetch policy requires check-pointing. 00123 return false; 00124 } 00125 00126 switch( m_type ){ 00127 case TYPE_LATENCY: 00128 // Producer : load 00129 if( opClass.IsLoad() && m_from == FROM_NEXT_OF_PRODUCER ){ 00130 return true; 00131 } 00132 break; 00133 00134 case TYPE_ADDRESS_MATCH: 00135 case TYPE_PARTIAL_LOAD: 00136 // Producer : store 00137 if( opClass.IsStore() && m_from == FROM_NEXT_OF_PRODUCER ){ 00138 return true; 00139 } 00140 break; 00141 00142 case TYPE_VALUE: 00143 // Not implemented... 00144 /* 00145 // Producer : any 00146 if( m_from == FROM_NEXT_OF_PRODUCER ){ 00147 return true; 00148 } 00149 // Consumer : any 00150 if( m_from == FROM_NEXT_OF_PRODUCER ){ 00151 return true; 00152 } 00153 */ 00154 break; 00155 00156 default: 00157 ASSERT( false, "An unknown recovery type." ); 00158 break; 00159 } 00160 00161 return false; 00162 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
bool DataPredMissRecovery::IsRequiredBeforeCheckpoint | ( | const OpClass & | opClass | ) | const |
DataPredTypes.cpp の 66 行で定義されています。
参照先 ASSERT・FROM_CONSUMER・FROM_PRODUCER・Onikiri::OpClass::IsLoad()・Onikiri::OpClass::IsStore()・m_from・m_policy・m_type・POLICY_REFETCH・TYPE_ADDRESS_MATCH・TYPE_LATENCY・TYPE_PARTIAL_LOAD・TYPE_VALUE.
参照元 Onikiri::Core::IsRequiredCheckpointBefore().
00067 { 00068 if( m_policy != POLICY_REFETCH ){ 00069 // An only re-fetch policy requires check-pointing. 00070 return false; 00071 } 00072 00073 switch( m_type ){ 00074 case TYPE_LATENCY: 00075 // Producer : load 00076 if( opClass.IsLoad() && m_from == FROM_PRODUCER ){ 00077 return true; 00078 } 00079 // Consumer : any 00080 if( m_from == FROM_CONSUMER ){ 00081 return true; 00082 } 00083 break; 00084 00085 case TYPE_ADDRESS_MATCH: 00086 case TYPE_PARTIAL_LOAD: 00087 // Producer : store 00088 if( opClass.IsStore() && m_from == FROM_PRODUCER ){ 00089 return true; 00090 } 00091 // Consumer : load 00092 if( opClass.IsLoad() && m_from == FROM_CONSUMER ){ 00093 return true; 00094 } 00095 break; 00096 00097 case TYPE_VALUE: 00098 // Not implemented... 00099 /* 00100 // Producer : any 00101 if( m_from == FROM_PRODUCER ){ 00102 return true; 00103 } 00104 // Consumer : any 00105 if( m_from == FROM_CONSUMER ){ 00106 return true; 00107 } 00108 */ 00109 break; 00110 00111 default: 00112 ASSERT( false, "An unknown recovery type." ); 00113 break; 00114 } 00115 00116 return false; 00117 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void DataPredMissRecovery::Validate | ( | ) |
DataPredTypes.cpp の 39 行で定義されています。
参照先 FROM_END・FROM_NEXT_OF_PRODUCER・m_from・m_policy・POLICY_END・POLICY_REDISPATCH_ALL・POLICY_REISSUE_SELECTIVE・THROW_RUNTIME_ERROR.
参照元 Onikiri::Core::Initialize().
00040 { 00041 if( m_policy == POLICY_END || m_from == FROM_END ){ 00042 THROW_RUNTIME_ERROR( "A policy or a recovery point is not set." ); 00043 } 00044 00045 if( m_policy == POLICY_REDISPATCH_ALL ){ 00046 THROW_RUNTIME_ERROR( "A recovery policy 'Redispatch' is not implemented." ); 00047 } 00048 00049 if( m_policy == POLICY_REISSUE_SELECTIVE && m_from == FROM_NEXT_OF_PRODUCER ){ 00050 THROW_RUNTIME_ERROR( "Cannot reschedule ops based on a recovery policy 'ReissueSelective' from a 'NextOfProducer' op." ); 00051 } 00052 00053 /* if( m_policy == POLICY_REFETCH && m_from != FROM_NEXT_OF_PRODUCER ){ 00054 THROW_RUNTIME_ERROR( "A recovery policy 'Refetch' From' Consumer' or 'Producer' is not implemented." ); 00055 }*/ 00056 }
Here is the caller graph for this function:
From Onikiri::DataPredMissRecovery::m_from [protected] |
Policy Onikiri::DataPredMissRecovery::m_policy [protected] |
Type Onikiri::DataPredMissRecovery::m_type [protected] |