16

在阅读 CUDA 5.0 Programming Guide 时,我偶然发现了一个名为“Funnel shift”的功能,该功能存在于 3.5 计算设备中,但不是 3.0。它包含一个注释“参见参考手册”,但是当我在手册中搜索“漏斗移位”术语时,我什么也没找到。

我试着用谷歌搜索它,但只在第 8 章的http://www.cudahandbook.com上找到了提及:

8.2.3 漏斗转移(SM 3.5)

GK110 添加了一个 64 位“漏斗移位”指令,可以使用以下内部函数访问该指令:

__funnelshift_lc():返回左漏斗移位的最高有效 32 位。

__funnelshift_rc():返回右漏斗移位的最低有效 32 位。

这些内在函数在 sm_35_intrinsics.h 中实现为内联设备函数(使用内联 PTX 汇编程序)。

...但它仍然没有解释“左漏斗移位”或“右漏斗移位”是什么。

那么,它是什么,在哪里需要它?

4

1 回答 1

8

在 CUDA 的情况下,两个 32 位寄存器连接在一起成为一个 64 位值;该值向左或向右移动;并返回最高有效(对于左移)或最低有效(对于右移)32 位。

的内在函数sm_35_intrinsics.h如下:

unsigned int __funnelshift_lc(unsigned int lo, unsigned int hi, unsigned int shift);
unsigned int __funnelshift_rc(unsigned int lo, unsigned int hi, unsigned int shift);

根据 Andy Glew(删除死链接)的说法,漏斗转移的应用程序包括快速未对齐的 memcpy;正如 njuffa 在上面的评论中提到的,如果两个输入词相同,它可以用来实现旋转。

于 2012-10-09T11:37:59.577 回答