理论上,每个网格的直径可以有65535个块,最多65535 * 65535 * 65535。
我的问题是:如果你调用这样的内核kernel<<< BLOCKS,THREADS >>>()
(没有dim3对象),BLOCKS可用的最大数量是多少?
在我的应用程序中,我将其设置为192000并且似乎工作正常...问题是我使用的内核更改了一个巨大的数组的内容,所以虽然我检查了数组的某些部分看起来很好,我无法确定内核在其他部分是否表现得很奇怪。
为了记录,我有一个2.1 GPU,GTX 500 ti。
答案 0 :(得分:12)
如果计算能力为3.0或更高,则x维度中最多可包含2 ^ 32 - 1个块,y和z维度最多可包含65535个块。见表H.1。每个计算功能支持CUDA的能力C Programming Guide Version 9.1。
正如Pavan所指出的,如果你没有为网格配置提供dim3,你将只使用x维度,因此每个维度限制适用于此。
答案 1 :(得分:10)
如果有人根据谷歌搜索登陆这里(就像我刚才那样):
自问这个问题以来,Nvidia改变了规范。使用3.0及更高版本的计算能力,允许线程块网格的x维度达到 2'147'483'647 或 2 ^ 31 - 1
答案 2 :(得分:2)
65535。这是完整的table
答案 3 :(得分:0)
我在笔记本电脑(MX130)上手动检查,#blocks> 678 * 1024 + 651时程序崩溃。每个带有1个线程的块,甚至再添加一个块都会产生SegFault。内核代码没有网格,只有线性结构。