【问题标题】:What is the maximum block count possible in CUDA?CUDA 中可能的最大块数是多少?
【发布时间】:2012-03-23 14:37:14
【问题描述】:

理论上,网格的每个维度可以有 65535 个块,最大为 65535 * 65535 * 65535。

如果你这样调用内核:

kernel<<< BLOCKS,THREADS >>>()

(没有 dim3 个对象),可用于 BLOCKS 的最大数量是多少?

在我的一个应用程序中,我将其设置为 192000 并且似乎工作正常...问题是我使用的内核更改了一个巨大数组的内容,所以虽然我检查了数组的某些部分看起来还不错,我不确定内核在其他部分是否表现异常。

我有一个 2.1 GPU,GTX 500 ti。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    使用 3.0 或更高版本的计算能力,您在 x 维度上最多可以有 2^31 - 1 个块,在 y 和 z 维度上最多可以有 65535 个块。见表 H.1。 CUDA C Programming Guide Version 9.1 的每个计算能力的功能支持。

    正如 Pavan 指出的那样,如果您不为网格配置提供 dim3,则只会使用 x 维度,因此此处适用每维度限制。

    【讨论】:

    • 可能很高兴提到没有 dim3 的 BLOCKS 仅指定您想要沿 x 维度的块数,因此限制仍然是 65535
    • 我知道每个维度最多可以使用那么多块,我也将它写到我的问题中。问题是,当您按照我展示的方式调用内核时,最大块数是多少?是 65535 还是 65535^3?
    • 好的,帕万,谢谢!我们知道吗,如果您放置的块数超过可用块数,会发生什么?因为它似乎工作得很好
    • @STE 你发现错误了吗?启动内核后 cudaGetErrorString(cudaGetLastError()) 将返回“无效的启动配置”或类似的东西
    • @perreal:确实,它们没有签名;我的意思是int 符合最大可能值。
    【解决方案2】:

    如果有人根据谷歌搜索登陆这里(就像我刚才所做的那样):

    自从提出这个问题以来,Nvidia 更改了规范。在计算能力 3.0 和更高版本中,线程块网格的 x-Dimension 允许最大为 2'147'483'6472^31 - 1 .

    查看当前:Technical Specification

    【讨论】:

      【解决方案3】:

      65535 在一个维度上。这是完整的table

      【讨论】:

        【解决方案4】:

        我在笔记本电脑 (MX130) 上手动检查,当 #blocks > 678*1024+651 时程序崩溃。每个带有 1 个线程的块,即使再添加一个块也会产生 SegFault。内核代码没有网格,只有线性结构。

        【讨论】:

          猜你喜欢
          • 2011-01-26
          • 2011-12-20
          • 1970-01-01
          • 2019-02-05
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          • 2011-06-01
          • 2020-12-19
          相关资源
          最近更新 更多