#include <CacheMissedAccessList.h>
Onikiri::CacheMissedAccessListのコラボレーション図
CacheMissedAccessList.h の 45 行で定義されています。
CacheMissedAccessList.h の 49 行で定義されています。
CacheMissedAccessList.h の 82 行で定義されています。
typedef AccessList::iterator Onikiri::CacheMissedAccessList::AccessListIterator |
CacheMissedAccessList.h の 83 行で定義されています。
CacheMissedAccessList.h の 51 行で定義されています。
typedef boost::array<CacheAccessNotifieeIF*, MAX_NOTIFIEE_COUNT> Onikiri::CacheMissedAccessList::NotifieeArray |
CacheMissedAccessList.h の 57 行で定義されています。
CacheMissedAccessList.h の 50 行で定義されています。
CacheMissedAccessList::CacheMissedAccessList | ( | Pipeline * | pipe, | |
int | offsetBitSize | |||
) |
CacheMissedAccessList.cpp の 46 行で定義されています。
00049 : 00050 m_enabled( false ), 00051 m_currentAccessID( 0 ), 00052 m_pipe( pipe ), 00053 m_offsetBitSize( offsetBitSize ) 00054 { 00055 }
CacheMissedAccessList::~CacheMissedAccessList | ( | ) | [virtual] |
void CacheMissedAccessList::Add | ( | const Access & | access, | |
const Result & | result, | |||
CacheAccessNotifieeIF * | notifiees[], | |||
int | notifieesCount, | |||
const CacheAccessNotificationParam & | notification | |||
) |
CacheMissedAccessList.cpp の 134 行で定義されています。
参照先 Onikiri::CacheMissedAccessList::AccessState::access・AddList()・Onikiri::MemAccess::address・ASSERT・Onikiri::CacheMissedAccessList::AccessState::endTime・FindAccess()・Onikiri::TimeWheelBase::GetNow()・Onikiri::CacheMissedAccessList::AccessState::id・Onikiri::CacheAccess::IsWirte()・Onikiri::CacheAccessResult::latency・Onikiri::CacheMissedAccessList::AccessState::link・m_currentAccessID・m_enabled・m_list・m_pipe・MaskLineOffset()・Onikiri::CacheMissedAccessList::AccessState::notification・Onikiri::CacheMissedAccessList::AccessState::notifiees・Onikiri::CacheMissedAccessList::AccessState::notifieesCount・Onikiri::CacheMissedAccessList::AccessState::startTime.
参照元 Onikiri::Cache::AddToMissedAccessList().
00140 { 00141 ASSERT( !access.IsWirte(), "A write access is pushed to CacheMissedAccessList." ); 00142 00143 if( !m_enabled ){ 00144 // Notify access finish. 00145 for( int i = 0; i < notifieesCount; i++ ){ 00146 notifiees[i]->AccessFinished( access, notification ); 00147 } 00148 return; 00149 } 00150 00151 Addr addr = access.address; 00152 int latency = result.latency; 00153 s64 now = m_pipe->GetNow(); 00154 00155 CacheMissedAccessList::AccessListIterator 00156 foundAccess = FindAccess( addr ); 00157 00158 // A link of a link is forbidden. 00159 if( foundAccess != m_list.end() && !foundAccess->link ){ 00160 // Add a link to the found predecessor access. 00161 AccessState state = *foundAccess; 00162 state.notification = notification; 00163 state.notifieesCount = notifieesCount; 00164 for( int i = 0; i < notifieesCount; i++ ){ 00165 state.notifiees[i] = notifiees[i]; 00166 } 00167 state.link = true; 00168 state.id = m_currentAccessID; 00169 int latency = (int)(state.endTime - now); 00170 AddList( access, state, latency ); 00171 00172 } 00173 else{ 00174 AccessState state; 00175 state.access = access; 00176 state.id = m_currentAccessID; 00177 state.startTime = now; 00178 state.endTime = now + latency; 00179 state.link = false; 00180 state.notifieesCount = notifieesCount; 00181 for( int i = 0; i < notifieesCount; i++ ){ 00182 state.notifiees[i] = notifiees[i]; 00183 } 00184 state.notification = notification; 00185 state.access.address = MaskLineOffset( state.access.address ); 00186 AddList( access, state, latency ); 00187 } 00188 00189 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
void CacheMissedAccessList::AddList | ( | const CacheAccess & | access, | |
const AccessState & | state, | |||
int | latency | |||
) | [protected] |
CacheMissedAccessList.cpp の 113 行で定義されています。
参照先 Onikiri::TimeWheelBase::AddEvent()・Onikiri::PooledIntrusivePtrObject< T, PtrT >::Construct()・m_currentAccessID・m_list・m_pipe・MAX_MISSED_ACCESS_LIST_LIMIT・THROW_RUNTIME_ERROR.
参照元 Add().
00115 { 00116 m_currentAccessID++; 00117 m_list.push_back( state ); 00118 00119 if( m_list.size() >= MAX_MISSED_ACCESS_LIST_LIMIT ){ 00120 THROW_RUNTIME_ERROR( "The size of the missed access list exceeds a limit." ); 00121 } 00122 00123 // An event of memory access end time. 00124 AccessListIterator stateIterator = m_list.end(); 00125 stateIterator--; 00126 EventPtr evnt( 00127 MissedAccessRearchEvent::Construct( access, stateIterator, this ) 00128 ); 00129 m_pipe->AddEvent( evnt, latency ); 00130 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
CacheMissedAccessList::Result CacheMissedAccessList::Find | ( | const Addr & | addr | ) |
CacheMissedAccessList.cpp の 92 行で定義されています。
参照先 FindAccess()・Onikiri::TimeWheelBase::GetNow()・m_enabled・m_list・m_pipe・Onikiri::CacheAccessResult::ST_HIT・Onikiri::CacheAccessResult::ST_MISS・THROW_RUNTIME_ERROR.
参照元 Onikiri::Cache::ReadBody()・Onikiri::Cache::WriteBody().
00093 { 00094 if( !m_enabled ){ 00095 return Result( 0, Result::ST_MISS ); 00096 } 00097 00098 AccessListIterator e = FindAccess( addr ); 00099 if( e == m_list.end() ){ 00100 return Result( 0, Result::ST_MISS ); 00101 } 00102 00103 // hit 00104 int leftCycles = (int)e->endTime - (int)m_pipe->GetNow(); 00105 if( leftCycles < 0 ){ 00106 THROW_RUNTIME_ERROR( "Invalid Pending Access." ); 00107 } 00108 00109 return Result( leftCycles, Result::ST_HIT ); 00110 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
CacheMissedAccessList::AccessListIterator CacheMissedAccessList::FindAccess | ( | const Addr & | addr | ) | [protected] |
CacheMissedAccessList.cpp の 80 行で定義されています。
参照先 m_list・MaskLineOffset().
00081 { 00082 AccessListIterator i = m_list.begin(); 00083 Addr maskedAddr = MaskLineOffset( addr ); 00084 while( i != m_list.end() && i->access.address != maskedAddr ){ 00085 ++i; 00086 } 00087 return i; 00088 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
size_t CacheMissedAccessList::GetSize | ( | ) | const |
CacheMissedAccessList.cpp の 213 行で定義されています。
参照先 m_list.
参照元 Onikiri::Cache::IsStallRequired().
00214 { 00215 return m_list.size(); 00216 }
Here is the caller graph for this function:
CacheMissedAccessList.cpp の 67 行で定義されています。
参照先 Onikiri::Addr::address・m_offsetBitSize.
参照元 Add()・FindAccess().
00068 { 00069 addr.address &= 00070 shttl::mask( 00071 m_offsetBitSize, 00072 64 - m_offsetBitSize 00073 ); 00074 return addr; 00075 }
Here is the caller graph for this function:
void CacheMissedAccessList::Remove | ( | const CacheAccess & | access, | |
AccessListIterator | target | |||
) |
CacheMissedAccessList.cpp の 193 行で定義されています。
参照元 Onikiri::MissedAccessRearchEvent::Update().
00195 { 00196 00197 00198 ASSERT( m_enabled ); 00199 00200 // Remove from the list. 00201 CacheAccessNotificationParam notification = target->notification; 00202 NotifieeArray notifiees = target->notifiees; 00203 int notifieesCount = target->notifieesCount; 00204 m_list.erase( target ); 00205 00206 // Notify access finish. 00207 for( int i = 0; i < notifieesCount; ++i ){ 00208 notifiees[i]->AccessFinished( access, notification ); 00209 } 00210 }
Here is the caller graph for this function:
void CacheMissedAccessList::SetEnabled | ( | bool | enabled | ) |
CacheMissedAccessList.cpp の 61 行で定義されています。
参照先 m_enabled.
参照元 Onikiri::Cache::ChangeSimulationMode().
00062 { 00063 m_enabled = enabled; 00064 }
Here is the caller graph for this function:
u64 Onikiri::CacheMissedAccessList::m_currentAccessID [protected] |
bool Onikiri::CacheMissedAccessList::m_enabled [protected] |
AccessList Onikiri::CacheMissedAccessList::m_list [protected] |
CacheMissedAccessList.h の 117 行で定義されています。
int Onikiri::CacheMissedAccessList::m_offsetBitSize [protected] |
Pipeline* Onikiri::CacheMissedAccessList::m_pipe [protected] |
const size_t Onikiri::CacheMissedAccessList::MAX_MISSED_ACCESS_LIST_LIMIT = 1024 [static] |
const size_t Onikiri::CacheMissedAccessList::MAX_NOTIFIEE_COUNT = 4 [static] |
CacheMissedAccessList.h の 54 行で定義されています。