1

定数メモリの小さな部分を使用するカーネルを実行し、カーネルの実行中にその定数メモリに書き込む場合、カーネルはすぐに変更を認識しますか、またはカーネルの起動時に定数メモリの内容が「キャッシュ」されますか - またはOpenCL ドライバーは、カーネルの実行が完了するまで、一定のメモリ更新を無条件に遅らせますか?

1 番目または 3 番目のオプションが発生した場合、同じカーネルを異なる定数メモリ データで同時に実行するにはどうすればよいでしょうか? 複数のカーネル/定数バッファー オブジェクトを作成して操作する必要がありますか? カーネルの起動は、任意の時間とレートで発生する可能性のある外部信号の結果であるため、事前に計算することはできません。その場でカーネル オブジェクトを作成することもできますが、それは見苦しい解決策のように思えます。

4

1 に答える 1

3

同じコマンド キューに「エンキュー」されたコマンドが順番に実行されるというのは、OpenCL の基本的な概念です。これにはWriteBuffer、 および類似のコマンドが含まれます。これは、

EnqueueNDKernalRange()
EnqueueWriteBuffer()
EnqueueNDKernalRange()

次に、それらがブロッキングであるか非ブロッキングであるかに関係なく、書き込みはカーネルの 2 番目のセットにのみ影響します。

マップされたポインターを介して更新している場合は、カーネルを実行する前にマップを解除する必要があります。現在マップされているバッファにアクセスする実行中のカーネルは未定義です (仕様 1.1 - セクション 5.4.2.1)。

EnqueueMapBufferEnqueUnmapMemObjectコマンド キューに置かれますが、マップを解除している限り、更新の順序は保証されます。

それはあなたの質問に答えますか、それとも別の方法でバッファを更新していますか?

異なる定数メモリ データを使用して同じカーネルを同時に実行するにはどうすればよいですか? 複数のカーネル/定数バッファー オブジェクトを作成して操作する必要がありますか?

はい、複数のバッファ オブジェクトです。

于 2012-05-29T08:20:44.567 に答える