でopenclオブジェクトstd::vector
のホストポインタとして(またはより正確にはそのストレージ)を使用してみたいという状況があります。サイズが変更されたためにメモリが再割り当てされた場合、これには明らかに問題があります。私への変更は、が使用されていないプログラムのフェーズ中に行われるため、バッファのホストポインタがの最初の要素へのポインタと同一であるかどうかを確認し、そうでない場合はバッファを再作成するという考えです。ケース。私の問題は、が使用されていない場合、ホストポインタがすでに割り当て解除されているを使用することが合法であるかどうかを確認できないことです。buffer
CL_MEM_USE_HOST_PTR
vector
vector
buffer
vector
buffer
buffer
もちろん、使用されているフェーズの最後にバッファーを破棄することもできますが、ベクターの内容や長さが変更されているかどうかは事前にわかりません。変更されていない場合は、古いバッファーを保持したいと思います。デバイスにキャッシュされたままにすることができるafaikなので、pci-eバスを介して転送する必要のあるデータの量を減らすことができます。
私の質問は:オブジェクトが存在するだけでカーネルで使用されていない場合、ホストポインタがすでにホストポインタが削除されているopenclbuffer
を持つことは許可されていますか?CL_MEM_USE_HOST_PTR
buffer
私が現在nvidiasopencl実装に対して開発している記録として、GPUとしてTesla 2070を使用すると、ソフトウェアは近い将来amd gpus / cpusに移植される可能性があります(後者が使用する主な理由CL_MEM_USE_HOST_PTR
です)。したがって、答えが実装固有である場合、それらが主要なターゲットですが、後で他に何が実行されるかわからないため、一般的な答えに本当に興味があります。