2

各スレッドの CUDA カーネル関数でローカル変数を宣言するとします。

float f = ...; // some calculations here

また、宣言された変数がコンパイラによってローカルメモリに配置されたとします(これは、私が知る限り、1つのスレッドでのみ表示されることを除いて、グローバルメモリと同じです)。私の質問は、それを読むときにアクセスfが合体することですか?

4

2 に答える 2

2

ローカル メモリ (または Fermi のスタック) がメモリ内にどのように配置されているかについての公式ドキュメントがあるとは思いませんが、マルチプロセッサの割り当てが「ストライプ化された」方法でアクセスされるため、分岐しないスレッドが同じwarp は、ローカル メモリへの合体アクセスを取得します。Fermi では、ローカル メモリもグローバル メモリと同じ L1/L2 アクセス メカニズムを使用してキャッシュされます。

于 2011-09-06T08:47:58.970 に答える
-2

CUDA カードには、ローカル変数に割り当てられたメモリがありません。すべてのローカル変数はレジスタに格納されます。多くの変数を持つ複雑なカーネルは、同時に実行できるスレッドの数を減らします。これは、低占有率と呼ばれる状態です。

于 2011-09-22T13:15:30.697 に答える