36 #include "config/the_isa.hh" 38 #if THE_ISA == X86_ISA 45 #include "debug/GPUCoalescer.hh" 46 #include "debug/MemoryAccess.hh" 56 #include "params/VIPERCoalescer.hh" 61 VIPERCoalescerParams::create()
93 "There are %d Writebacks and %d Invalidatons\n",
98 if (pkt->
req->isKernel()) {
106 if (pkt->
req->isRelease()) {
110 return RequestStatus_Issued;
113 }
else if (pkt->
req->isKernel() && pkt->
req->isRelease()) {
124 return RequestStatus_Issued;
127 if (requestStatus!=RequestStatus_Issued) {
131 return requestStatus;
132 }
else if (pkt->
req->isKernel() && pkt->
req->isAcquire()) {
136 }
else if (pkt->
req->isAcquire() && pkt->
req->isRelease()) {
144 }
else if (pkt->
req->isRelease()) {
152 }
else if (pkt->
req->isAcquire()) {
164 return RequestStatus_Issued;
174 if (m_outstanding_wb == 0) {
208 "There are %d Invalidations outstanding before Cache Walk\n",
211 for (
int i = 0;
i < size;
i++) {
214 RubyRequestType request_type = RubyRequestType_REPLACEMENT;
215 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
217 request_type, RubyAccessMode_Supervisor,
227 "There are %d Invalidatons outstanding after Cache Walk\n",
239 "There are %d Writebacks outstanding before Cache Walk\n",
242 for (
int i = 0;
i < size;
i++) {
245 RubyRequestType request_type = RubyRequestType_FLUSH;
246 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
248 request_type, RubyAccessMode_Supervisor,
258 "There are %d Writebacks outstanding after Cache Walk\n",
270 for (
int i = 0;
i < size;
i++) {
273 RubyRequestType request_type = RubyRequestType_REPLACEMENT;
274 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
276 request_type, RubyAccessMode_Supervisor,
286 for (
int i = 0;
i< size;
i++) {
289 RubyRequestType request_type = RubyRequestType_FLUSH;
290 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
292 request_type, RubyAccessMode_Supervisor,
void insertKernel(int wavefront_id, PacketPtr pkt)
EventFunctionWrapper issueEvent
AbstractController * m_controller
void wbCallback(Addr address)
Overload hash function for BasicBlockRange type.
uint64_t m_outstanding_wb
uint64_t m_outstanding_inv
RequestPtr req
A pointer to the original request.
RubyGPUCoalescerParams Params
void wbL1()
Writeback L1 cache (Release)
uint64_t m_max_wb_per_cycle
Tick cyclesToTicks(Cycles c) const
Tick curTick()
The current simulated tick.
void invCallback(Addr address)
CacheMemory * m_dataCache_ptr
uint64_t Tick
Tick count type.
virtual RequestStatus makeRequest(PacketPtr pkt) override
void invL1()
Invalidate L1 cache (Acquire)
RequestStatus makeRequest(PacketPtr pkt)
void deschedule(Event &event)
void schedule(Event &event, Tick when)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
std::unordered_map< int, PacketPtr > kernelEndList
Tick clockEdge(Cycles cycles=Cycles(0)) const
Determine the tick when a cycle begins, by default the current one, but the argument also enables the...
Addr getAddressAtIdx(int idx) const
bool scheduled() const
Determine if the current event is scheduled.
MessageBuffer * m_mandatory_q_ptr
std::vector< int > newKernelEnds
Declaration of the Packet class.
virtual Cycles mandatoryQueueLatency(const RubyRequestType ¶m_type)
void invwbL1()
Invalidate and Writeback L1 cache (Acquire&Release)
uint64_t m_max_inv_per_cycle
void enqueue(MsgPtr message, Tick curTime, Tick delta)
VIPERCoalescer(const Params *)