4

openclのように異なるコンテキスト間でopenclメモリオブジェクトを共有することは可能ですか?

異なるコンテキストに属する 2 つのメモリ オブジェクトをカーネルに渡したい...

4

2 に答える 2

2

これが機能するかどうかはわかりませんが、Klee1が言うように、そのビットが不可能な場合は、これを試すかもしれません:

1) 共有を有効にして単一の GL コンテキストから 2 つの CL コンテキストをそれぞれ作成し、CL コンテキストごとに 1 つのメモリ オブジェクトを作成します。

2) 2 つの間でデータを移動する場合は、GL を使用して 2 つの間でフレームバッファ ブリットを実行します。

...これにより、GPU内にデータが保持され、PCI-Eバスを介して双方向にコピーするのに比べて、多くの時間を節約できます....

于 2012-10-13T02:14:15.047 に答える
0

これはOpenCLで直接行うことはできないと思います。これは、OpenCLでコンテキスト、キュー、およびメモリが定義される方法が原因です。2つの異なるコンテキストからメモリを渡す場合、データが2つの異なるデバイス上にある可能性が非常に高く、どちらのデバイスで計算を実行するかがわかりません。

このタイプの計算を実行する場合は、最初に1つのコンテキストから別のコンテキストにデータをコピーする必要があります。これは次のように行うことができます。

  1. context1のバッファーと同じサイズの新しいバッファーをcontext2に作成します
  2. 同じサイズのホストにローカルバッファを作成します
  3. context1からローカルバッファへのclEnqueueReadBuffer
  4. ローカルバッファからcontext2へのclEnqueueWriteBuffer

代わりに、(同じコンテキストで)異なるコマンドキューに2つのバッファーがある場合は、OpenCL1.2仕様のセクションA.1で指定されているようにそれらを共有できます。

于 2012-10-08T17:42:09.130 に答える