gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Public Types | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
ROB< Impl > Class Template Reference

ROB class. More...

#include <rob.hh>

Public Types

enum  Status { Running, Idle, ROBSquashing }
 Possible ROB statuses. More...
 
typedef Impl::O3CPU O3CPU
 
typedef Impl::DynInstPtr DynInstPtr
 
typedef std::pair< RegIndex, PhysRegIndexUnmapInfo
 
typedef std::list< DynInstPtr >::iterator InstIt
 

Public Member Functions

 ROB (O3CPU *_cpu, DerivO3CPUParams *params)
 ROB constructor. More...
 
std::string name () const
 
void setActiveThreads (std::list< ThreadID > *at_ptr)
 Sets pointer to the list of active threads. More...
 
void drainSanityCheck () const
 Perform sanity checks after a drain. More...
 
void takeOverFrom ()
 Takes over another CPU's thread. More...
 
void insertInst (const DynInstPtr &inst)
 Function to insert an instruction into the ROB. More...
 
const DynInstPtrreadHeadInst (ThreadID tid)
 Returns pointer to the head instruction within the ROB. More...
 
DynInstPtr findInst (ThreadID tid, InstSeqNum squash_inst)
 Returns a pointer to the instruction with the given sequence if it is in the ROB. More...
 
DynInstPtr readTailInst (ThreadID tid)
 Returns pointer to the tail instruction within the ROB. More...
 
void retireHead (ThreadID tid)
 Retires the head instruction, removing it from the ROB. More...
 
bool isHeadReady (ThreadID tid)
 Is the oldest instruction across all threads ready. More...
 
bool canCommit ()
 Is there any commitable head instruction across all threads ready. More...
 
void resetEntries ()
 Re-adjust ROB partitioning. More...
 
int entryAmount (ThreadID num_threads)
 Number of entries needed For 'num_threads' amount of threads. More...
 
unsigned numFreeEntries ()
 Returns the number of total free entries in the ROB. More...
 
unsigned numFreeEntries (ThreadID tid)
 Returns the number of free entries in a specific ROB paritition. More...
 
unsigned getMaxEntries (ThreadID tid)
 Returns the maximum number of entries for a specific thread. More...
 
unsigned getThreadEntries (ThreadID tid)
 Returns the number of entries being used by a specific thread. More...
 
bool isFull ()
 Returns if the ROB is full. More...
 
bool isFull (ThreadID tid)
 Returns if a specific thread's partition is full. More...
 
bool isEmpty () const
 Returns if the ROB is empty. More...
 
bool isEmpty (ThreadID tid) const
 Returns if a specific thread's partition is empty. More...
 
void doSquash (ThreadID tid)
 Executes the squash, marking squashed instructions. More...
 
void squash (InstSeqNum squash_num, ThreadID tid)
 Squashes all instructions younger than the given sequence number for the specific thread. More...
 
void updateHead ()
 Updates the head instruction with the new oldest instruction. More...
 
void updateTail ()
 Updates the tail instruction with the new youngest instruction. More...
 
bool isDoneSquashing (ThreadID tid) const
 Reads the PC of the oldest head instruction. More...
 
bool isDoneSquashing ()
 Checks if the ROB is still in the process of squashing instructions for any thread. More...
 
int countInsts ()
 This is more of a debugging function than anything. More...
 
size_t countInsts (ThreadID tid)
 This is more of a debugging function than anything. More...
 
void regStats ()
 Registers statistics. More...
 

Public Attributes

InstIt tail
 Iterator pointing to the instruction which is the last instruction in the ROB. More...
 
InstIt head
 Iterator pointing to the instruction which is the first instruction in in the ROB. More...
 
int numInstsInROB
 Number of instructions in the ROB. More...
 
DynInstPtr dummyInst
 Dummy instruction returned if there are no insts left. More...
 

Private Member Functions

void resetState ()
 Reset the ROB state. More...
 

Private Attributes

Status robStatus [Impl::MaxThreads]
 Per-thread ROB status. More...
 
SMTQueuePolicy robPolicy
 ROB resource sharing policy for SMT mode. More...
 
O3CPUcpu
 Pointer to the CPU. More...
 
std::list< ThreadID > * activeThreads
 Active Threads in CPU. More...
 
unsigned numEntries
 Number of instructions in the ROB. More...
 
unsigned threadEntries [Impl::MaxThreads]
 Entries Per Thread. More...
 
unsigned maxEntries [Impl::MaxThreads]
 Max Insts a Thread Can Have in the ROB. More...
 
