OpenCLプログラミングの新機能です。私のOpenCLアプリケーションでは、すべてのカーネルを起動した後にclWaitForEventsを使用します。clWaitForEventsを使用しない場合の影響
ケース1:撮影した
time_start();
cl_event event;
cl_int status = clEnqueueNDRangeKernel(queue, ..., &event);
clWaitForEvents(1, &event);
time_end();
時間:(clWaitForEvents付き)250ミリ秒
を私はclWaitForEventsを削除する場合は()、私のカーネルは同じ出力でより速く動作します。
ケース2:撮影した
time_start();
cl_event event;
cl_int status = clEnqueueNDRangeKernel(queue, ..., &event);
time_end();
時間:(clWaitForEventsなし)220ミリ
私が順次10の異なるカーネルを起動しました。すべてのカーネルは、前のカーネルの出力に依存しています。すべてのカーネルの後にclWaitForEventを使用すると、実行時間が数100ミリ秒増加します。私はclWaitForEventsを使用していない場合は
は、出力が間違って行くことはできますか? clWaitForEventsまたはclFinishを使用しないと、おそらく何がうまくいかないかも理解したいと思います。
どのポインタも高く評価されています。
In-order-queue
単一の順番待ち行列は待ちイベントを必要としません。 –
clEnqueueReadBuffer(.. false ..)のような非同期コマンドがない限り、 "ブロッキング"は有効ではありません。 –
@huseyintugrulbuyukisik AFAIK実際に非ブロッキングclEnqueueReadBuffer()は "非同期"コマンドではありません。ブロッキングパラメータは便宜上のものです。キューが順序どおりであれば、順番に実行されます。これはclEnqueueReadBuffer()を呼び出すのと同じです。 clFinish(); – mogu