2012-10-18 4 views
7

...はPTX manualに記載されています。彼らが何が良いか、どのように使用するかについてのヒントはありません。PTX「ビットバケット」レジスタ

もっと知っていますか?私はただの概念を欠いていますか?

+2

私が間違っていない場合(私はおそらくこれで訂正されるでしょうが))、レジスタへの書き込みは本質的にno-opsです。 – Bart

+1

一般に、命令によって生成されたレジスタ結果には関心がなく、命令の副作用のみに関心がある場合、命令の宛先レジスタとしてビットバケットを指定します。例えば、様々なマイクロプロセッサでは、比較命令は実際には、ビット・バケットとして指定された宛先レジスタを有する減算命令として実施される擬似命令である。何故ならば、サイドバイサイド命令として生成されるフラグ(条件コード)減算の効果。 harrismは、以下のPTXに固有のビットバケットの使用例を既に提供しています。 – njuffa

答えて

8

バートのコメントは基本的に正しいです。より詳細には、PTX ISA 3.1 manualに記載されているように、

一部の命令では、デスティネーションオペランドはオプションです。デスティネーションレジスタの代わりに、 "ビットバケット"オペランド がアンダースコア(_)で示されてもよい。​​:

は実際_が有効な宛先であるため3.1 PTX仕様に記載されている命令の唯一のクラスがあります。ここで​​の意味である:

原子的オペランドB及び位置Aの値とリダクション演算を行い、位置で指定された操作の結果を格納し、宛先レジスタDに位置aの元の値をロードしますa、元の値を上書きします。

そして​​ための注意事項があります:

シンプル削減「ビットバケツ」デスティネーションオペランド「_」を使用して指定することができるが。これは、メモリ位置aで符号付き整数に4を加算し、レジスタに位置aの前の値を返さないであろう

atom.global.add.s32 _, [a], 4 

そこで、実施例を構築することができます。したがって、以前の値が必要ない場合は、これを使用することができます。私はatomicAddの戻り値を変数に格納されていないので、コンパイラはこのコード

atomicAdd(&a, 4); 

のためにこれを生成することを想定しています。

+0

実際の情報を参考にして、私の「何か何かノーオペレーション」を展開していただき、ありがとうございます。知っておいてよかった。 :) – Bart

+0

ありがとうございます。マニュアルの3.1版を知っておいてよかったです。 – Dude