我最近发现了AMD的等价于CUDA的__byte_perm内禀;amdgcn_ds_swizzle(或者至少我认为它相当于字节置换函数)。我的问题是:CUDA的字节perm接收两个无符号的32位整数,然后根据选择器参数的值(作为十六进制值提供)进行置换。然而,AMD的swizzle函数只接受一个没有符号的32位整数和一个被命名为“模式”的int。如何利用AMD的Swizzle固有功能?
发布于 2016-12-29 16:05:22
ds_swizzle和__byte_perm do有点不同。一个在车道上换一个完整的寄存器,而后者从两个32位的规则中置换任意四个字节。
AMD的b32 GCN指令实际上是与其他车道交换值。您可以在要读取的车道中指定32位寄存器,并指定要将其放置在其中的32位寄存器。还有一个硬编码值,指定如何交换这些值。正如ds_swizzle_b32所指出的,这里是对user3528438的一个很好的解释。
烫发不与其他车道交换数据。它只从自己车道上的两个32位寄存器中收集任意4个字节,并将其存储到寄存器中。没有交叉车道的交通。
我猜下一个问题是如何在AMD GCN硬件上做一个“字节置换”。这方面的说明是v_perm_b32。(参见第12-152页这里)它基本上从两个指定的32位寄存器中选择任意四个字节。
https://stackoverflow.com/questions/41223317
复制相似问题