34#include "debug/GPUMem.hh"
35#include "debug/GPUPort.hh"
58 bool accessVrf =
true;
61 if ((
m) &&
m->latency.rdy() && (
m->isLoad() ||
m->isAtomicRet())) {
64 accessVrf =
w->computeUnit->vrf[
w->simdId]->
65 canScheduleWriteOperandsFromLoad(
w,
m);
77 if (
m->isFlat() && !
m->isMemSync() && !
m->isEndOfKernel()
78 &&
m->allLanesZero()) {
82 DPRINTF(GPUMem,
"CU%d: WF[%d][%d]: Completing local mem instr %s\n",
83 m->cu_id,
m->simdId,
m->wfSlotId,
m->disassemble());
85 w->decLGKMInstsIssued();
86 w->untrackLGKMInst(
m);
88 if (
m->isLoad() ||
m->isAtomicRet()) {
89 w->computeUnit->vrf[
w->simdId]->
90 scheduleWriteOperandsFromLoad(
w,
m);
94 computeUnit.shader->ScheduleAdd(&
w->outstandingReqs,
m->time, -1);
96 if (
m->isStore() ||
m->isAtomic()) {
101 if (
m->isLoad() ||
m->isAtomic()) {
102 computeUnit.shader->ScheduleAdd(&
w->outstandingReqsRdLm,
109 w->computeUnit->vectorSharedMemUnit.set(
m->time);
121 DPRINTF(GPUPort,
"packet was nack'd and put in retry queue");
131 if (gpuDynInst->isLoad()) {
134 }
else if (gpuDynInst->isStore()) {
148 gpuDynInst->setAccessTime(
curTick());
163 "are delayed before updating the VRF")
ComputeUnit & computeUnit
gem5::LocalMemPipeline::LocalMemPipelineStats stats
const std::string & name() const
std::queue< GPUDynInstPtr > lmReturnedRequests
LocalMemPipeline(const ComputeUnitParams &p, ComputeUnit &cu)
void issueRequest(GPUDynInstPtr gpuDynInst)
std::queue< GPUDynInstPtr > lmIssuedRequests
void validateRequestCounters()
#define ADD_STAT(n,...)
Convenience macro to add a stat to a statistics group.
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Tick curTick()
The universal simulation clock.
LocalMemPipelineStats(statistics::Group *parent)
statistics::Scalar loadVrfBankConflictCycles