我对网格中的控制线程块有疑问。
我的来源是图像上的递归作业。但在处理过程中,许多块满足结束条件的次数约为 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 */
}
}