"invalid configuration argument " error for the call of CUDA kernel?
cuda
Solution
This type of error message frequently refers to the launch configuration parameters (grid/threadblock dimensions in this case, could also be shared memory, etc. in other cases). When you see a message like this it's a good idea just to print out your actual config parameters before launching the kernel, to see if you've made any mistakes.
You said `BLOCKDIM` = 512. You have `threadNum = BLOCKDIM/8` so `threadNum` = 64. Your threadblock configuration is:
dim3 dimBlock(threadNum,threadNum);
So you are asking to launch blocks of 64 x 64 threads, that is 4096 threads per block. That won't work on any generation of CUDA devices. All current CUDA devices are limited to a maximum of 1024 threads per block, which is the product of the 3 block dimensions.
Maximum dimensions are listed in a table of the CUDA programming guide, and also available via the `deviceQuery` CUDA sample code.
Problem
Here is my code: ``` 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"); ``` This is the execution of my second kernel and it is fully independent in term of the usage of data. `BLOCKDIM` is 512 , `nWidth and nHeight` are 512 too and `cudasafe` simply prints the corresponding string message of the error code. This section of the code gives configuration error just after the kernel call. What might give this error, any idea?