是否有CUDA的汇编语言?

时间:2011-09-08 19:03:23

标签: assembly cuda

我问这个是因为我知道有办法使用二进制文件而不是源文件。

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

3 个答案:

答案 0 :(得分:31)

您可能想看看PTX。 NVIDIA在CUDA 4.0文档中提供了描述它的文档。

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

NVIDIA将PTX描述为“Ta低级并行线程执行虚拟机和指令集架构(ISA).PTX将GPU暴露为数据并行计算设备。”不完全像x86程序集,但你可能会发现它很有趣。

答案 1 :(得分:17)

实际上有两种不同的CUDA汇编语言。

PTX是一种与机器无关的汇编语言,可编译为SASS,即在特定GPU系列上执行的实际操作码。如果您构建.cubins,那么您正在处理SASS。大多数CUDA运行时应用程序都使用PTX,因为这使它们能够在原始应用程序之后发布的GPU上运行。

此外,如果您的目标是sm_20(Fermi / GTX 400系列),函数指针已经在CUDA中使用了一段时间。

答案 2 :(得分:13)

是的,GPU上的程序集与CPU完全不同。 其中一个不同之处在于GPU的指令集未标准化。 NVidia(以及AMD和其他GPU供应商)可以并且确实将他们的指令集从一个GPU模型更改为下一个GPU模型。

因此CUDA不公开汇编语言。没有意义。 (而且CUDA的C语言中的限制,以及它们支持的其他语言,都是因为GPU硬件的限制,不仅仅是因为Nvidia讨厌你并想要惹恼你。所以即使你有直接访问底层指令集和汇编语言,你将无法神奇地做你现在不能做的事情。

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