36 #ifndef __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
37 #define __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
40 #include <unordered_map>
43 #include "mem/protocol/HSAScope.hh"
44 #include "mem/protocol/HSASegment.hh"
45 #include "mem/protocol/PrefetchBit.hh"
46 #include "mem/protocol/RubyAccessMode.hh"
47 #include "mem/protocol/RubyRequestType.hh"
48 #include "mem/protocol/SequencerRequestType.hh"
59 class RubyGPUCoalescerParams;
99 typedef RubyGPUCoalescerParams
Params;
120 Cycles initialRequestTime,
121 Cycles forwardRequestTime,
128 Cycles initialRequestTime,
129 Cycles forwardRequestTime,
130 Cycles firstResponseTime);
141 Cycles initialRequestTime,
142 Cycles forwardRequestTime,
143 Cycles firstResponseTime);
148 Cycles initialRequestTime,
149 Cycles forwardRequestTime,
180 void print(std::ostream& out)
const;
227 Addr pc, RubyAccessMode access_mode,
238 Cycles initialRequestTime,
239 Cycles forwardRequestTime,
244 Cycles initialRequestTime,
245 Cycles forwardRequestTime,
247 bool success,
bool isRegion);
253 RubyRequestType request_type);
319 return "GPUCoalescer deadlock check";
384 #endif // __MEM_RUBY_SYSTEM_GPU_COALESCER_HH__
Stats::Histogram & getLatencyHist()
void recordMissLatency(GPUCoalescerRequest *request, MachineType mach, Cycles initialRequestTime, Cycles forwardRequestTime, Cycles firstResponseTime, bool success, bool isRegion)
void insertKernel(int wavefront_id, PacketPtr pkt)
void atomicCallback(Addr address, MachineType mach, const DataBlock &data)
Stats::Scalar CP_TCCStHits
RequestDesc(PacketPtr pkt, RubyRequestType p_type, RubyRequestType s_type)
Stats::Scalar GPU_TCPStHits
Cycles is a wrapper class for representing cycle counts, i.e.
Stats::Histogram m_missLatencyHist
Histogram for holding latency profile of all requests that miss in the controller connected to this s...
GPUCoalescerWakeupEvent(GPUCoalescer *_seq)
std::vector< Stats::Histogram * > m_ForwardToFirstResponseDelayHist
GPUCoalescer & operator=(const GPUCoalescer &obj)
CoalescingTable reqCoalescer
virtual void issueRequest(PacketPtr pkt, RubyRequestType type)
GPUCoalescer(const Params *)
RequestTable m_readRequestTable
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
Stats::Scalar GPU_TCPLdHits
Stats::Scalar GPU_TCCStHits
bool scheduled() const
Determine if the current event is scheduled.
void recordCPWriteCallBack(MachineID myMachID, MachineID senderMachID)
void kernelCallback(int wavfront_id)
Stats::Histogram & getMissTypeLatencyHist(uint32_t t)
Stats::Scalar GPU_TCPLdTransfers
RequestStatus getRequestStatus(PacketPtr pkt, RubyRequestType request_type)
const char * description() const
Return a C string describing the event.
Stats::Scalar CP_TCPLdTransfers
virtual RequestStatus makeRequest(PacketPtr pkt)
std::vector< Stats::Histogram * > m_missMachLatencyHist
Histograms for profiling the latencies for requests that required external messages.
int m_max_outstanding_requests
Stats::Histogram m_latencyHist
Histogram for holding latency profile of all requests.
bool tryCacheAccess(Addr addr, RubyRequestType type, Addr pc, RubyAccessMode access_mode, int size, DataBlock *&data_ptr)
std::ostream & operator<<(std::ostream &out, const GPUCoalescerRequest &obj)
std::unordered_map< Addr, GPUCoalescerRequest * > RequestTable
Declaration of Statistics objects.
IssueEvent(GPUCoalescer *_seq)
This is a simple scalar statistic, like a counter.
Stats::Histogram & getForwardRequestToFirstResponseHist(const MachineType t) const
void descheduleDeadlockEvent()
void deschedule(Event &event)
Stats::Scalar CP_TCPStTransfers
RubyGPUCoalescerParams Params
const char * description() const
Return a C string describing the event.
std::unordered_map< Addr, std::vector< RequestDesc > > CoalescingTable
HSASegment reqSegmentToHSASegment(Request *req)
bool isDeadlockEventScheduled() const
CacheMemory * m_dataCache_ptr
void readCallback(Addr address, DataBlock &data)
bool insertRequest(PacketPtr pkt, RubyRequestType request_type)
RubyRequestType primaryType
void writeCallback(Addr address, DataBlock &data)
bool assumingRfOCoherence
std::vector< Addr > newRequests
Stats::Scalar GPU_TCCLdHits
Stats::Histogram & getIssueToInitialDelayHist(uint32_t t) const
int m_store_waiting_on_load_cycles
Stats::Histogram m_outstandReqHist
Histogram for number of outstanding requests per cycle.
std::vector< std::vector< Stats::Histogram * > > m_missTypeMachLatencyHist
GPUCoalescerWakeupEvent deadlockCheckEvent
void completeHitCallback(std::vector< PacketPtr > &mylist, int len)
void recordRequestType(SequencerRequestType requestType)
std::vector< Stats::Histogram * > m_InitialToForwardDelayHist
void checkCoherence(Addr address)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Stats::Histogram & getInitialToForwardDelayHist(const MachineType t) const
HSAScope reqScopeToHSAScope(Request *req)
int m_load_waiting_on_load_cycles
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
void hitCallback(GPUCoalescerRequest *request, MachineType mach, DataBlock &data, bool success, Cycles initialRequestTime, Cycles forwardRequestTime, Cycles firstResponseTime, bool isRegion)
std::unordered_map< int, PacketPtr > kernelEndList
Stats::Histogram & getMissTypeMachLatencyHist(uint32_t r, uint32_t t) const
std::vector< Stats::Histogram * > m_IssueToInitialDelayHist
Histograms for recording the breakdown of miss latency.
Stats::Histogram & getOutstandReqHist()
Stats::Scalar CP_TCPLdHits
int outstandingCount() const
void regStats()
Register statistics for this object.
std::vector< Stats::Histogram * > m_typeLatencyHist
void recordCPReadCallBack(MachineID myMachID, MachineID senderMachID)
Stats::Histogram & getFirstResponseToCompletionDelayHist(const MachineType t) const
Stats::Histogram & getMissLatencyHist()
Stats::Histogram & getTypeLatencyHist(uint32_t t)
PacketPtr mapAddrToPkt(Addr address)
std::vector< int > newKernelEnds
void removeRequest(GPUCoalescerRequest *request)
GPUCoalescerRequest(PacketPtr _pkt, RubyRequestType _m_type, Cycles _issue_time)
RubyRequestType secondaryType
void print(std::ostream &out) const
Stats::Scalar CP_TCPStHits
int m_load_waiting_on_store_cycles
RequestTable m_writeRequestTable
CacheMemory * m_instCache_ptr
void resetStats()
Reset statistics associated with this object.
Cycles m_data_cache_hit_latency
bool handleLlsc(Addr address, GPUCoalescerRequest *request)
GPUCoalescer * m_GPUCoalescer_ptr
void printProgress(std::ostream &out) const
Stats::Histogram & getMissMachLatencyHist(uint32_t t) const
bool m_runningGarnetStandalone
std::vector< Stats::Histogram * > m_FirstResponseToCompletionDelayHist
std::vector< Stats::Histogram * > m_missTypeLatencyHist
int m_store_waiting_on_store_cycles
void evictionCallback(Addr address)
Stats::Scalar GPU_TCPStTransfers
bool m_deadlock_check_scheduled
Stats::Scalar CP_TCCLdHits