C++ 适用于CUDA的x64与x86

C++ 适用于CUDA的x64与x86,c++,cuda,emgucv,managed-cuda,C++,Cuda,Emgucv,Managed Cuda,在这个线程中有一个关于寄存器耗尽的问题。我印象中英伟达在CUDA 7.5和之后已经放弃了对X86的支持。这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器继续前进?未来的工作方式是减少线程/块 这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器继续前进 对。x64模式下的所有指针都需要2个32位寄存器进行存储 未来的工作方式是减少线程/块 当然,应该不会影响可以启动的块的数量。关于线程,是的,每个块的线程数可能会受到影响,因为每个块的线程数与每个线程的寄存器数的乘积必须低

在这个线程中有一个关于寄存器耗尽的问题。我印象中英伟达在CUDA 7.5和之后已经放弃了对X86的支持。这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器继续前进?未来的工作方式是减少线程/块

这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器继续前进

对。x64模式下的所有指针都需要2个32位寄存器进行存储

未来的工作方式是减少线程/块

当然,应该不会影响可以启动的块的数量。关于线程,是的,每个块的线程数可能会受到影响,因为每个块的线程数与每个线程的寄存器数的乘积必须低于机器限制,但正如我在回答您链接的问题时所述,对线程的限制通常可以使用这里提到的几种方法中的一种来解决。许多内核不会受到影响,因为它们没有达到极限。对于那些不受限制的内核,有一些成熟的技术可以减轻这种影响,并允许您在每个块上运行所需数量的线程,最多1024个

最终,这意味着所提出的问题与其说是能力问题,不如说是性能优化问题,性能优化问题将永远存在

这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器继续前进

对。x64模式下的所有指针都需要2个32位寄存器进行存储

未来的工作方式是减少线程/块

当然,应该不会影响可以启动的块的数量。关于线程,是的,每个块的线程数可能会受到影响,因为每个块的线程数与每个线程的寄存器数的乘积必须低于机器限制,但正如我在回答您链接的问题时所述,对线程的限制通常可以使用这里提到的几种方法中的一种来解决。许多内核不会受到影响,因为它们没有达到极限。对于那些不受限制的内核,有一些成熟的技术可以减轻这种影响,并允许您在每个块上运行所需数量的线程,最多1024个


最终,这意味着所提出的问题与其说是性能问题,不如说是性能优化问题,性能优化问题将始终存在。

在64位平台上,CUDA使用64位通用指针。在某些有限的情况下,编译器可以确定指针始终特定于已知小于4 GB的特定内存空间,尤其是共享内存,并且可以使用32位特定于内存空间的指针进行优化。我不确定这种优化是否在实践中发生;我隐约记得曾见过这样的例子。唯一确定的方法是检查机器代码SASS。在64位平台上,CUDA使用64位通用指针。在某些有限的情况下,编译器可以确定指针始终特定于已知小于4 GB的特定内存空间,尤其是共享内存,并且可以使用32位特定于内存空间的指针进行优化。我不确定这种优化是否在实践中发生;我隐约记得曾见过这样的例子。唯一确定的方法是检查机器代码SASS。