CUDA:网格中的最大块数!= CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X?
Posted
技术标签:
【中文标题】CUDA:网格中的最大块数!= CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X?【英文标题】:CUDA: Maximum number of blocks in a grid != CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X? 【发布时间】:2013-11-07 05:47:14 【问题描述】:我想以这种方式启动内核:
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。我哪里错了?
【问题讨论】:
所以你怀疑什么是 CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X ?还是别的什么? 我正在寻找最大值。当我以上面显示的方式调用它时,我可以分配给内核的块数(仅使用一个维度)。根据 API CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X 是“块的最大 x 维度”,这似乎是指我可以分配给一个块的维度的最大线程数。因此,这可能不是我要找的号码。 所以 CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X 是错误的常数是正确的。但是什么值才是正确的值呢? 【参考方案1】:参考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。(True for all cc 1.x devices.)
如果您收到其他号码,则您用于检索此数据的代码有问题(您没有显示),或者您的机器设置有问题。
尝试运行并检查 CUDA 驱动程序 API deviceQuery sample 的代码。
【讨论】:
以上是关于CUDA:网格中的最大块数!= CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X?的主要内容,如果未能解决你的问题,请参考以下文章
为啥允许我运行块数超过 GPU 的 CUDA 核心数的 CUDA 内核?