38 #include "config/the_isa.hh" 40 #if THE_ISA == X86_ISA 47 #include "debug/GPUCoalescer.hh" 48 #include "debug/MemoryAccess.hh" 58 #include "params/VIPERCoalescer.hh" 63 VIPERCoalescerParams::create()
95 "There are %d Writebacks and %d Invalidatons\n",
100 if (pkt->
req->isKernel()) {
108 if (pkt->
req->isRelease()) {
112 return RequestStatus_Issued;
115 }
else if (pkt->
req->isKernel() && pkt->
req->isRelease()) {
126 return RequestStatus_Issued;
129 if (requestStatus!=RequestStatus_Issued) {
133 return requestStatus;
134 }
else if (pkt->
req->isKernel() && pkt->
req->isAcquire()) {
138 }
else if (pkt->
req->isAcquire() && pkt->
req->isRelease()) {
146 }
else if (pkt->
req->isRelease()) {
154 }
else if (pkt->
req->isAcquire()) {
166 return RequestStatus_Issued;
176 if (m_outstanding_wb == 0) {
210 "There are %d Invalidations outstanding before Cache Walk\n",
213 for (
int i = 0;
i < size;
i++) {
216 RubyRequestType request_type = RubyRequestType_REPLACEMENT;
217 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
219 request_type, RubyAccessMode_Supervisor,
229 "There are %d Invalidatons outstanding after Cache Walk\n",
241 "There are %d Writebacks outstanding before Cache Walk\n",
244 for (
int i = 0;
i < size;
i++) {
247 RubyRequestType request_type = RubyRequestType_FLUSH;
248 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
250 request_type, RubyAccessMode_Supervisor,
260 "There are %d Writebacks outstanding after Cache Walk\n",
272 for (
int i = 0;
i < size;
i++) {
275 RubyRequestType request_type = RubyRequestType_REPLACEMENT;
276 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
278 request_type, RubyAccessMode_Supervisor,
288 for (
int i = 0;
i< size;
i++) {
291 RubyRequestType request_type = RubyRequestType_FLUSH;
292 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
294 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.
virtual RequestStatus makeRequest(PacketPtr pkt)
uint64_t m_outstanding_wb
uint64_t m_outstanding_inv
void deschedule(Event &event)
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.
bool scheduled() const
Determine if the current event is scheduled.
void invCallback(Addr address)
CacheMemory * m_dataCache_ptr
uint64_t Tick
Tick count type.
void invL1()
Invalidate L1 cache (Acquire)
RequestStatus makeRequest(PacketPtr pkt)
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
MessageBuffer * m_mandatory_q_ptr
std::vector< int > newKernelEnds
Declaration of the Packet class.
virtual Cycles mandatoryQueueLatency(const RubyRequestType ¶m_type)
void schedule(Event &event, Tick when)
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 *)