gem5
v21.2.1.0
|
Wrapper for a queue type to act as a pipeline stage input queue. More...
#include <buffers.hh>
Public Member Functions | |
Queue (const std::string &name, const std::string &data_name, unsigned int capacity_) | |
void | push (ElemType &data) |
Push an element into the buffer if it isn't a bubble. More... | |
void | clearReservedSpace () |
Clear all allocated space. More... | |
void | freeReservation () |
Clear a single reserved slot. More... | |
void | reserve () |
Reserve space in the queue for future pushes. More... | |
bool | canReserve () const |
Can a slot be reserved? More... | |
unsigned int | totalSpace () const |
Number of slots available in an empty buffer. More... | |
unsigned int | occupiedSpace () const |
Number of slots already occupied in this buffer. More... | |
unsigned int | reservedSpace () const |
Number of slots which are reserved. More... | |
unsigned int | remainingSpace () const |
Number of slots yet to fill in this buffer. More... | |
unsigned int | unreservedRemainingSpace () const |
Like remainingSpace but does not count reserved spaces. More... | |
ElemType & | front () |
Head value. More... | |
const ElemType & | front () const |
void | pop () |
Pop the head item. More... | |
bool | empty () const |
Is the queue empty? More... | |
void | minorTrace () const |
![]() | |
Named (const std::string &name_) | |
virtual | ~Named ()=default |
virtual std::string | name () const |
![]() | |
virtual | ~Reservable () |
Private Attributes | |
std::deque< ElemType > | queue |
unsigned int | numReservedSlots |
Number of slots currently reserved for future (reservation respecting) pushes. More... | |
unsigned int | capacity |
Need this here as queues usually don't have a limited capacity. More... | |
std::string | dataName |
Name to use for the data in MinorTrace. More... | |
Wrapper for a queue type to act as a pipeline stage input queue.
Handles capacity management, bubble value suppression and provides reporting.
In an ideal world, ElemType would be derived from ReportIF and BubbleIF, but here we use traits and allow the Adaptors ReportTraitsAdaptor and BubbleTraitsAdaptor to work on data which does directly implement those interfaces.
Definition at line 404 of file buffers.hh.
|
inline |
Definition at line 420 of file buffers.hh.
|
inlinevirtual |
Can a slot be reserved?
Implements gem5::minor::Reservable.
Definition at line 470 of file buffers.hh.
|
inline |
|
inline |
Is the queue empty?
Definition at line 509 of file buffers.hh.
Referenced by gem5::minor::Fetch1::evaluate(), gem5::minor::LSQ::findResponse(), gem5::minor::LSQ::isDrained(), gem5::minor::Fetch1::moveFromRequestsToTransfers(), gem5::minor::LSQ::moveFromRequestsToTransfers(), gem5::minor::LSQ::needsToTick(), gem5::minor::Fetch1::popAndDiscard(), gem5::minor::LSQ::popResponse(), gem5::minor::Fetch1::recvReqRetry(), gem5::minor::LSQ::step(), gem5::minor::Fetch1::stepQueues(), gem5::minor::Fetch1::tryToSendToTransfers(), and gem5::minor::LSQ::tryToSendToTransfers().
|
inlinevirtual |
Clear a single reserved slot.
Implements gem5::minor::Reservable.
Definition at line 451 of file buffers.hh.
|
inline |
Head value.
Like std::queue::front
Definition at line 501 of file buffers.hh.
Referenced by gem5::minor::Fetch1::evaluate(), gem5::minor::LSQ::findResponse(), gem5::minor::Fetch1::moveFromRequestsToTransfers(), gem5::minor::LSQ::moveFromRequestsToTransfers(), gem5::minor::LSQ::needsToTick(), gem5::minor::Fetch1::popAndDiscard(), gem5::minor::LSQ::popResponse(), gem5::minor::Fetch1::recvReqRetry(), gem5::minor::LSQ::step(), gem5::minor::Fetch1::stepQueues(), gem5::minor::Fetch1::tryToSendToTransfers(), and gem5::minor::LSQ::tryToSendToTransfers().
|
inline |
Definition at line 503 of file buffers.hh.
|
inline |
Definition at line 512 of file buffers.hh.
Referenced by gem5::minor::Fetch1::minorTrace(), and gem5::minor::LSQ::minorTrace().
|
inline |
Number of slots already occupied in this buffer.
Definition at line 476 of file buffers.hh.
Referenced by gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::minorTrace(), and gem5::minor::Fetch1::numInFlightFetches().
|
inline |
Pop the head item.
Like std::queue::pop
Definition at line 506 of file buffers.hh.
Referenced by gem5::minor::Fetch1::moveFromRequestsToTransfers(), gem5::minor::LSQ::moveFromRequestsToTransfers(), gem5::minor::Fetch1::popAndDiscard(), and gem5::minor::LSQ::popResponse().
|
inline |
Push an element into the buffer if it isn't a bubble.
Bubbles are just discarded. It is assummed that any push into a queue with reserved space intends to take that space
Definition at line 433 of file buffers.hh.
Referenced by gem5::minor::Fetch1::fetchLine(), gem5::minor::Fetch1::moveFromRequestsToTransfers(), gem5::minor::LSQ::moveFromRequestsToTransfers(), gem5::minor::LSQ::pushFailedRequest(), and gem5::minor::LSQ::pushRequest().
|
inline |
Number of slots yet to fill in this buffer.
This doesn't include reservation.
Definition at line 484 of file buffers.hh.
|
inlinevirtual |
Reserve space in the queue for future pushes.
Enquiries about space in the queue using unreservedRemainingSpace will only tell about space which is not full and not reserved.
Implements gem5::minor::Reservable.
Definition at line 461 of file buffers.hh.
Referenced by gem5::minor::Fetch1::fetchLine().
|
inline |
Number of slots which are reserved.
Definition at line 479 of file buffers.hh.
|
inline |
Number of slots available in an empty buffer.
Definition at line 473 of file buffers.hh.
|
inline |
Like remainingSpace but does not count reserved spaces.
Definition at line 493 of file buffers.hh.
Referenced by gem5::minor::LSQ::canRequest(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::canReserve(), gem5::minor::LSQ::moveFromRequestsToTransfers(), gem5::minor::LSQ::needsToTick(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::reserve(), and gem5::minor::LSQ::tryToSendToTransfers().
|
private |
Need this here as queues usually don't have a limited capacity.
Definition at line 414 of file buffers.hh.
Referenced by gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::push(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::remainingSpace(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::totalSpace(), and gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::unreservedRemainingSpace().
|
private |
Name to use for the data in MinorTrace.
Definition at line 417 of file buffers.hh.
|
private |
Number of slots currently reserved for future (reservation respecting) pushes.
Definition at line 411 of file buffers.hh.
Referenced by gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::clearReservedSpace(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::freeReservation(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::reserve(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::reservedSpace(), and gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::unreservedRemainingSpace().
|
private |
Definition at line 407 of file buffers.hh.
Referenced by gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::empty(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::front(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::minorTrace(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::occupiedSpace(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::pop(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::push(), gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::remainingSpace(), and gem5::minor::Queue< gem5::minor::ForwardLineData, ReportTraitsAdaptor< gem5::minor::ForwardLineData >, BubbleTraitsAdaptor< gem5::minor::ForwardLineData > >::unreservedRemainingSpace().