漏斗转移 - 它是什么?

Cyg*_*sX1 11 cuda intrinsics ptx

通过CUDA 5.0编程指南阅读时,我偶然发现了一个名为"漏斗移位"的功能,该功能存在于3.5计算设备中,但不是3.0.它包含注释"参见参考手册",但是当我在手册中搜索"漏斗转换"术语时,我找不到任何内容.

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

8.2.3漏斗转换(SM 3.5)

GK110添加了一个64位"漏斗移位"指令,可以通过以下内在函数访问:

__funnelshift_lc():返回左漏斗移位的最重要的32位.

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

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

......但它仍然没有解释"左漏斗转移"或"正确的漏斗转移"是什么.

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

Arc*_*are 5

在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);
Run Code Online (Sandbox Code Playgroud)

根据Andy Glew的说法(删除了死链接),漏斗转换的应用程序包括快速错位的memcpy; 并且正如njuffa在上面的注释中提到的,如果两个输入词是相同的,它可用于实现旋转.

  • 所以简单来说它听起来像是一个带有 32 位操作数和结果的 64 位移位?大概是因为寄存器都是 32 位的。 (2认同)
  • 注意:链接似乎已关闭. (2认同)