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",
112 return RequestStatus_Issued;
126 return RequestStatus_Issued;
129 if (requestStatus!=RequestStatus_Issued) {
133 return requestStatus;
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 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
218 RubyRequestType_REPLACEMENT, RubyAccessMode_Supervisor,
225 "There are %d Invalidatons outstanding after Cache Walk\n",
237 "There are %d Writebacks outstanding before Cache Walk\n",
240 for (
int i = 0;
i <
size;
i++) {
243 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
245 RubyRequestType_FLUSH, RubyAccessMode_Supervisor,
252 "There are %d Writebacks outstanding after Cache Walk\n",
264 for (
int i = 0;
i <
size;
i++) {
267 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
269 RubyRequestType_REPLACEMENT, RubyAccessMode_Supervisor,
276 for (
int i = 0;
i<
size;
i++) {
279 std::shared_ptr<RubyRequest> msg = std::make_shared<RubyRequest>(
281 RubyRequestType_FLUSH, RubyAccessMode_Supervisor,
void insertKernel(int wavefront_id, PacketPtr pkt)
ContextID contextId() const
Accessor function for context ID.
bool scheduled() const
Determine if the current event is scheduled.
void wbCallback(Addr address)
Addr getAddressAtIdx(int idx) const
virtual RequestStatus makeRequest(PacketPtr pkt)
uint64_t m_outstanding_wb
uint64_t m_outstanding_inv
void deschedule(Event &event)
void wbL1()
Writeback L1 cache (Release)
uint64_t m_max_wb_per_cycle
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...
Tick curTick()
The current simulated tick.
void invCallback(Addr address)
CacheMemory * m_dataCache_ptr
void invL1()
Invalidate L1 cache (Acquire)
RequestStatus makeRequest(PacketPtr pkt)
const RequestPtr req
A pointer to the original request.
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
MessageBuffer * m_mandatory_q_ptr
std::vector< int > newKernelEnds
Declaration of the Packet class.
void schedule(Event &event, Tick when)
Cycles m_data_cache_hit_latency
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 *)