这是我的代码:
int threadNum = BLOCKDIM/8;
dim3 dimBlock(threadNum,threadNum);
int blocks1 = nWidth/threadNum + (nWidth%threadNum == 0 ? 0 : 1);
int blocks2 = nHeight/threadNum + (nHeight%threadNum == 0 ? 0 : 1);
dim3 dimGrid;
dimGrid.x = blocks1;
dimGrid.y = blocks2;
// dim3 numThreads2(BLOCKDIM);
// dim3 numBlocks2(numPixels/BLOCKDIM + (numPixels%BLOCKDIM == 0 ? 0 : 1) );
perform_scaling<<<dimGrid,dimBlock>>>(imageDevice,imageDevice_new,min,max,nWidth, nHeight);
cudaError_t err = cudaGetLastError();
cudasafe(err,"Kernel2");
这是我的第二个内核的执行过程,它在数据使用方面是完全独立的。BLOCKDIM
为512,nWidth和nHeight
也为512,cudasafe
仅仅打印错误代码的相应字符串信息。在内核调用之后,代码的这一部分会给出配置错误。
可能是什么导致了这个错误呢?有什么想法吗?
deviceQuery
cuda示例将提供有关总限制和每个维度限制的信息。但无论每个维度的限制如何,实际的总乘积都不能超过1024的总限制,或者适用于您的设备的其他限制值。 - Robert Crovella