2

まず、CL_MEM_ALLOC_HOST_PTR が渡されたときに clCreateBuffer() がどのように機能するかを理解するのに苦労しています。デバイスにバッファを作成し、ホストにメモリを割り当てますか、それともホストにのみメモリを割り当て、使用時にデバイスにキャッシュしますか?

私の問題はこれです: float* フィールドを持つオブジェクトがかなり多く、デバイスで利用可能なスペースよりも多くのスペースがある場合、ランタイムにホストポインターを OpenCL にコピーする (または使用する) ように指示するより良い方法はありますか?デバイス?ランタイムにホスト ポインターを作成させ、それをすべての float* に使用させることは可能ですか? ホスト ポインターを使用するように指示してもかまいませんが、ランタイムが CPU 上にあるときにメモリ コピーを回避したい場合は、すべてのメモリを調整する必要があります。

また、デバイスで使用できるよりも多くのメモリをホストで使用して、メモリ転送を最も効率的にし、コピーを最小限に抑えるための適切な方法に関するヒント。

ありがとう。

4

1 に答える 1

3

この規格は、次のことだけを述べています。

このフラグは、アプリケーションが OpenCL 実装にホスト アクセス可能なメモリからメモリを割り当てることを要求することを指定します。

したがって、内部でどのように機能するかは実装に依存します。NVIDIA は、 OpenCL プログラミング ガイド (V4.2)のセクション 3.3.1 で次のように述べています。

CL_MEM_ALLOC_HOST_PTR フラグ (...) を使用するオブジェクトは、最高のパフォーマンスを得るために、ドライバーによってページロックされたメモリに割り当てられる可能性があります。

独自のガイド ( here ) AMD では、セクション 4.5.2 で、各フラグ値のメモリ オブジェクトの場所を示す表を提供しています。セクション 4.5 全体が OCL メモリ オブジェクト専用です。面白いと思うかもしれません。

あなたの問題に関して、十分なメモリスペースがない場合、データを分割して複数のパスで処理する以外に (少なくとも私が考えることができる) 解決策はありませ

于 2013-06-12T09:35:38.523 に答える