0

理解が間違っている場合は訂正してください。

err= clEnqueueNDRangeKernel(command_queue,kernel,1,NULL,global,wg,0,NULL,&gpuExec);

カーネルがGPUで実行されている場合、CPUコード(これら2つの関数の間に記述されている)はCPUで同時に実行されますか?

err=clEnqueueReadBuffer(command_queue,output,CL_TRUE,0,sizeof(cl_int)*100,results,0,NULL,NULL);

2)この機能

err= clEnqueueNDRangeKernel(command_queue,kernel,1,NULL,global,wg,0,NULL,&gpuExec);

すぐに戻り、CPUはこの関数呼び出しの後に別の作業を実行できます(つまり、カーネルが異なるコアのGPUで実行を開始した後)、同時にカーネルの実行中に、CPUは別の作業を実行できますか?

4

1 に答える 1

0

どちらの質問にもyesで答えることができます。カーネルは GPU 上で非同期に実行されるため、その間に CPU で他の作業を行うことができます。gpuExecを使用して、イベントを明示的に待つことができますclWaitForEvents(1, &gpuExec)

于 2013-01-21T07:33:09.177 に答える