Kyle Roarty has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/45347 )
Change subject: arch-gcn3,arch-vega,gpu-compute: Move request counters
......................................................................
arch-gcn3,arch-vega,gpu-compute: Move request counters
When the Vega ISA got committed, it lacked the request counter
tracking for memory requests that existed in the GCN3 code.
Instead of copying over the same lines from the GCN3 code to the Vega
code, this commit makes the various memory pipelines handle updating the
request counter information instead, as every memory instruction calls a
memory pipeline.
This commit also adds an issueRequest in scalar_memory_pipeline, as
previously, the gpuDynInsts were explicitly placed in the queue of
issuedRequests.
Change-Id: I5140d3b2f12be582f2ae9ff7c433167aeec5b68e
---
M src/arch/amdgpu/gcn3/insts/instructions.cc
M src/arch/amdgpu/vega/insts/instructions.cc
M src/gpu-compute/global_memory_pipeline.cc
M src/gpu-compute/local_memory_pipeline.cc
M src/gpu-compute/scalar_memory_pipeline.cc
M src/gpu-compute/scalar_memory_pipeline.hh
6 files changed, 82 insertions(+), 408 deletions(-)
diff --git a/src/arch/amdgpu/gcn3/insts/instructions.cc
b/src/arch/amdgpu/gcn3/insts/instructions.cc
index a5f28e3..a51354e 100644
--- a/src/arch/amdgpu/gcn3/insts/instructions.cc
+++ b/src/arch/amdgpu/gcn3/insts/instructions.cc
@@ -4494,12 +4494,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
}
void
@@ -4553,12 +4548,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -4610,12 +4600,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -4667,12 +4652,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -4724,12 +4704,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -4782,12 +4757,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -4841,12 +4811,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -4900,12 +4865,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -4959,12 +4919,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5018,12 +4973,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarRdGmReqsInPipe--;
- wf->scalarOutstandingReqsRdGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5084,12 +5034,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarWrGmReqsInPipe--;
- wf->scalarOutstandingReqsWrGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -5144,12 +5089,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarWrGmReqsInPipe--;
- wf->scalarOutstandingReqsWrGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -5204,12 +5144,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
-
- wf->scalarWrGmReqsInPipe--;
- wf->scalarOutstandingReqsWrGm++;
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
+ issueRequest(gpuDynInst);
}
void
@@ -31259,11 +31194,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -31323,11 +31253,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -31386,11 +31311,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -31561,11 +31481,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -31620,11 +31535,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -32075,11 +31985,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -32136,11 +32041,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -32200,11 +32100,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -32283,11 +32178,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -32363,11 +32253,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
Inst_DS__DS_READ_U16::initiateAcc(GPUDynInstPtr gpuDynInst)
@@ -32928,11 +32813,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -32992,11 +32872,6 @@
}
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -33514,11 +33389,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -33575,11 +33445,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -33639,11 +33504,6 @@
calcAddr(gpuDynInst, addr);
gpuDynInst->computeUnit()->localMemoryPipe.issueRequest(gpuDynInst);
-
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35067,17 +34927,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe.
issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35197,17 +35050,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35327,17 +35173,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35426,17 +35265,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -35530,17 +35362,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -35639,17 +35464,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdLmReqsInPipe--;
- wf->outstandingReqsRdLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -35762,17 +35580,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35856,17 +35667,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -35950,17 +35754,10 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -36039,13 +35836,9 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
@@ -36056,9 +35849,6 @@
= data1[lane];
}
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -36139,13 +35929,9 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
@@ -36158,9 +35944,6 @@
= data2[lane];
}
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -36243,13 +36026,9 @@
if (isLocalMem()) {
gpuDynInst->computeUnit()->localMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrLmReqsInPipe--;
- wf->outstandingReqsWrLm++;
} else {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
@@ -36264,9 +36043,6 @@
= data3[lane];
}
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
} // execute
void
@@ -36325,17 +36101,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->rdGmReqsInPipe--;
-
- wf->outstandingReqsWrGm++;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -36382,17 +36150,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->rdGmReqsInPipe--;
-
- wf->outstandingReqsWrGm++;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
Inst_MUBUF__BUFFER_WBINVL1_VOL::initiateAcc(GPUDynInstPtr gpuDynInst)
@@ -39412,14 +39172,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
} // execute
void
@@ -39481,14 +39236,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39549,14 +39299,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39646,14 +39391,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39715,14 +39455,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39784,14 +39519,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39862,14 +39592,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -39952,14 +39677,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
} // execute
void
@@ -40020,14 +39740,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40088,14 +39803,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40157,14 +39867,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- wf->outstandingReqs++;
- wf->validateRequestCounters();
}
void
@@ -40234,14 +39939,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40315,14 +40015,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe
.issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40387,17 +40082,10 @@
"Flats to private aperture not tested yet\n");
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
-
ConstVecOperandU32 data(gpuDynInst, extData.DATA);
data.read();
@@ -40508,16 +40196,9 @@
"Flats to private aperture not tested yet\n");
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40599,16 +40280,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -40690,16 +40364,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
Inst_FLAT__FLAT_ATOMIC_SUB::initiateAcc(GPUDynInstPtr gpuDynInst)
@@ -40955,16 +40622,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41046,16 +40706,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41179,16 +40832,9 @@
"Flats to private aperture not tested yet\n");
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41271,16 +40917,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41364,16 +41003,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41639,16 +41271,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
@@ -41733,16 +41358,9 @@
if (gpuDynInst->executedAs() == Enums::SC_GLOBAL) {
gpuDynInst->computeUnit()->globalMemoryPipe.
issueRequest(gpuDynInst);
- wf->wrGmReqsInPipe--;
- wf->outstandingReqsWrGm++;
- wf->rdGmReqsInPipe--;
- wf->outstandingReqsRdGm++;
} else {
fatal("Non global flat instructions not implemented yet.\n");
}
-
- gpuDynInst->wavefront()->outstandingReqs++;
- gpuDynInst->wavefront()->validateRequestCounters();
}
void
diff --git a/src/arch/amdgpu/vega/insts/instructions.cc
b/src/arch/amdgpu/vega/insts/instructions.cc
index 0a01bf2..5b41885 100644
--- a/src/arch/amdgpu/vega/insts/instructions.cc
+++ b/src/arch/amdgpu/vega/insts/instructions.cc
@@ -4969,7 +4969,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5023,7 +5023,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5076,7 +5076,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5129,7 +5129,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5182,7 +5182,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5236,7 +5236,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5291,7 +5291,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5346,7 +5346,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5401,7 +5401,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5456,7 +5456,7 @@
calcAddr(gpuDynInst, rsrcDesc, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe
- .getGMReqFIFO().push(gpuDynInst);
+ .issueRequest(gpuDynInst);
} // execute
void
@@ -5518,7 +5518,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5574,7 +5574,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
@@ -5630,7 +5630,7 @@
calcAddr(gpuDynInst, addr, offset);
gpuDynInst->computeUnit()->scalarMemoryPipe.
- getGMReqFIFO().push(gpuDynInst);
+ issueRequest(gpuDynInst);
} // execute
void
diff --git a/src/gpu-compute/global_memory_pipeline.cc
b/src/gpu-compute/global_memory_pipeline.cc
index 2f251e8..651fed2 100644
--- a/src/gpu-compute/global_memory_pipeline.cc
+++ b/src/gpu-compute/global_memory_pipeline.cc
@@ -273,6 +273,24 @@
void
GlobalMemPipeline::issueRequest(GPUDynInstPtr gpuDynInst)
{
+ Wavefront *wf = gpuDynInst->wavefront();
+ if (gpuDynInst->isLoad()) {
+ wf->rdGmReqsInPipe--;
+ wf->outstandingReqsRdGm++;
+ } else if (gpuDynInst->isStore()) {
+ wf->wrGmReqsInPipe--;
+ wf->outstandingReqsWrGm++;
+ } else {
+ // Atomic, both read and write
+ wf->rdGmReqsInPipe--;
+ wf->outstandingReqsRdGm++;
+ wf->wrGmReqsInPipe--;
+ wf->outstandingReqsWrGm++;
+ }
+
+ wf->outstandingReqs++;
+ wf->validateRequestCounters();
+
gpuDynInst->setAccessTime(curTick());
gpuDynInst->profileRoundTripTime(curTick(), InstMemoryHop::Initiate);
gmIssuedRequests.push(gpuDynInst);
diff --git a/src/gpu-compute/local_memory_pipeline.cc
b/src/gpu-compute/local_memory_pipeline.cc
index d441a29..96402c5 100644
--- a/src/gpu-compute/local_memory_pipeline.cc
+++ b/src/gpu-compute/local_memory_pipeline.cc
@@ -120,6 +120,24 @@
void
LocalMemPipeline::issueRequest(GPUDynInstPtr gpuDynInst)
{
+ Wavefront *wf = gpuDynInst->wavefront();
+ if (gpuDynInst->isLoad()) {
+ wf->rdLmReqsInPipe--;
+ wf->outstandingReqsRdLm++;
+ } else if (gpuDynInst->isStore()) {
+ wf->wrLmReqsInPipe--;
+ wf->outstandingReqsWrLm++;
+ } else {
+ // Atomic, both read and write
+ wf->rdLmReqsInPipe--;
+ wf->outstandingReqsRdLm++;
+ wf->wrLmReqsInPipe--;
+ wf->outstandingReqsWrLm++;
+ }
+
+ wf->outstandingReqs++;
+ wf->validateRequestCounters();
+
gpuDynInst->setAccessTime(curTick());
lmIssuedRequests.push(gpuDynInst);
}
diff --git a/src/gpu-compute/scalar_memory_pipeline.cc
b/src/gpu-compute/scalar_memory_pipeline.cc
index 1e296da..bd6d0f5 100644
--- a/src/gpu-compute/scalar_memory_pipeline.cc
+++ b/src/gpu-compute/scalar_memory_pipeline.cc
@@ -140,3 +140,21 @@
computeUnit.cu_id, mp->simdId, mp->wfSlotId);
}
}
+
+void
+ScalarMemPipeline::issueRequest(GPUDynInstPtr gpuDynInst)
+{
+ Wavefront *wf = gpuDynInst->wavefront();
+ if (gpuDynInst->isLoad()) {
+ wf->scalarRdGmReqsInPipe--;
+ wf->scalarOutstandingReqsRdGm++;
+ } else if (gpuDynInst->isStore()) {
+ wf->scalarWrGmReqsInPipe--;
+ wf->scalarOutstandingReqsWrGm++;
+ }
+
+ wf->outstandingReqs++;
+ wf->validateRequestCounters();
+
+ issuedRequests.push(gpuDynInst);
+}
diff --git a/src/gpu-compute/scalar_memory_pipeline.hh
b/src/gpu-compute/scalar_memory_pipeline.hh
index 001436d..b0f4fd8 100644
--- a/src/gpu-compute/scalar_memory_pipeline.hh
+++ b/src/gpu-compute/scalar_memory_pipeline.hh
@@ -64,6 +64,8 @@
std::queue<GPUDynInstPtr> &getGMStRespFIFO() { return returnedStores; }
std::queue<GPUDynInstPtr> &getGMLdRespFIFO() { return returnedLoads; }
+ void issueRequest(GPUDynInstPtr gpuDynInst);
+
bool
isGMLdRespFIFOWrRdy() const
{
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45347
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I5140d3b2f12be582f2ae9ff7c433167aeec5b68e
Gerrit-Change-Number: 45347
Gerrit-PatchSet: 1
Gerrit-Owner: Kyle Roarty <kyleroarty1...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s