2016-02-12 121 views

回答

3

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

是。所有在x64模式下的指针都需要2个(32位)寄存器来存储。

而且可能更少的线程/块将是事情继续前进的方式吗?

当然,应该不会影响可启动块的数量。关于线程,是的,每块可能会对线程产生影响(因为每块启动的线程数乘以每个线程的寄存器数必须低于机器限制),但正如我在回答你所链接的问题时所说的那样,通常可以使用上面提到的几种方法之一来解决线程上的限制。许多内核不会受到影响,因为它们没有“超出限制”。对于那些“超出限制”的内核,有很好的技术可以缓解这种影响,并允许您为每个块运行所需数量的线程,最高可达1024.

最终,这意味着所呈现的问题不是性能之一,因为它是性能优化之一,哪个问题将始终存在。

+0

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