fix illegal memory access in CUDA tile sort key building 09/5109/1
authorJim Phillips <jim@ks.uiuc.edu>
Fri, 19 Apr 2019 21:54:06 +0000 (16:54 -0500)
committerJim Phillips <jim@ks.uiuc.edu>
Fri, 19 Apr 2019 21:54:06 +0000 (16:54 -0500)
Catch out of range min and max in fillSortKeys kernel in cases
where patches are empty and hence min and max are not updated
from their initialized values of maxTileListLen+1 and 0.

Change-Id: I4b8d9e0cd75e81e456d764029a99b7c8c9100152

src/CudaTileListKernel.cu

index b8a7c94..2d3527e 100644 (file)
@@ -197,6 +197,11 @@ __global__ void fillSortKeys(const int numComputes, const int maxTileListLen,
     int minlen = minmax.x;
     int maxlen = minmax.y;
     // minlen, maxlen are in range [1 ... maxTileListLen]
+    // as long as i is in tileListsSrc[].icompute above
+    if ( maxlen < minlen ) {
+      minlen = 1;
+      maxlen = maxTileListLen;
+    }
     unsigned int minKey = sortKeys[i*maxTileListLen + minlen-1];
     unsigned int maxKey = sortKeys[i*maxTileListLen + maxlen-1];
     unsigned int aveKey = (maxKey + minKey)/2;