我之所以问这个问题是因为我知道可以使用二进制文件代替源文件。
此外,我猜想使用汇编语言模拟函数指针会更容易。除非GPU上的汇编语言与CPU上的汇编语言完全不同。
你可能想要了解一下PTX。NVIDIA在CUDA 4.0文档中提供了相关说明。
http://developer.nvidia.com/nvidia-gpu-computing-documentation
NVIDIA将PTX描述为“一种低级并行线程执行虚拟机和指令集架构(ISA)。PTX将GPU公开为数据并行计算设备。”虽然不完全像x86汇编语言,但你可能会发现它很有趣。
是的,GPU的汇编语言与CPU完全不同。其中一个区别在于GPU的指令集不是标准化的。NVidia(以及AMD和其他GPU供应商)可以并且确实会从一个GPU型号到另一个型号更改其指令集。
因此,CUDA不公开汇编语言。这没有意义。(而CUDA的C方言和其他支持的语言中的限制存在于GPU硬件的限制之下,而不仅仅是因为Nvidia讨厌你并想惹恼你。因此,即使你直接访问底层指令集和汇编语言,也不能神奇地做出现在做不到的事情。
(请注意,NVidia确实定义了一个“虚拟”指令集,您可以在代码中使用并嵌入其中。但它并不是指令集,也不能直接映射到硬件指令。它只是一种看起来像汇编方言的简单编程语言)
__device__
函数的所有调用都是内联的。 - aland