调用 CUDA 内核时出现“无效配置参数”错误

“invalid configuration argument” error when calling CUDA kernel

我有 GeForce 620M,我的代码是:

int threadsPerBlock = 256;                  
int blocksPerGrid = Number_AA_GPU / threadsPerBlock; 
for(it=0;it<Number_repeatGPU;it++)
{
    Kernel_Update<<<blocksPerGrid,threadsPerBlock>>>(A, B, C, D, rand(), rand());     
}

我得到:

invalid configuration argument.

可能是什么原因?

内核配置参数是 <<<...>>> 符号之间的参数。

您的 GeForce 620M 是 compute capability 2.1 设备。

计算能力 2.1 设备 is limited to 65535 当您为每个网格参数块传递一维参数时(您传递的两个参数中的第一个。)

由于你传递的另一个参数(256,threadsPerBlock)肯定是在范围内,我断定你的第一个参数是在范围外:

int blocksPerGrid = Number_AA_GPU / threadsPerBlock; 

Number_AA_GPU 要么大于 65535*256(大于或等于 65536*256 会触发失败),要么为零(实际上 Number_AA_GPU 小于 256 会失败,因为整数除法),或者是负数。

以后如果你提供一个完整的例子,你可以写出更容易理解的问题。在这种情况下,告诉我们 Number_AA_GPU 是什么可以使我的答案更加明确。