std::list< DynInstPtrinstList [Impl::MaxThreads]
 ROB List of Instructions. More...
 
unsigned squashWidth
 Number of instructions that can be squashed in a single cycle. More...
 
InstIt squashIt [Impl::MaxThreads]
 Iterator used for walking through the list of instructions when squashing. More...
 
InstSeqNum squashedSeqNum [Impl::MaxThreads]
 The sequence number of the squashed instruction. More...
 
bool doneSquashing [Impl::MaxThreads]
 Is the ROB done squashing. More...
 
ThreadID numThreads
 Number of active threads. More...
 
Stats::Scalar robReads
 
Stats::Scalar robWrites
 

Detailed Description

template<class Impl>
class ROB< Impl >

ROB class.

The ROB is largely what drives squashing.

Definition at line 62 of file rob.hh.

Member Typedef Documentation

◆ DynInstPtr

template<class Impl >
typedef Impl::DynInstPtr ROB< Impl >::DynInstPtr

Definition at line 67 of file rob.hh.

◆ InstIt

template<class Impl >
typedef std::list<DynInstPtr>::iterator ROB< Impl >::InstIt

Definition at line 70 of file rob.hh.

◆ O3CPU

template<class Impl >
typedef Impl::O3CPU ROB< Impl >::O3CPU

Definition at line 66 of file rob.hh.

◆ UnmapInfo

template<class Impl >
typedef std::pair<RegIndex, PhysRegIndex> ROB< Impl >::UnmapInfo

Definition at line 69 of file rob.hh.

Member Enumeration Documentation

◆ Status

template<class Impl >
enum ROB::Status

Possible ROB statuses.

Enumerator
Running 
Idle 
ROBSquashing 

Definition at line 73 of file rob.hh.

Constructor & Destructor Documentation

◆ ROB()

template<class Impl >
ROB< Impl >::ROB ( O3CPU _cpu,
DerivO3CPUParams *  params 
)

ROB constructor.

Parameters
_cpuThe cpu object pointer.
paramsThe cpu params including several ROB-specific parameters.

Definition at line 58 of file rob_impl.hh.

References DPRINTF, ROB< Impl >::maxEntries, ROB< Impl >::numEntries, ROB< Impl >::numThreads, ROB< Impl >::resetState(), and ROB< Impl >::robPolicy.

Member Function Documentation

◆ canCommit()

template<class Impl >
bool ROB< Impl >::canCommit ( )

Is there any commitable head instruction across all threads ready.

Definition at line 290 of file rob_impl.hh.

References ROB< Impl >::activeThreads, and ROB< Impl >::isHeadReady().

◆ countInsts() [1/2]

template<class Impl >
int ROB< Impl >::countInsts ( )

This is more of a debugging function than anything.

Use numInstsInROB to get the instructions in the ROB unless you are double checking that variable.

Definition at line 187 of file rob_impl.hh.

References ROB< Impl >::numThreads, and Stats::total.

Referenced by ROB< Impl >::isDoneSquashing(), and DefaultCommit< Impl >::tick().

◆ countInsts() [2/2]

template<class Impl >
size_t ROB< Impl >::countInsts ( ThreadID  tid)

This is more of a debugging function than anything.

Use threadEntries to get the instructions in the ROB unless you are double checking that variable.

Definition at line 199 of file rob_impl.hh.

References ROB< Impl >::instList.

◆ doSquash()

template<class Impl >
void ROB< Impl >::doSquash ( ThreadID  tid)

◆ drainSanityCheck()

template<class Impl >
void ROB< Impl >::drainSanityCheck ( ) const

Perform sanity checks after a drain.

Definition at line 137 of file rob_impl.hh.

References ROB< Impl >::instList, ROB< Impl >::isEmpty(), and ROB< Impl >::numThreads.

Referenced by DefaultCommit< Impl >::drainSanityCheck().

◆ entryAmount()

template<class Impl >
int ROB< Impl >::entryAmount ( ThreadID  num_threads)

Number of entries needed For 'num_threads' amount of threads.

Definition at line 176 of file rob_impl.hh.

References ROB< Impl >::numEntries, and ROB< Impl >::robPolicy.

◆ findInst()

template<class Impl >
Impl::DynInstPtr ROB< Impl >::findInst ( ThreadID  tid,
InstSeqNum  squash_inst 
)

Returns a pointer to the instruction with the given sequence if it is in the ROB.

Definition at line 549 of file rob_impl.hh.

References ROB< Impl >::instList.

Referenced by DefaultCommit< Impl >::commit().

◆ getMaxEntries()

template<class Impl >
unsigned ROB< Impl >::getMaxEntries ( ThreadID  tid)
inline

