グリッド内の制御スレッド ブロックについて質問があります。
私のソースは、画像の再帰的な仕事です。しかし、処理中、多くのブロックが約 8 回終了条件を満たしました。実行が 16 回以上ループする原因となったブロックはごくわずかでした。そこで、実行終了条件を満たしたブロックをスキップしたい。
可能です?
__global__ main(){
/* previous */
int *blockMap;
cudaMalloc((void**)&blockMap, sizeof(int) * nXBlockNum * nYBlockNum);
cudaMemset((void**)&blockMap, 0, sizeof(int) * nXBlockNum * nYBlockNum);
kernel<<<nblocks, nthreads>>>(inputimage, outputbuffer, blockmap);
/* after */}
__global__
kernel(byte* inputeimage, byte* outputbuffer, int* blockmap) {
__shared__ int *skipFlag;
if((blockDim.x * threadIdx.y + threadIdx.x) == 0)
{
*skipFlag = g_bMap[blockIdx.y * gridDim.x + blockIdx.x];
}
if(*skipFlag == 0)
{
/* recursive job */
}
}