16

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 アセンブラーを使用して) インライン デバイス関数として実装されます。

...しかし、「左漏斗シフト」または「右漏斗シフト」が何であるかはまだ説明されていません。

それで、それは何ですか、そしてどこでそれが必要ですか?

4

1 に答える 1

8

CUDA の場合、2 つの 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が言及しているように、2つの入力単語が同じ場合、回転を実装するために使用できます。

于 2012-10-09T11:37:59.577 に答える