x64允许每个块比Win32更less的线程?

当我执行一些cuda内核时,我注意到对于我自己的cuda内核来说,x64编译会导致失败,而Win32则不会。

我很困惑,因为cuda的源代码是相同的,并build立是好的。 只是当x64执行时,它表示它要求太多资源启动。 但是在概念上,x64不应该比Win32允许更多的资源吗?

如果可能的话,我通常喜欢每个块使用1024个线程。 所以要使x64代码工作,我必须将块缩小到256。

任何人有任何想法?

Solutions Collecting From Web of "x64允许每个块比Win32更less的线程?"

是的,这是可能的。 据推测,你所说的问题是每线程注册的问题 。

在32位模式下,所有指针都是32位,并且只需要一个32位寄存器来存储在GPU上。 使用完全相同的源代码,这些指针将需要64位的存储空间,因此实际上需要两个32位寄存器(而@njuffa指出,某些其他类型也可以改变它们的大小, 。)可用32位寄存器的数量是一个硬件限制,不管是编译为32位还是64位模式都不会改变,但指针存储在64位模式下将使用两倍的寄存器。

指针运算(或涉及任何类型的大小增加的运算)可能同样受到影响,因为有些运算可能需要使用64位算法与32位算法完成。

如果这些每线程寄存器以64位模式增加,则总体使用率超出限制,那么您将不得不使用其中一种方法来管理它。 你已经提到了一个:减少线程的数量。 您也可以调查nvcc -maxrregcount ... 开关和/或启动界限指令 。