CUDA内联PTX代码的语法

时间:2012-07-18 16:38:14

标签: cuda ptx

正如Nvidia的Inline PTX Assembly文档所述,使用内联汇编的语法是: asm("temp_string" : "constraint"(output) : "constraint"(input));
这是两个例子:
asm("vadd.s32.s32.s32 %0, %1.h0, %2.h0;" : "=r"(v) : "r"(a), "r"(b));
asm("vadd.u32.u32.u32 %0.b0, %1, %2, %3;" : "=r"(v) : "r"(a), "r"(b), "r"(z));
在这两个示例中,都有以下参数:h0b0跟随%n。我浏览了CUDA的官方文档,没有发现任何关于h0b0含义的问题。我见过h0h1b0b1b2b3。我猜h0h1表示16位值,而bn表示字节值。有人知道这些的确切含义吗?

感谢Roger Dahl的帮助。我读了PTX ISA 3.0并找到了答案 “h”表示半字。 h0表示32位字的低半字。 h1表示32位字的高半字。 “b”表示整数字节。 b0b1b2b3代表32位字的第一个8位,第二个8位,第三个8位和最高8位。

1 个答案:

答案 0 :(得分:2)

vadd是PTX附带的视频特定说明之一。完整的PTX ISA的描述包含在CUDA发行版中。在我的机器上,它位于C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\doc\ptx_isa_3.0.pdfh0h1b0等指示符的说明位于8.7.11 Video Instructions部分。它们表示不同的隐式移位/掩码操作(请参阅optMerge函数)。