1

正如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 的官方文档,并没有发现对h0or的含义有任何顾虑b0。我见过h0, h1, b0, b1, b2. b3我猜h0还是h1代表一个 16 位的值,而bn代表一个字节的值。有人知道这些的确切含义吗?

感谢罗杰达尔的帮助。我阅读了 PTX ISA 3.0 并找到了答案。
“h”表示半字。h0表示 32 位字的低半字。h1表示 32 位字的高半字。“b”表示整数字节。b0, b1,b2分别b3代表一个 32 位字的前 8 位、第二个 8 位、第三个 8 位和最高 8 位。

4

1 回答 1

2

vadd是 PTX 随附的视频特定说明之一。CUDA 发行版中包含对完整 PTX ISA 的描述。在我的机器上,它在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函数)。

于 2012-07-18T16:58:14.280 回答