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

Reply via email to