Go to the documentation of this file.
34 #ifndef __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
35 #define __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
38 #include <unordered_map>
46 #include "mem/ruby/protocol/PrefetchBit.hh"
47 #include "mem/ruby/protocol/RubyAccessMode.hh"
48 #include "mem/ruby/protocol/RubyRequestType.hh"
49 #include "mem/ruby/protocol/SequencerRequestType.hh"
58 struct RubyGPUCoalescerParams;
97 std::map<InstSeqNum, PerInstPackets>
instMap;
147 bool usingRubyTester)
152 if (!usingRubyTester) {
178 if (!usingRubyTester) {
267 Cycles initialRequestTime,
268 Cycles forwardRequestTime,
275 Cycles initialRequestTime,
276 Cycles forwardRequestTime,
277 Cycles firstResponseTime);
292 Cycles initialRequestTime,
293 Cycles forwardRequestTime,
294 Cycles firstResponseTime);
299 Cycles initialRequestTime,
300 Cycles forwardRequestTime,
327 void print(std::ostream& out)
const;
371 Addr pc, RubyAccessMode access_mode,
385 Cycles initialRequestTime,
386 Cycles forwardRequestTime,
391 Cycles initialRequestTime,
392 Cycles forwardRequestTime,
394 bool success,
bool isRegion);
538 #endif // __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
Cycles m_deadlock_threshold
bool scheduled() const
Determine if the current event is scheduled.
virtual void issueMemSyncRequest(PacketPtr pkt)
int m_load_waiting_on_load_cycles
void recvFunctional(PacketPtr)
Receive a functional request packet from the peer.
Stats::Histogram m_latencyHist
Histogram for holding latency profile of all requests.
std::map< InstSeqNum, int > instPktsRemaining
RubyRequestType getRubyType() const
void insertPacket(PacketPtr pkt)
bool sendTimingResp(PacketPtr pkt)
Attempt to send a timing response to the request port by calling its corresponding receive function.
std::vector< std::vector< Stats::Histogram * > > m_missTypeMachLatencyHist
const PortID InvalidPortID
void writeCompleteCallback(Addr address, uint64_t instSeqNum, MachineType mach)
std::vector< PacketPtr > pkts
bool receiveWriteCompleteAck()
void evictionCallback(Addr address)
GMTokenPort & getGMTokenPort()
Stats::Histogram & getOutstandReqHist()
void printRequestTable(std::stringstream &ss)
RubyGPUCoalescerParams Params
uint64_t Tick
Tick count type.
void printProgress(std::ostream &out) const
Stats::Histogram & getInitialToForwardDelayHist(const MachineType t) const
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
void insertPacket(PacketPtr pkt)
int getPacketsRemaining(InstSeqNum seqNum)
std::vector< int > newKernelEnds
void deschedule(Event &event)
void kernelCallback(int wavefront_id)
int getNumPendingStores()
Stats::Histogram & getIssueToInitialDelayHist(uint32_t t) const
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
void addPendingReq(RubyPort::MemResponsePort *port, GPUDynInstPtr inst, bool usingRubyTester)
PacketPtr getFirstPkt() const
int m_store_waiting_on_load_cycles
int outstandingCount() const override
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
EventFunctionWrapper deadlockCheckEvent
std::vector< Stats::Histogram * > m_InitialToForwardDelayHist
Stats::Histogram m_outstandReqHist
Histogram for number of outstanding requests per cycle.
void completeHitCallback(std::vector< PacketPtr > &mylist)
bool isDeadlockEventScheduled() const override
void printRequestTable(std::stringstream &ss)
std::map< Addr, std::deque< CoalescedRequest * > > coalescedTable
std::vector< Stats::Histogram * > m_IssueToInitialDelayHist
Histograms for recording the breakdown of miss latency.
Stats::Histogram & getForwardRequestToFirstResponseHist(const MachineType t) const
int m_store_waiting_on_store_cycles
virtual void atomicCallback(Addr address, MachineType mach, const DataBlock &data)
RubyTester::SenderState SenderState
void print(std::ostream &out) const
bool m_runningGarnetStandalone
Stats::Histogram & getLatencyHist()
void setPacketsRemaining(InstSeqNum seqNum, int count)
Ports are used to interface objects to each other.
void setSeqNum(uint64_t _seqNum)
std::vector< Stats::Histogram * > m_typeLatencyHist
virtual RubyRequestType getRequestType(PacketPtr pkt)
UncoalescedTable(GPUCoalescer *gc)
std::unordered_map< uint64_t, PendingWriteInst > pendingWriteInsts
GPUCoalescer & operator=(const GPUCoalescer &obj)
void insertKernel(int wavefront_id, PacketPtr pkt)
bool m_deadlock_check_scheduled
GPUDynInstPtr getDynInst(PacketPtr pkt) const
EventFunctionWrapper issueEvent
CoalescedRequest(uint64_t _seqNum)
AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
const PortID id
A numeric identifier to distinguish ports in a vector, and set to InvalidPortID in case this port is ...
std::vector< Stats::Histogram * > m_ForwardToFirstResponseDelayHist
std::map< InstSeqNum, PerInstPackets > instMap
void resetStats() override
Callback to reset stats.
Stats::Histogram & getFirstResponseToCompletionDelayHist(const MachineType t) const
CacheMemory * m_instCache_ptr
int m_load_waiting_on_store_cycles
ProbePointArg< PacketInfo > Packet
Packet probe point.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const std::string name() const
Return port name (for DPRINTF).
void ackWriteCompletion(bool usingRubyTester)
void writeCallback(Addr address, DataBlock &data)
RequestStatus makeRequest(PacketPtr pkt) override
void readCallback(Addr address, DataBlock &data)
RubyPort::MemResponsePort * originalPort
bool coalescePacket(PacketPtr pkt)
Stats::Histogram & getMissTypeLatencyHist(uint32_t t)
Stats::Histogram & getMissTypeMachLatencyHist(uint32_t r, uint32_t t) const
std::vector< Stats::Histogram * > m_missTypeLatencyHist
void recordMissLatency(CoalescedRequest *crequest, MachineType mach, Cycles initialRequestTime, Cycles forwardRequestTime, Cycles firstResponseTime, bool success, bool isRegion)
std::list< PacketPtr > PerInstPackets
std::vector< Stats::Histogram * > m_FirstResponseToCompletionDelayHist
bool tryCacheAccess(Addr addr, RubyRequestType type, Addr pc, RubyAccessMode access_mode, int size, DataBlock *&data_ptr)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
uint64_t getSeqNum() const
std::unordered_map< int, PacketPtr > kernelEndList
std::vector< Stats::Histogram * > m_missMachLatencyHist
Histograms for profiling the latencies for requests that required external messages.
GPUDynInstPtr gpuDynInstPtr
int m_max_outstanding_requests
void initPacketsRemaining(InstSeqNum seqNum, int count)
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Cycles is a wrapper class for representing cycle counts, i.e.
void checkDeadlock(Tick threshold)
GMTokenPort(const std::string &name, ClockedObject *owner, PortID id=InvalidPortID)
std::ostream & operator<<(std::ostream &out, const GPUCoalescer &obj)
std::vector< PacketPtr > & getPackets()
Stats::Histogram & getMissLatencyHist()
Stats::Histogram & getTypeLatencyHist(uint32_t t)
virtual void issueRequest(CoalescedRequest *crequest)=0
SenderState * senderState
This packet's sender state.
Stats::Histogram m_missLatencyHist
Histogram for holding latency profile of all requests that miss in the controller connected to this s...
bool recvTimingReq(PacketPtr)
Receive a timing request from the peer.
void setIssueTime(Cycles _issueTime)
GPUCoalescer(const Params &)
Stats::Histogram & getMissMachLatencyHist(uint32_t t) const
Tick recvAtomic(PacketPtr)
Receive an atomic request packet from the peer.
PerInstPackets * getInstPackets(int offset)
Cycles getIssueTime() const
CacheMemory * m_dataCache_ptr
bool areRequestsDone(const InstSeqNum instSeqNum)
bool assumingRfOCoherence
std::unordered_map< uint64_t, std::deque< CoalescedRequest * > > coalescedReqs
void setRubyType(RubyRequestType type)
void descheduleDeadlockEvent() override
UncoalescedTable uncoalescedTable
void hitCallback(CoalescedRequest *crequest, MachineType mach, DataBlock &data, bool success, Cycles initialRequestTime, Cycles forwardRequestTime, Cycles firstResponseTime, bool isRegion)
Generated on Tue Mar 23 2021 19:41:28 for gem5 by doxygen 1.8.17