クラス Onikiri::DataPredMissRecovery

#include <DataPredTypes.h>

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

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

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

Public 型

enum  From { FROM_PRODUCER, FROM_NEXT_OF_PRODUCER, FROM_CONSUMER, FROM_END }
 FROM_CONSUMER
 FROM_END
 FROM_NEXT_OF_PRODUCER
 FROM_PRODUCER
enum  Policy {
  POLICY_REFETCH, POLICY_REISSUE_ALL, POLICY_REISSUE_SELECTIVE, POLICY_REISSUE_NOT_FINISHED,
  POLICY_REDISPATCH_ALL, POLICY_END
}
 POLICY_END
 POLICY_REDISPATCH_ALL
 POLICY_REFETCH
 POLICY_REISSUE_ALL
 POLICY_REISSUE_NOT_FINISHED
 POLICY_REISSUE_SELECTIVE
enum  Type {
  TYPE_LATENCY, TYPE_ADDRESS_MATCH, TYPE_PARTIAL_LOAD, TYPE_VALUE,
  TYPE_END
}
 TYPE_ADDRESS_MATCH
 TYPE_END
 TYPE_LATENCY
 TYPE_PARTIAL_LOAD
 TYPE_VALUE

Public メソッド

 DataPredMissRecovery (Type type=TYPE_END, Policy policy=POLICY_END, From from=FROM_END)
bool FromConsumer () const
bool FromNextOfProducer () const
bool FromProducer () const
From GetFrom () const
Policy GetPolicy () const
bool IsRedispatch () const
bool IsRefetch () const
bool IsReissueAll () const
bool IsReissueNotFinished () const
bool IsReissueSelective () const
bool IsRequiredAfterCheckpoint (const OpClass &opClass) const
bool IsRequiredBeforeCheckpoint (const OpClass &opClass) const
void Validate ()

Protected 変数

From m_from
Policy m_policy
Type m_type

説明

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


列挙型

enum Onikiri::DataPredMissRecovery::From

列挙型の値:
FROM_PRODUCER 
FROM_NEXT_OF_PRODUCER 
FROM_CONSUMER 
FROM_END 

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

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         };

enum Onikiri::DataPredMissRecovery::Policy

列挙型の値:
POLICY_REFETCH 
POLICY_REISSUE_ALL 
POLICY_REISSUE_SELECTIVE 
POLICY_REISSUE_NOT_FINISHED 
POLICY_REDISPATCH_ALL 
POLICY_END 

DataPredTypes.h74 行で定義されています。

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         };

enum Onikiri::DataPredMissRecovery::Type

列挙型の値:
TYPE_LATENCY 
TYPE_ADDRESS_MATCH 
TYPE_PARTIAL_LOAD 
TYPE_VALUE 
TYPE_END 

DataPredTypes.h52 行で定義されています。

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]

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

00146                                                                                                        : 
00147             m_type  ( type ),
00148             m_policy( policy ), 
00149             m_from  ( from   )
00150         {}


関数

bool Onikiri::DataPredMissRecovery::FromConsumer (  )  const [inline]

DataPredTypes.h163 行で定義されています。

参照先 FROM_CONSUMERm_from.

00163 {   return m_from == FROM_CONSUMER;         }

bool Onikiri::DataPredMissRecovery::FromNextOfProducer (  )  const [inline]

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

参照先 FROM_NEXT_OF_PRODUCERm_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.h161 行で定義されています。

参照先 FROM_PRODUCERm_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.h153 行で定義されています。

参照先 m_from.

参照元 Onikiri::Recoverer::RecoverDataPredMiss().

00153 { return m_from;        }

Here is the caller graph for this function:

Policy Onikiri::DataPredMissRecovery::GetPolicy (  )  const [inline]

DataPredTypes.h152 行で定義されています。

参照先 m_policy.

参照元 Onikiri::Recoverer::RecoverDataPredMiss().

00152 { return m_policy;  }

Here is the caller graph for this function:

bool Onikiri::DataPredMissRecovery::IsRedispatch (  )  const [inline]

DataPredTypes.h158 行で定義されています。

参照先 m_policyPOLICY_REDISPATCH_ALL.

00158 {   return m_policy == POLICY_REDISPATCH_ALL;   }

bool Onikiri::DataPredMissRecovery::IsRefetch (  )  const [inline]

DataPredTypes.h155 行で定義されています。

参照先 m_policyPOLICY_REFETCH.

00155 {   return m_policy == POLICY_REFETCH;          }

bool Onikiri::DataPredMissRecovery::IsReissueAll (  )  const [inline]

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

参照先 m_policyPOLICY_REISSUE_ALL.

00156 {   return m_policy == POLICY_REISSUE_ALL;      }

bool Onikiri::DataPredMissRecovery::IsReissueNotFinished (  )  const [inline]

DataPredTypes.h159 行で定義されています。

参照先 m_policyPOLICY_REISSUE_NOT_FINISHED.

bool Onikiri::DataPredMissRecovery::IsReissueSelective (  )  const [inline]

DataPredTypes.h157 行で定義されています。

参照先 m_policyPOLICY_REISSUE_SELECTIVE.

00157 {   return m_policy == POLICY_REISSUE_SELECTIVE;}

bool DataPredMissRecovery::IsRequiredAfterCheckpoint ( const OpClass opClass  )  const

DataPredTypes.cpp119 行で定義されています。

参照先 ASSERTFROM_NEXT_OF_PRODUCEROnikiri::OpClass::IsLoad()Onikiri::OpClass::IsStore()m_fromm_policym_typePOLICY_REFETCHTYPE_ADDRESS_MATCHTYPE_LATENCYTYPE_PARTIAL_LOADTYPE_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.cpp66 行で定義されています。

参照先 ASSERTFROM_CONSUMERFROM_PRODUCEROnikiri::OpClass::IsLoad()Onikiri::OpClass::IsStore()m_fromm_policym_typePOLICY_REFETCHTYPE_ADDRESS_MATCHTYPE_LATENCYTYPE_PARTIAL_LOADTYPE_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.cpp39 行で定義されています。

参照先 FROM_ENDFROM_NEXT_OF_PRODUCERm_fromm_policyPOLICY_ENDPOLICY_REDISPATCH_ALLPOLICY_REISSUE_SELECTIVETHROW_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]

DataPredTypes.h177 行で定義されています。

参照元 FromConsumer()FromNextOfProducer()FromProducer()GetFrom()IsRequiredAfterCheckpoint()IsRequiredBeforeCheckpoint()Validate().

Policy Onikiri::DataPredMissRecovery::m_policy [protected]

DataPredTypes.h176 行で定義されています。

参照元 GetPolicy()IsRedispatch()IsRefetch()IsReissueAll()IsReissueNotFinished()IsReissueSelective()IsRequiredAfterCheckpoint()IsRequiredBeforeCheckpoint()Validate().

Type Onikiri::DataPredMissRecovery::m_type [protected]

DataPredTypes.h175 行で定義されています。

参照元 IsRequiredAfterCheckpoint()IsRequiredBeforeCheckpoint().


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