Go to the documentation of this file.
36 #include "debug/GPUMem.hh"
37 #include "debug/GPUPort.hh"
45 : computeUnit(cu), _name(cu.
name() +
".LocalMemPipeline"),
46 lmQueueSize(
p.local_mem_queue_size), stats(&cu)
57 bool accessVrf =
true;
60 if ((
m) &&
m->latency.rdy() && (
m->isLoad() ||
m->isAtomicRet())) {
63 accessVrf =
w->computeUnit->vrf[
w->simdId]->
64 canScheduleWriteOperandsFromLoad(
w,
m);
76 DPRINTF(GPUMem,
"CU%d: WF[%d][%d]: Completing local mem instr %s\n",
77 m->cu_id,
m->simdId,
m->wfSlotId,
m->disassemble());
79 w->decLGKMInstsIssued();
81 if (
m->isLoad() ||
m->isAtomicRet()) {
82 w->computeUnit->vrf[
w->simdId]->
83 scheduleWriteOperandsFromLoad(
w,
m);
89 if (
m->isStore() ||
m->isAtomic()) {
94 if (
m->isLoad() ||
m->isAtomic()) {
102 w->computeUnit->vectorSharedMemUnit.set(
m->time);
114 DPRINTF(GPUPort,
"packet was nack'd and put in retry queue");
123 gpuDynInst->setAccessTime(
curTick());
130 :
Stats::Group(parent,
"LocalMemPipeline"),
131 ADD_STAT(loadVrfBankConflictCycles,
"total number of cycles LDS data "
132 "are delayed before updating the VRF")
WaitClass vectorSharedMemUnit
bool rdy(Cycles cycles=Cycles(0)) const
#define ADD_STAT(n,...)
Convenience macro to add a stat to a statistics group.
std::queue< GPUDynInstPtr > lmIssuedRequests
LocalMemPipeline(const ComputeUnitParams &p, ComputeUnit &cu)
M5_NODISCARD bool sendToLds(GPUDynInstPtr gpuDynInst)
send a general request to the LDS make sure to look at the return value here as your request might be...
std::queue< GPUDynInstPtr > lmReturnedRequests
const std::string & name()
ComputeUnit & computeUnit
void issueRequest(GPUDynInstPtr gpuDynInst)
void ScheduleAdd(int *val, Tick when, int x)
std::shared_ptr< GPUDynInst > GPUDynInstPtr
LocalMemPipelineStats(Stats::Group *parent)
Tick curTick()
The universal simulation clock.
Generated on Tue Jun 22 2021 15:28:28 for gem5 by doxygen 1.8.17