0

.regレジスタを宣言するために使用するとき..それらはどこにありますか?

つまり.reg、デバイス関数内でレジスタを使用すると、各スレッドが持つレジスタファイルに格納されます...しかし.reg、モジュール内の変数をグローバルスコープ(.global単にグローバルスコープではなく)で宣言するとどうなりますか?

4

1 に答える 1

1

すべて.regの宣言は、PTX レジスタの状態空間で終了します。それがハードウェア機能にどのようにマップされるかはアセンブラによって決定されますが、レジスタまたはローカル メモリの通常の規則が当てはまります。モジュール スコープでのレジスタ状態空間宣言は、PTX 1.x および 2.x コードでのみサポートされており、CUDA ABI では使用できないことに注意してください。PTX のドキュメントには次のように記載されています。

レジスタは、完全にアドレス指定できないという点で他の状態空間とは異なります。つまり、レジスタのアドレスを参照することはできません。Application Binary Interface (ABI) を使用するためにコンパイルする場合、レジスタ変数は関数スコープに制限され、モジュール スコープで宣言することはできません。モジュール スコープの .reg 変数を含む従来の PTX コード (3.0 より前の ISA バージョン) をコンパイルする場合、コンパイラは ABI の使用をサイレント モードで無効にします。

于 2013-07-16T14:54:17.993 に答える