【问题标题】:CUDA: Maximum number of blocks in a grid != CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X?CUDA:网格中的最大块数!= 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 是错误的常数是正确的。但是什么值才是正确的值呢?

标签: cuda


【解决方案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 的代码。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2013-07-13
    • 1970-01-01
    • 2011-07-01
    • 2013-05-14
    • 1970-01-01
    • 2019-07-09
    • 2015-07-25
    • 2018-12-31
    相关资源
    最近更新 更多