gpu-compute: Refactoring Wavefront::dynWaveId
authorAlexandru Dutu <alexandru.dutu@amd.com>
Fri, 16 Sep 2016 16:31:46 +0000 (12:31 -0400)
committerAlexandru Dutu <alexandru.dutu@amd.com>
Fri, 16 Sep 2016 16:31:46 +0000 (12:31 -0400)
src/arch/hsail/gen.py
src/gpu-compute/compute_unit.cc
src/gpu-compute/wavefront.cc
src/gpu-compute/wavefront.hh

index 22832658f9f05caa0a15f6ffa3f5f1b0430d5b0e..92fc5c5108063af78128d7dd5852244b01234cb2 100755 (executable)
@@ -755,7 +755,7 @@ gen_special('GridSize', 'w->gridSz[src0]')
 gen_special('GridGroups',
     'divCeil(w->gridSz[src0],w->workGroupSz[src0])')
 gen_special('LaneId', 'lane')
-gen_special('WaveId', 'w->dynWaveId')
+gen_special('WaveId', 'w->wfId')
 gen_special('Clock', 'w->computeUnit->shader->tick_cnt', 'U64')
 
 # gen_special('CU'', ')
index 32fa3bd6a4bcd3d69c10c1947b80a56309f6fd6c..b937584eb8d46d1033b6a18d797bbd2d005f4a32 100644 (file)
@@ -221,7 +221,7 @@ ComputeUnit::updateEvents() {
 
 void
 ComputeUnit::StartWF(Wavefront *w, int trueWgSize[], int trueWgSizeTotal,
-                     int cnt, LdsChunk *ldsChunk, NDRange *ndr)
+                     int waveId, LdsChunk *ldsChunk, NDRange *ndr)
 {
     static int _n_wave = 0;
 
@@ -232,20 +232,20 @@ ComputeUnit::StartWF(Wavefront *w, int trueWgSize[], int trueWgSizeTotal,
     init_mask.reset();
 
     for (int k = 0; k < wfSize(); ++k) {
-        if (k + cnt * wfSize() < trueWgSizeTotal)
+        if (k + waveId * wfSize() < trueWgSizeTotal)
             init_mask[k] = 1;
     }
 
     w->kernId = ndr->dispatchId;
-    w->dynWaveId = cnt;
+    w->wfId = waveId;
     w->initMask = init_mask.to_ullong();
 
     for (int k = 0; k < wfSize(); ++k) {
-        w->workItemId[0][k] = (k+cnt*wfSize()) % trueWgSize[0];
+        w->workItemId[0][k] = (k + waveId * wfSize()) % trueWgSize[0];
         w->workItemId[1][k] =
-            ((k + cnt * wfSize()) / trueWgSize[0]) % trueWgSize[1];
+            ((k + waveId * wfSize()) / trueWgSize[0]) % trueWgSize[1];
         w->workItemId[2][k] =
-            (k + cnt * wfSize()) / (trueWgSize[0] * trueWgSize[1]);
+            (k + waveId * wfSize()) / (trueWgSize[0] * trueWgSize[1]);
 
         w->workItemFlatId[k] = w->workItemId[2][k] * trueWgSize[0] *
             trueWgSize[1] + w->workItemId[1][k] * trueWgSize[0] +
@@ -294,8 +294,8 @@ ComputeUnit::StartWF(Wavefront *w, int trueWgSize[], int trueWgSizeTotal,
     // is this the last wavefront in the workgroup
     // if set the spillWidth to be the remaining work-items
     // so that the vector access is correct
-    if ((cnt + 1) * wfSize() >= trueWgSizeTotal) {
-        w->spillWidth = trueWgSizeTotal - (cnt * wfSize());
+    if ((waveId + 1) * wfSize() >= trueWgSizeTotal) {
+        w->spillWidth = trueWgSizeTotal - (waveId * wfSize());
     } else {
         w->spillWidth = wfSize();
     }
@@ -341,7 +341,7 @@ ComputeUnit::StartWorkgroup(NDRange *ndr)
 
     // calculate the number of 32-bit vector registers required by wavefront
     int vregDemand = ndr->q.sRegCount + (2 * ndr->q.dRegCount);
-    int cnt = 0;
+    int wave_id = 0;
 
     // Assign WFs by spreading them across SIMDs, 1 WF per SIMD at a time
     for (int m = 0; m < shader->n_wf * numSIMDs; ++m) {
@@ -352,7 +352,7 @@ ComputeUnit::StartWorkgroup(NDRange *ndr)
         if (w->status == Wavefront::S_STOPPED) {
             // if we have scheduled all work items then stop
             // scheduling wavefronts
-            if (cnt * wfSize() >= trueWgSizeTotal)
+            if (wave_id * wfSize() >= trueWgSizeTotal)
                 break;
 
             // reserve vector registers for the scheduled wavefront
@@ -365,8 +365,8 @@ ComputeUnit::StartWorkgroup(NDRange *ndr)
             w->reservedVectorRegs = normSize;
             vectorRegsReserved[m % numSIMDs] += w->reservedVectorRegs;
 
-            StartWF(w, trueWgSize, trueWgSizeTotal, cnt, ldsChunk, ndr);
-            ++cnt;
+            StartWF(w, trueWgSize, trueWgSizeTotal, wave_id, ldsChunk, ndr);
+            ++wave_id;
         }
     }
     ++barrier_id;
index 3deb11961104242b788d14b870c932e9e684ae06..c2356b47fb683b4b5ec699e8244d46b9acf2722b 100644 (file)
@@ -935,7 +935,7 @@ Wavefront::pc(uint32_t new_pc)
 uint32_t
 Wavefront::getStaticContextSize() const
 {
-    return barCnt.size() * sizeof(int) + sizeof(dynWaveId) + sizeof(maxBarCnt) +
+    return barCnt.size() * sizeof(int) + sizeof(wfId) + sizeof(maxBarCnt) +
            sizeof(oldBarrierCnt) + sizeof(barrierCnt) + sizeof(wgId) +
            sizeof(computeUnit->cu_id) + sizeof(barrierId) + sizeof(initMask) +
            sizeof(privBase) + sizeof(spillBase) + sizeof(ldsChunk) +
index 20007bd83088c84b5f9d9df91fe928d4288a2422..8caeda91e75f87b50f91139e8835213d3a37fdfd 100644 (file)
@@ -194,7 +194,8 @@ class Wavefront : public SimObject
     uint32_t gridSz[3];
     uint32_t wgId;
     uint32_t wgSz;
-    uint32_t dynWaveId;
+    // wavefront id within a workgroup
+    uint32_t wfId;
     uint32_t maxDynWaveId;
     uint32_t dispatchId;
     // outstanding global+local memory requests