1

ここのみんな。OpenCLは、GPUと同様の方法でCPU上でカーネルを実行できるためです。GPUには、物理​​的にプライベートメモリ(レジスタ)と共有メモリがありますが、OpenCLデバイスとしてCPUを選択した場合、プライベートメモリと共有メモリはどのように実装されますか?

つまり、それらはDRAMまたは他の何かによってエミュレートされていますか(L1、L2、L3キャッシュでさえありますか?わかりません)。その上、CPUで共有メモリを使用するパフォーマンスはGPUと比較して制限されますよね?

4

2 に答える 2

4

CPUキャッシュに直接アクセスできる言語はありません(引用されましたが、3つのURLを持つのに十分な担当者がいません...)。つまり、OpenCLがプライベートメモリをキャッシュに保持する方法がないということです。

AMDからのこのプレゼンテーションでは、 彼らは単にメモリモデルをコンテキストによって抽象化された一連のメモリオブジェクトと呼んでいます(16ページ)。コンテキスト内のデバイスでバッファが使用可能である限り、それらは読み取り可能です。さまざまな種類のカーネルメモリに関しては、GPUではなくCPUで実行した場合(DRAMにはさまざまな種類があるため)、それらの間にパフォーマンスの違いはないと安全に想定できます。

ただし、クラスターで計算している場合は、ホストメモリとローカルメモリが異なるため、転送速度を考慮する必要があることに注意してください。質問の2番目の部分については、OpenCLのメモリモデルに関するこの記事を参照してください。特定のワークグループ内でのみ通信する必要があるような方法でプログラムを構成することで得られるパフォーマンスがあります。

詳細については、-http://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htmを参照してください。

于 2012-10-01T08:42:37.803 に答える
-1

OpenCLメモリモデルは、GPUアーキテクチャに基づいて作成されました。CPUでは、グローバルメモリ、共有メモリ、およびコンスタントメモリへのアクセスは同じキャッシュ階層を通過します。

もちろん、ローカルメモリを使用して実装すると、キャッシュヒットが増加するため、パフォーマンスを向上させることができます。

于 2013-12-21T19:37:15.430 に答える