openclのように異なるコンテキスト間でopenclメモリオブジェクトを共有することは可能ですか?
異なるコンテキストに属する 2 つのメモリ オブジェクトをカーネルに渡したい...
openclのように異なるコンテキスト間でopenclメモリオブジェクトを共有することは可能ですか?
異なるコンテキストに属する 2 つのメモリ オブジェクトをカーネルに渡したい...
これが機能するかどうかはわかりませんが、Klee1が言うように、そのビットが不可能な場合は、これを試すかもしれません:
1) 共有を有効にして単一の GL コンテキストから 2 つの CL コンテキストをそれぞれ作成し、CL コンテキストごとに 1 つのメモリ オブジェクトを作成します。
2) 2 つの間でデータを移動する場合は、GL を使用して 2 つの間でフレームバッファ ブリットを実行します。
...これにより、GPU内にデータが保持され、PCI-Eバスを介して双方向にコピーするのに比べて、多くの時間を節約できます....
これはOpenCLで直接行うことはできないと思います。これは、OpenCLでコンテキスト、キュー、およびメモリが定義される方法が原因です。2つの異なるコンテキストからメモリを渡す場合、データが2つの異なるデバイス上にある可能性が非常に高く、どちらのデバイスで計算を実行するかがわかりません。
このタイプの計算を実行する場合は、最初に1つのコンテキストから別のコンテキストにデータをコピーする必要があります。これは次のように行うことができます。
代わりに、(同じコンテキストで)異なるコマンドキューに2つのバッファーがある場合は、OpenCL1.2仕様のセクションA.1で指定されているようにそれらを共有できます。