gem5
|
The HardwareResource class models structures that hold the in-flight nodes. More...
Public Member Functions | |
HardwareResource (uint16_t max_rob, uint16_t max_stores, uint16_t max_loads) | |
Constructor that initializes the sizes of the structures. More... | |
void | occupy (const GraphNode *new_node) |
Occupy appropriate structures for an issued node. More... | |
void | release (const GraphNode *done_node) |
Release appropriate structures for a completed node. More... | |
void | releaseStoreBuffer () |
Release store buffer entry for a completed store. More... | |
bool | isAvailable (const GraphNode *new_node) const |
Check if structures required to issue a node are free. More... | |
bool | awaitingResponse () const |
Check if there are any outstanding requests, i.e. More... | |
void | printOccupancy () |
Print resource occupancy for debugging. More... | |
Private Attributes | |
const uint16_t | sizeROB |
The size of the ROB used to throttle the max. More... | |
const uint16_t | sizeStoreBuffer |
The size of store buffer. More... | |
const uint16_t | sizeLoadBuffer |
The size of load buffer. More... | |
std::map< NodeSeqNum, NodeRobNum > | inFlightNodes |
A map from the sequence number to the ROB number of the in- flight nodes. More... | |
NodeRobNum | oldestInFlightRobNum |
The ROB number of the oldest in-flight node. More... | |
uint16_t | numInFlightLoads |
Number of ready loads for which request may or may not be sent. More... | |
uint16_t | numInFlightStores |
Number of ready stores for which request may or may not be sent. More... | |
The HardwareResource class models structures that hold the in-flight nodes.
When a node becomes dependency free, first check if resources are available to issue it.
Definition at line 699 of file trace_cpu.hh.
TraceCPU::ElasticDataGen::HardwareResource::HardwareResource | ( | uint16_t | max_rob, |
uint16_t | max_stores, | ||
uint16_t | max_loads | ||
) |
Constructor that initializes the sizes of the structures.
max_rob | size of the Reorder Buffer |
max_stores | size of Store Buffer |
max_loads | size of Load Buffer |
Definition at line 887 of file trace_cpu.cc.
bool TraceCPU::ElasticDataGen::HardwareResource::awaitingResponse | ( | ) | const |
Check if there are any outstanding requests, i.e.
requests for which we are yet to receive a response.
Definition at line 1009 of file trace_cpu.cc.
Referenced by TraceCPU::ElasticDataGen::execute().
bool TraceCPU::ElasticDataGen::HardwareResource::isAvailable | ( | const GraphNode * | new_node | ) | const |
Check if structures required to issue a node are free.
node_ptr | pointer to the node ready to issue |
Definition at line 965 of file trace_cpu.cc.
References DPRINTFR, TraceCPU::ElasticDataGen::GraphNode::isLoad(), TraceCPU::ElasticDataGen::GraphNode::isStore(), TraceCPU::ElasticDataGen::GraphNode::robNum, and TraceCPU::ElasticDataGen::GraphNode::seqNum.
Referenced by TraceCPU::ElasticDataGen::checkAndIssue(), and TraceCPU::ElasticDataGen::execute().
void TraceCPU::ElasticDataGen::HardwareResource::occupy | ( | const GraphNode * | new_node | ) |
Occupy appropriate structures for an issued node.
node_ptr | pointer to the issued node |
Definition at line 898 of file trace_cpu.cc.
References TraceCPU::ElasticDataGen::GraphNode::isLoad(), TraceCPU::ElasticDataGen::GraphNode::isStore(), TraceCPU::ElasticDataGen::GraphNode::robNum, and TraceCPU::ElasticDataGen::GraphNode::seqNum.
Referenced by TraceCPU::ElasticDataGen::checkAndIssue().
void TraceCPU::ElasticDataGen::HardwareResource::printOccupancy | ( | ) |
Print resource occupancy for debugging.
Definition at line 1015 of file trace_cpu.cc.
References DPRINTFR.
Referenced by TraceCPU::ElasticDataGen::execute().
void TraceCPU::ElasticDataGen::HardwareResource::release | ( | const GraphNode * | done_node | ) |
Release appropriate structures for a completed node.
node_ptr | pointer to the completed node |
Definition at line 917 of file trace_cpu.cc.
References DPRINTFR, TraceCPU::ElasticDataGen::GraphNode::isLoad(), TraceCPU::ElasticDataGen::GraphNode::isStore(), TraceCPU::ElasticDataGen::GraphNode::isStrictlyOrdered(), and TraceCPU::ElasticDataGen::GraphNode::seqNum.
Referenced by TraceCPU::ElasticDataGen::completeMemAccess(), and TraceCPU::ElasticDataGen::execute().
void TraceCPU::ElasticDataGen::HardwareResource::releaseStoreBuffer | ( | ) |
Release store buffer entry for a completed store.
Definition at line 958 of file trace_cpu.cc.
Referenced by TraceCPU::ElasticDataGen::completeMemAccess().
|
private |
A map from the sequence number to the ROB number of the in- flight nodes.
This includes all nodes that are in the readyList plus the loads for which a request has been sent which are not present in the readyList. But such loads are not yet complete and thus occupy resources. We need to query the oldest in-flight node and since a map container keeps all its keys sorted using the less than criterion, the first element is the in-flight node with the least sequence number, i.e. the oldest in-flight node.
Definition at line 778 of file trace_cpu.hh.
|
private |
Number of ready loads for which request may or may not be sent.
Definition at line 784 of file trace_cpu.hh.
|
private |
Number of ready stores for which request may or may not be sent.
Definition at line 787 of file trace_cpu.hh.
|
private |
The ROB number of the oldest in-flight node.
Definition at line 781 of file trace_cpu.hh.
|
private |
The size of load buffer.
This is used to throttle the max. number of in-flight loads.
Definition at line 766 of file trace_cpu.hh.
|
private |
The size of the ROB used to throttle the max.
number of in-flight nodes.
Definition at line 754 of file trace_cpu.hh.
|
private |
The size of store buffer.
This is used to throttle the max. number of in-flight stores.
Definition at line 760 of file trace_cpu.hh.