调用 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
是什么可以使我的答案更加明确。
我有 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
是什么可以使我的答案更加明确。