漏斗转移 - 它是什么?

时间:2012-10-07 08:00:51

标签: cuda intrinsics ptx

通过CUDA 5.0编程指南阅读时,我偶然发现了一个名为“漏斗移位”的功能,该功能存在于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汇编程序)。

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

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

1 个答案:

答案 0 :(得分: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);

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