Returns the maximum number of entries for a specific thread.

Definition at line 172 of file rob.hh.

References ROB< Impl >::maxEntries.

Referenced by DefaultCommit< Impl >::getInsts().

◆ getThreadEntries()

template<class Impl >
unsigned ROB< Impl >::getThreadEntries ( ThreadID  tid)
inline

Returns the number of entries being used by a specific thread.

Definition at line 176 of file rob.hh.

References ROB< Impl >::threadEntries.

Referenced by DefaultCommit< Impl >::getInsts().

◆ insertInst()

template<class Impl >
void ROB< Impl >::insertInst ( const DynInstPtr inst)

Function to insert an instruction into the ROB.

Note that whatever calls this function must ensure that there is enough space within the ROB for the new instruction.

Parameters
instThe instruction being inserted into the ROB.

Definition at line 206 of file rob_impl.hh.

References DPRINTF, ROB< Impl >::head, ROB< Impl >::instList, ROB< Impl >::numEntries, ROB< Impl >::numInstsInROB, ROB< Impl >::robWrites, ROB< Impl >::tail, and ROB< Impl >::threadEntries.

Referenced by DefaultCommit< Impl >::getInsts().

◆ isDoneSquashing() [1/2]

template<class Impl >
bool ROB< Impl >::isDoneSquashing ( ThreadID  tid) const
inline

Reads the PC of the oldest head instruction.

Reads the PC of the head instruction of a specific thread. Reads the next PC of the oldest head instruction. Reads the next PC of the head instruction of a specific thread. Reads the sequence number of the oldest head instruction. Reads the sequence number of the head instruction of a specific thread.Reads the PC of the youngest tail instruction. Reads the PC of the tail instruction of a specific thread. Reads the sequence number of the youngest tail instruction. Reads the sequence number of tail instruction of a specific thread. Checks if the ROB is still in the process of squashing instructions.

Return values
Whetheror not the ROB is done squashing.

Definition at line 243 of file rob.hh.

References ROB< Impl >::countInsts(), ROB< Impl >::doneSquashing, ROB< Impl >::isDoneSquashing(), ROB< Impl >::regStats(), and ROB< Impl >::resetState().

Referenced by DefaultCommit< Impl >::tick().

◆ isDoneSquashing() [2/2]

template<class Impl >
bool ROB< Impl >::isDoneSquashing ( )

Checks if the ROB is still in the process of squashing instructions for any thread.

Referenced by ROB< Impl >::isDoneSquashing().

◆ isEmpty() [1/2]

template<class Impl >
bool ROB< Impl >::isEmpty ( ) const
inline

◆ isEmpty() [2/2]

template<class Impl >
bool ROB< Impl >::isEmpty ( ThreadID  tid) const
inline

Returns if a specific thread's partition is empty.

Definition at line 192 of file rob.hh.

References ROB< Impl >::doSquash(), ROB< Impl >::squash(), ROB< Impl >::threadEntries, ROB< Impl >::updateHead(), and ROB< Impl >::updateTail().

◆ isFull() [1/2]

template<class Impl >
bool ROB< Impl >::isFull ( )
inline

Returns if the ROB is full.

Definition at line 180 of file rob.hh.

References ROB< Impl >::numEntries, and ROB< Impl >::numInstsInROB.

◆ isFull() [2/2]

template<class Impl >
bool ROB< Impl >::isFull ( ThreadID  tid)
inline

Returns if a specific thread's partition is full.

Definition at line 184 of file rob.hh.

References ROB< Impl >::numEntries, and ROB< Impl >::threadEntries.

◆ isHeadReady()

template<class Impl >
bool ROB< Impl >::isHeadReady ( ThreadID  tid)

Is the oldest instruction across all threads ready.

Is the oldest instruction across a particular thread ready.

Definition at line 278 of file rob_impl.hh.

References ROB< Impl >::instList, ROB< Impl >::robReads, and ROB< Impl >::threadEntries.

Referenced by ROB< Impl >::canCommit(), DefaultCommit< Impl >::commitInsts(), DefaultCommit< Impl >::oldestReady(), and DefaultCommit< Impl >::roundRobin().

◆ name()

template<class Impl >
std::string ROB< Impl >::name ( ) const

Definition at line 122 of file rob_impl.hh.

References ROB< Impl >::cpu.

Referenced by ROB< Impl >::regStats().

◆ numFreeEntries() [1/2]

template<class Impl >
unsigned ROB< Impl >::numFreeEntries ( )

◆ numFreeEntries() [2/2]

