CUDA/PTX 32位与64位的区别

6

CUDA编译器有生成32位或64位PTX的选项。这两者之间有什么区别?它是否像x86一样,NVidia GPU实际上有32位和64位ISA?还是只与主机代码相关?


http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#sixtyfour-bit-compatibility - Sagar Masuti
+Sagar Masuti:我看过这个,但对我的问题没有什么帮助。 - zlatanski
1个回答

7

指针显然是最明显的区别。 64位机器模型使64位指针成为可能。 64位指针可以实现许多功能,例如比4GB更大的地址空间和统一虚拟寻址。 而统一虚拟寻址则可以实现其他功能,例如GPUDirect点对点通信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中编程,则可能需要考虑指针大小差异

新设备(比如Kepler类)都是64位的吗?还是有混合的情况?如果有一款64位设备,为什么我要在32位模式下使用它?在x86与x64之间,存在指针大小的问题,因此某些进程会占用更多的内存。Cuda是否也存在这个问题?或者我应该始终使用64位并忘记这个问题? - zlatanski
所有新设备都支持32位或64位机器模型。一些旧设备仅支持32位模型。在许多方面,64位模式更好,原因如我在答案中所述。我能想到使用32位模式的唯一原因是某些代码在64位模式下可能运行较慢,例如由于64位指针算术。个人而言,我总是会使用64位模式并忘记32位模式。对于某些操作系统来说,已经不再支持32位。是的,64位代码可能编译成更大的尺寸。 - Robert Crovella
谢谢 - 这正是我所期望的答案。 - zlatanski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接