0

我想以这种方式启动内核:

kernel_code<<<NUMBER_BLOCKS, NUMBER_THREADS_PER_BLOCK>>> (param1, param2, param3, param4);

因此,仅使用网格的 x 维。我想用尽可能多的块来调用内核。我以为最大。一维网格中的块数为 65535。

但是,我探索了CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X听起来与我想找出的数字完全相同的常数。然而,这个常数在我的 GeForce 210 (CUDA 1.2) 上返回 1899336。我怎么了?

4

1 回答 1

2

参考cuDeviceGetAttribute的驱动 API 文档,给出网格 x 方向上最大块数的参数是:

• CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X:网格的最大 x 维度;

正如您所猜测的,您指示的参数给出了一个块中的最大线程数(x 维度):

•CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X:块的最大x维度;

GeForce 210上,该MAX_GRID_DIM_X参数应为 65535。(对于所有 cc 1.x 设备都是如此。

如果您收到其他号码,则您用于检索此数据的代码有问题(您没有显示),或者您的机器设置有问题。

尝试运行并检查 CUDA 驱动程序 API deviceQuery 示例的代码。

于 2013-10-29T01:42:09.127 回答