template<class Impl >
unsigned ROB< Impl >::numFreeEntries ( ThreadID  tid)

Returns the number of free entries in a specific ROB paritition.

Definition at line 316 of file rob_impl.hh.

References ROB< Impl >::maxEntries, and ROB< Impl >::threadEntries.

◆ readHeadInst()

template<class Impl >
const Impl::DynInstPtr & ROB< Impl >::readHeadInst ( ThreadID  tid)

Returns pointer to the head instruction within the ROB.

There is no guarantee as to the return value if the ROB is empty.

Return values
Pointerto the DynInst that is at the head of the ROB.Returns a pointer to the head instruction of a specific thread within the ROB.
Returns
Pointer to the DynInst that is at the head of the ROB.

Definition at line 510 of file rob_impl.hh.

References ROB< Impl >::dummyInst, ROB< Impl >::instList, and ROB< Impl >::threadEntries.

Referenced by DefaultCommit< Impl >::commitInsts(), DefaultCommit< Impl >::oldestReady(), DefaultCommit< Impl >::squashAll(), and DefaultCommit< Impl >::tick().

◆ readTailInst()

template<class Impl >
Impl::DynInstPtr ROB< Impl >::readTailInst ( ThreadID  tid)

Returns pointer to the tail instruction within the ROB.

There is no guarantee as to the return value if the ROB is empty.

Return values
Pointerto the DynInst that is at the tail of the ROB.Returns a pointer to the tail instruction of a specific thread within the ROB.
Returns
Pointer to the DynInst that is at the tail of the ROB.

Definition at line 525 of file rob_impl.hh.

References ROB< Impl >::instList.

◆ regStats()

template<class Impl >
void ROB< Impl >::regStats ( )

◆ resetEntries()

template<class Impl >
void ROB< Impl >::resetEntries ( )

◆ resetState()

template<class Impl >
void ROB< Impl >::resetState ( )
private

◆ retireHead()

template<class Impl >
void ROB< Impl >::retireHead ( ThreadID  tid)

Retires the head instruction, removing it from the ROB.

Retires the head instruction of a specific thread, removing it from the ROB.

Definition at line 243 of file rob_impl.hh.

References ROB< Impl >::cpu, DPRINTF, ROB< Impl >::instList, ROB< Impl >::numInstsInROB, ROB< Impl >::robWrites, ROB< Impl >::threadEntries, and ROB< Impl >::updateHead().

Referenced by DefaultCommit< Impl >::commitHead(), and DefaultCommit< Impl >::commitInsts().

◆ setActiveThreads()

template<class Impl >
void ROB< Impl >::setActiveThreads ( std::list< ThreadID > *  at_ptr)

Sets pointer to the list of active threads.

Parameters
at_ptrPointer to the list of active threads.

Definition at line 129 of file rob_impl.hh.

References ROB< Impl >::activeThreads, and DPRINTF.

Referenced by DefaultCommit< Impl >::startupStage().

◆ squash()

template<class Impl >
void ROB< Impl >::squash ( InstSeqNum  squash_num,
ThreadID  tid 
)

◆ takeOverFrom()

template<class Impl >
void ROB< Impl >::takeOverFrom ( )

Takes over another CPU's thread.

Definition at line 146 of file rob_impl.hh.

References ROB< Impl >::resetState().

Referenced by DefaultCommit< Impl >::takeOverFrom().

◆ updateHead()

template<class Impl >
void ROB< Impl >::updateHead ( )

Updates the head instruction with the new oldest instruction.

Definition at line 400 of file rob_impl.hh.

References ROB< Impl >::activeThreads, ROB< Impl >::head, and ROB< Impl >::instList.

Referenced by ROB< Impl >::isEmpty(), and ROB< Impl >::retireHead().

◆ updateTail()

template<class Impl >
void ROB< Impl >::updateTail ( )

Updates the tail instruction with the new youngest instruction.

Definition at line 442 of file rob_impl.hh.

References ROB< Impl >::activeThreads, ROB< Impl >::instList, and ROB< Impl >::tail.

Referenced by ROB< Impl >::doSquash(), and ROB< Impl >::isEmpty().

Member Data Documentation

◆ activeThreads

template<class Impl >
std::list<ThreadID>* ROB< Impl >::activeThreads
private

◆ cpu

template<class Impl >
O3CPU* ROB< Impl >::cpu
private

Pointer to the CPU.

Definition at line 271 of file rob.hh.

Referenced by ROB< Impl >::name(), and ROB< Impl >::retireHead().

◆ doneSquashing

