正如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));
在这两个示例中,都有以下参数:h0
或b0
跟随%n
。我浏览了CUDA的官方文档,没有发现任何关于h0
或b0
含义的问题。我见过h0
,h1
和b0
,b1
,b2
,b3
。我猜h0
或h1
表示16位值,而bn
表示字节值。有人知道这些的确切含义吗?
感谢Roger Dahl的帮助。我读了PTX ISA 3.0并找到了答案
“h”表示半字。 h0
表示32位字的低半字。 h1
表示32位字的高半字。 “b”表示整数字节。 b0
,b1
,b2
和b3
代表32位字的第一个8位,第二个8位,第三个8位和最高8位。
答案 0 :(得分:2)
vadd
是PTX附带的视频特定说明之一。完整的PTX ISA的描述包含在CUDA发行版中。在我的机器上,它位于C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\doc\ptx_isa_3.0.pdf
。 h0
,h1
,b0
等指示符的说明位于8.7.11 Video Instructions
部分。它们表示不同的隐式移位/掩码操作(请参阅optMerge
函数)。