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 class RubyGPUCoalescerParams;
91 std::map<uint64_t, PerInstPackets>
instMap;
139 bool usingRubyTester)
144 if (!usingRubyTester) {
170 if (!usingRubyTester) {
260 Cycles initialRequestTime,
261 Cycles forwardRequestTime,
268 Cycles initialRequestTime,
269 Cycles forwardRequestTime,
270 Cycles firstResponseTime);
285 Cycles initialRequestTime,
286 Cycles forwardRequestTime,
287 Cycles firstResponseTime);
292 Cycles initialRequestTime,
293 Cycles forwardRequestTime,
320 void print(std::ostream& out)
const;
364 Addr pc, RubyAccessMode access_mode,
378 Cycles initialRequestTime,
379 Cycles forwardRequestTime,
384 Cycles initialRequestTime,
385 Cycles forwardRequestTime,
387 bool success,
bool isRegion);
525 #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.
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)
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
void regStats() override
Callback to set stat parameters.
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()
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
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
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)
bool areRequestsDone(const uint64_t instSeqNum)
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
std::map< uint64_t, PerInstPackets > instMap
int m_max_outstanding_requests
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)
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 assumingRfOCoherence
GPUCoalescer(const Params *)
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 Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17