gpt4 book ai didi

cuda - 内核故障: invalid configuration argument

转载 作者:行者123 更新时间:2023-12-02 01:46:03 24 4
gpt4 key购买 nike

我对我的代码以及是否可以在当前设备上运行它有疑问。基本上,我想做 3D 插值。当我启动插值内核时,出现以下错误:内核失败:配置参数无效

我看到了in this discussion如果调用太多线程或 block ,就会发生这种情况,但我不确定我的代码中是否是这种情况。有人可以看一下并告诉我出了什么问题吗?

这是我如何调用我的内核:

dim3 blockSize(6,6,6);

dim3 threadSize(dimX/blockSize.x,dimY/blockSize.y,dimZ/blockSize.z);

d_interpolate_kernel<<<blockSize,threadSize>>>(output,dimX,dimY,dimZ);

我的尺寸是dimX = 54或108,dimY=dimX=42或84。所以我有 blockSize(6,6,6) 和 threadSize(9,7,7) 或 (18,14,14)。

我的卡具有以下功能:

MAX_BLOCK_DIM_X = 512
MAX_BLOCK_DIM_Y = 512
MAX_BLOCK_DIM_Z = 64

MAX_GRID_DIM_X = 65535
MAX_GRID_DIM_Y = 65535
MAX_GRID_DIM_Z = 1

我收到错误是因为 MAX_GRID_DIM_Z 为 1 吗?如果是,有办法解决这个问题吗?

谢谢!

最佳答案

一个问题是您在内核调用中颠倒了 blockSizethreadSize 变量。

你想要这样的东西:

d_interpolate_kernel<<<threadSize,blockSize>>>(output,dimX,dimY,dimZ);

第一个配置参数是以 block 为单位的网格大小

第二个配置参数是线程中的 block 的大小

由于您将它们颠倒了,因此您的 (18,14,14) 值不是可接受的 block 大小(线程太多),因为每个 block 的最大线程数为 512(对于 cc1.x)或 1024(否则) ,而 18x14x14 = 3528。

对我来说,threadSize 是一个令人困惑的名字。我会把它称为 gridSize 或类似的名称。

您指出的第二个问题是,对于 cc1.x 卡(这似乎是您所拥有的),您的 Z 网格尺寸必须为 1。至少对于您的 42 情况,您可以通过重新修复此问题- 构造线程 block 的维度为(2,2,42),网格的维度为(27,21,1)。

否则,这些索引只是任意的编号方案。如果您想要的话,您可以使用 (6, 6, 6) block 大小来设计一个覆盖所有 3D 体积的 2D 网格。您只需要发挥创意,如何在插值内核中映射 blockIdx.xblockIdx.y 内置变量,即可模拟 3D 网格。

关于cuda - 内核故障: invalid configuration argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com