NVCC 生成的 PTX 代码对寄存器非常慷慨,这有什么坏处吗?

Nie*_*oom 0 optimization cuda instruction-set ptx

我最近通读了 CUDA 内核生成的 PTX 代码。我意识到许多寄存器仅用于存储中间值,然后就不再使用,并且 NVCC 通常似乎不太关心寄存器的重用,而是选择在几乎任何新数据点都使用新寄存器被建造。

这就提出了一个问题,是否值得手动检查 PTX 代码并尝试最大限度地减少寄存器的使用,或者 PTX VM 在运行时是否会处理这些事情?

tal*_*ies 5

\n

这就提出了一个问题,是否值得手动检查 PTX 代码并尝试尽量减少寄存器的使用

\n
\n

不会。Nvcc 故意生成静态单赋值代码。

\n
\n

还是 PTX VM 在运行时处理的事情?

\n
\n

不存在 \xe2\x80\x9cPTX VM\xe2\x80\x9d 这样的东西。PTX 始终被编译成在硬件上运行的着色器汇编器。寄存器分配和使用优化由 PTX 代码的汇编器静态完成,该代码可以是 nvcc 调用的一部分,也可以在运行时由 GPU 驱动程序本身完成。

\n