CUDA编译器可以选择生成32位或64位PTX.这些有什么区别?对于x86来说,NVidia GPU实际上有32位和64位ISA吗?或者它只与主机代码有关?
指针肯定是最明显的区别.64位机器模型启用64位指针.64位指针可以实现各种功能,例如大于4GB的地址空间和统一的虚拟寻址.统一虚拟寻址反过来启用其他功能,例如GPUDirect Peer-to-Peer.在CUDA IPC API还取决于64位机型.
x64 ISA 与x86 ISA并没有完全不同,它主要是它的扩展.那些熟悉x86 ISA的人会发现x64 ISA很熟悉,在需要时可以自然扩展64位.同样,64位机器模型是PTX ISA功能扩展到64位.大多数PTX指令的工作方式完全相同.
32位机器模型能够处理64种数据类型(如double
和long long
),所以经常出现不需要是正确写入CUDA C/C++源代码编译为32位机器模型或64位计算机模型的任何变化.如果直接在PTX中编程,则可能必须至少考虑指针大小差异.