是否有CUDA的汇编语言?

wid*_*dgg 17 assembly cuda

我问这个是因为我知道有一种方法可以使用二进制文件而不是源文件.

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

Pat*_*k87 32

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

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

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

  • 值得指出的是,PTX是一个虚拟指令集.每个不同的NVIDIA架构都有自己的物理ISA,PTX的目标.与内联x86 asm类似,可以将PTX指令内联到CUDA代码中. (11认同)

Chr*_*isV 17

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

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

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


jal*_*alf 14

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

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

(请注意,有NVIDIA并定义,你可以用在你的代码中嵌入一个"虚拟"的指令集,但它不是指令集,它不直接映射到硬件指令,它比简单的编程语言,多一点"看起来像"集会的方言