1

私はこの記事を読んでいました http://www.dyn-lab.com/articles/cl-gl.html

ここで、OpenCl カーネル オブジェクトにメモリ全体の R/W アクセスがあり、OpenGL が CPU と GPU の相互作用なしでメモリ内のデータにアクセスしてデータを転送できる場合、GPU がメイン メモリ自体からデータにアクセスしてからメモリ バスにアクセスする場合、CPU/GPU のアイドル時間をどのように短縮しますか?一部のCPU命令がメモリアクセスを必要とする場合、アクセスはCPUをアイドル状態のままにします(キャッシュがヒットしないなど)。

コンセプトを誤解しているかもしれません!紛争を理解するのを手伝ってください。

4

1 に答える 1

1

この記事では、OpenGL と OpenCL の両方で GPU メモリを使用する方法について説明しています。

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, 400, NULL, GL_STATIC_DRAW);
vbo_buff = clCreateFromGLBuffer(ctx, CL_MEM_WRITE_ONLY, 2, &err);

glBufferData の 3 番目の引数が NULL に設定されている理由を確認することが重要です。これは、ホストがデータを VBO に転送しないことを示しています。つまり、VBO は 400 バイトを保持するように構成されていますが、このメモリはホストに割り当てられません。代わりに、400 バイトが GPU に割り当てられ、カーネルは書き込み専用バッファー オブジェクト vbo_buff にアクセスして VBO データを初期化します。

アプリケーションは一度バッファを作成して埋めます。この時点で、CPU/メイン メモリと GPU/GPU メモリの間でデータ転送が行われます。その後、OpenGL と OpenCL はデータを共有するローカル メモリ上で連携して動作します。それ以上のデータ転送が不要になり、より高速な GPU メモリと GPU の (並列) 処理能力を利用できるようになります。

于 2013-06-13T06:14:49.577 に答える