template<class Impl >
bool ROB< Impl >::doneSquashing[Impl::MaxThreads]
private

Is the ROB done squashing.

Definition at line 324 of file rob.hh.

Referenced by ROB< Impl >::doSquash(), ROB< Impl >::isDoneSquashing(), ROB< Impl >::resetState(), and ROB< Impl >::squash().

◆ dummyInst

template<class Impl >
DynInstPtr ROB< Impl >::dummyInst

Dummy instruction returned if there are no insts left.

Definition at line 317 of file rob.hh.

Referenced by ROB< Impl >::readHeadInst().

◆ head

template<class Impl >
InstIt ROB< Impl >::head

Iterator pointing to the instruction which is the first instruction in in the ROB.

Definition at line 300 of file rob.hh.

Referenced by ROB< Impl >::insertInst(), ROB< Impl >::resetState(), and ROB< Impl >::updateHead().

◆ instList

template<class Impl >
std::list<DynInstPtr> ROB< Impl >::instList[Impl::MaxThreads]
private

◆ maxEntries

template<class Impl >
unsigned ROB< Impl >::maxEntries[Impl::MaxThreads]
private

Max Insts a Thread Can Have in the ROB.

Definition at line 283 of file rob.hh.

Referenced by ROB< Impl >::getMaxEntries(), ROB< Impl >::numFreeEntries(), ROB< Impl >::resetEntries(), and ROB< Impl >::ROB().

◆ numEntries

template<class Impl >
unsigned ROB< Impl >::numEntries
private

◆ numInstsInROB

template<class Impl >
int ROB< Impl >::numInstsInROB

◆ numThreads

template<class Impl >
ThreadID ROB< Impl >::numThreads
private

Number of active threads.

Definition at line 327 of file rob.hh.

Referenced by ROB< Impl >::countInsts(), ROB< Impl >::drainSanityCheck(), ROB< Impl >::resetEntries(), and ROB< Impl >::ROB().

◆ robPolicy

template<class Impl >
SMTQueuePolicy ROB< Impl >::robPolicy
private

ROB resource sharing policy for SMT mode.

Definition at line 84 of file rob.hh.

Referenced by ROB< Impl >::entryAmount(), ROB< Impl >::resetEntries(), and ROB< Impl >::ROB().

◆ robReads

template<class Impl >
Stats::Scalar ROB< Impl >::robReads
private

Definition at line 330 of file rob.hh.

Referenced by ROB< Impl >::isHeadReady(), and ROB< Impl >::regStats().

◆ robStatus

template<class Impl >
Status ROB< Impl >::robStatus[Impl::MaxThreads]
private

Per-thread ROB status.

Definition at line 81 of file rob.hh.

Referenced by ROB< Impl >::squash().

◆ robWrites

template<class Impl >
Stats::Scalar ROB< Impl >::robWrites
private

◆ squashedSeqNum

template<class Impl >
InstSeqNum ROB< Impl >::squashedSeqNum[Impl::MaxThreads]
private

The sequence number of the squashed instruction.

Definition at line 321 of file rob.hh.

Referenced by ROB< Impl >::doSquash(), ROB< Impl >::resetState(), and ROB< Impl >::squash().

◆ squashIt

template<class Impl >
InstIt ROB< Impl >::squashIt[Impl::MaxThreads]
private

Iterator used for walking through the list of instructions when squashing.

Used so that there is persistent state between cycles; when squashing, the instructions are marked as squashed but not immediately removed, meaning the tail iterator remains the same before and after a squash. This will always be set to cpu->instList.end() if it is invalid.

Definition at line 310 of file rob.hh.

Referenced by ROB< Impl >::doSquash(), ROB< Impl >::resetState(), and ROB< Impl >::squash().

◆ squashWidth

template<class Impl >
unsigned ROB< Impl >::squashWidth
private

Number of instructions that can be squashed in a single cycle.

Definition at line 289 of file rob.hh.

Referenced by ROB< Impl >::doSquash().

◆ tail

template<class Impl >
InstIt ROB< Impl >::tail

Iterator pointing to the instruction which is the last instruction in the ROB.

This may at times be invalid (ie when the ROB is empty), however it should never be incorrect.

Definition at line 296 of file rob.hh.

Referenced by ROB< Impl >::insertInst(), ROB< Impl >::resetState(), and ROB< Impl >::updateTail().

◆ threadEntries

template<class Impl >
unsigned ROB< Impl >::threadEntries[Impl::MaxThreads]
private

The documentation for this class was generated from the following files:

Generated on Fri Feb 28 2020 16:27:15 for gem5 by doxygen 1.8.13