私は 2 つの OpenCL カーネルを持っており、それを順番に数回、次々と完了させたいrun_kernel
と考えています。apply_kernel
の出力にrun_kernel
は の入力の一部が含まれていますがapply_kernel
、これを実装する方法がわかりません。
現在、私が与えたいデータで満たされたという名前の単一のcl_mem
バッファがあり、それは正しく機能します。カーネル arg を次のように設定します。d_vertexBuffer
run_kernel
error = clSetKernelArg(run_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer);
apply_kernel
同じ を使用するように設定しようとしましたが、バッファにアクセスしようとするたびに OpenCL コードが NaN を取得しているため、アクセスがd_vertexBuffer
台無しになっていると思います。run_kernel
私はapply_kernel
このように設定しました:
error = clSetKernelArg(apply_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer);
私はこのように作成しますd_vertexBuffer
:
d_vertexBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, vertexBufferSize, h_vertexBuffer, &error);
これらのカーネルを複数回実行するためにfor
、カーネルをコマンド キューに入れるループがあります。明らかに、これは正しい方法である必要はありません。2 つのカーネルがデータを共有できるようにするにはどうすればよいですか?