CUDA有汇编语言吗?

25

我之所以问这个问题是因为我知道可以使用二进制文件代替源文件。

此外,我猜想使用汇编语言模拟函数指针会更容易。除非GPU上的汇编语言与CPU上的汇编语言完全不同。


C语言在CUDA中有什么问题吗?http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf - user195488
5
几周前在回答“是否可以将指令放入CUDA代码中?”(https://dev59.com/DlDTa4cB1Zd3GeqPIl0W#7072079)时进行了回答。请注意,这不是被接受的答案,而是稍后提供的一个答案。 - dmckee --- ex-moderator kitten
@dmckee +1。自 CUDA 3.2(和2.0设备)开始,支持无需干预PTX的函数指针。而旧设备根本没有设备函数这样的东西——从内核对__device__函数的所有调用都是内联的。 - aland
可能是如何创建或操作GPU汇编程序?的重复问题。 - Ciro Santilli OurBigBook.com
3个回答

35

你可能想要了解一下PTX。NVIDIA在CUDA 4.0文档中提供了相关说明。

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA将PTX描述为“一种低级并行线程执行虚拟机和指令集架构(ISA)。PTX将GPU公开为数据并行计算设备。”虽然不完全像x86汇编语言,但你可能会发现它很有趣。


18
值得指出的是,PTX是一种虚拟指令集。每个不同的NVIDIA架构都有自己的物理ISA,而PTX的目标就是这些ISA。类似于内联x86汇编语言,人们可以将PTX指令嵌入到CUDA代码中。 - Jared Hoberock

21
事实上,有两种不同的CUDA汇编语言。
PTX是一种机器无关的汇编语言,它被编译成SASS,即在特定GPU族群上执行的实际操作码。如果您构建.cubins,则处理的是SASS。大多数CUDA运行时应用程序使用PTX,因为这使它们能够在原始应用程序发布之后的GPU上运行。
此外,如果您针对sm_20(Fermi / GTX 400系列)进行目标设置,则CUDA中已经有了函数指针。

17

是的,GPU的汇编语言与CPU完全不同。其中一个区别在于GPU的指令集不是标准化的。NVidia(以及AMD和其他GPU供应商)可以并且确实会从一个GPU型号到另一个型号更改其指令集。

因此,CUDA不公开汇编语言。这没有意义。(而CUDA的C方言和其他支持的语言中的限制存在于GPU硬件的限制之下,而不仅仅是因为Nvidia讨厌你并想惹恼你。因此,即使你直接访问底层指令集和汇编语言,也不能神奇地做出现在做不到的事情。

(请注意,NVidia确实定义了一个“虚拟”指令集,您可以在代码中使用并嵌入其中。但它并不是指令集,也不能直接映射到硬件指令。它只是一种看起来像汇编方言的简单编程语言)


1
哦!好的,知道了……如果我甚至不能期望那段代码在不同的GPU上运行,那肯定是错误的方法!谢谢。 - widgg
1
你的CUDA代码可以在不同的GPU上正常工作。CUDA只是将其编译为每个GPU的适当目标。 - jalf

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