私は、ローカルメモリに収まらない大きすぎるフラグのバッファを使用する画像処理カーネルを持っています。フラグは、予測可能なラスターパターン(左上から右下)でアクセスされます。ローカル/共有メモリをグローバルキャッシュとして使用する
私の考えは、グローバルメモリにフラグを格納し、ローカルメモリをグローバルのキャッシュとして使用することです。ですから、私はラスターパターンに沿って進んでいくうちに、グローバルからローカルへのフラグを読み込み、何らかの処理をしてから、フラグをグローバルに書き戻したいと思います。しかし、私は関与するレイテンシを隠したい。だから、
、私は場所のシリーズとしての私のイメージにアクセスするとします。a1,a2,a3......
私は次の操作を行いたい:
a1
フラグ- をフェッチ
a2
フラグがフェッチされている間a2
フラグ - をフェッチします、プロセス
a1
を保存して、 をグローバルメモリに保存します - フェッチ
a3
のフラグ a3
フラグがフェッチされている間、プロセスa2
場所とバック グローバルメモリに保存- など
どのように私は待ち時間が隠されていることを確認するために私のコードを構築する必要がありますか? これを行うにはvload/vstore
を使用する必要がありますか?または、GPUハードウェア は、自動的にレイテンシー隠蔽を行いますか?
['barrier'](https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/barrier.html)を使ってみましたか? –
'barrier'は、すべての作業項目がカーネル内の特定のポイントに到達してから進むことを許可するために必要です。しかし、これはメモリトランザクションの待ち時間に影響しません。 – Jacko