AMD HCC Swizzle Intrinsic

时间:2016-12-19 13:08:51

标签: c++ parallel-processing gpgpu gpu-programming

我刚刚发现AMD相当于CUDA的__byte_perm内在; amdgcn_ds_swizzle(或者至少我认为它相当于一个字节置换函数)。我的问题是这样的:CUDA的字节perm接受两个无符号的32位整数,然后根据selector参数的值(作为十六进制值提供)进行置换。但是,AMD的swizzle函数只接受一个无符号的32位整数,并且一个int被命名为“pattern”。我如何利用AMD的Swizzle内在功能?

1 个答案:

答案 0 :(得分:0)

ds_swizzle __ byte_perm 确实有点不同。一个在整个通道中置换整个寄存器,后者置换来自两个32位寄存器的任何四个字节。

AMD的ds_swizzle_b32 GCN指令实际上是与其他通道交换值。您可以在要读取的通道中指定32位寄存器以及要将其放入的32位寄存器。还有一个硬编码值,用于指定如何交换这些寄存器。用户3528438指出ds_swizzle_b32的一个很好的解释是here

__byte_perm不会与其他通道交换数据。它只收集自己通道中两个32位寄存器的任意4个字节,并将其存储到寄存器中。没有跨车道交通。

我猜测下一个问题是如何进行"字节置换"在AMD GCN硬件上。该指令是 v_perm_b32 。 (见第12-152页here)它基本上从两个指定的32位寄存器中选择任意四个字节。