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)
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());
131 .
name(
name() +
".load_vrf_bank_conflict_cycles")
132 .
desc(
"total number of cycles LDS data are delayed before updating "
const std::string & name() const
WaitClass vectorSharedMemUnit
Stats::Scalar loadVrfBankConflictCycles
bool rdy(Cycles cycles=Cycles(0)) const
bool sendToLds(GPUDynInstPtr gpuDynInst) __attribute__((warn_unused_result))
send a general request to the LDS make sure to look at the return value here as your request might be...
std::queue< GPUDynInstPtr > lmIssuedRequests
LocalMemPipeline(const ComputeUnitParams *p, ComputeUnit &cu)
Derived & name(const std::string &name)
Set the name and marks this stat to print at the end of simulation.
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
Derived & desc(const std::string &_desc)
Set the description and marks this stat to print at the end of simulation.
Tick curTick()
The current simulated tick.
Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17