通过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汇编程序)。
...但它仍然没有解释“左漏斗转移”或“正确的漏斗转移”是什么。
那么,它是什么以及需要它在哪里?
答案 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在上面的评论中提到的,如果两个输入词是相同的,它可用于实现旋转。