2

私はいつもOpenCLでのグローバルデータのキャッシュ動作について疑問に思っていました。

カーネル内のグローバルメモリへのポインタがあるとしましょう。次に、ポインタが指す場所を読み取ります。カーネルの後半で同じデータが再び必要になる可能性があるため、ポインターを介して再度読み取ります。

ここで問題となるのは、このデータはキャッシュされるのでしょうか、それとも他のスレッドがデータを変更した可能性があるため、毎回グローバルメモリから再読み込みされるのでしょうか。キャッシュされていない場合は、毎回ローカルコピーを作成する必要があるため、グローバルメモリに絶えずアクセスしてパフォーマンスを大幅に低下させることはありません。

これはベンダー固有の可能性があることは知っていますが、仕様ではこれについて何と言っていますか?

4

2 に答える 2

3

いくらかのキャッシングがありますが、優れた GPU コンピューティング パフォーマンスの鍵は、「何度もアクセスされる」データをプライベートまたは共有ローカル メモリに移動し、再読み込みしないことです。ある意味では、これは「キャッシュを制御する」と考えることができます。OpenCL では、これはカーネルで (並行して!) 実行され、(すべての作業項目がコピーを完了したことを確認するために) メモリ バリアがあり、アルゴリズムは高速メモリ内のデータにアクセスできます。行列乗算の例を参照してください (各列と行が複数の出力値に寄与するため、それらを共有ローカル メモリにコピーするとアルゴリズムが高速化されます。

于 2013-02-17T02:36:48.450 に答える