私は 2 つの OpenCL カーネルを持っており、それを順番に数回、次々と完了させたいrun_kernelと考えています。apply_kernelの出力にrun_kernelは の入力の一部が含まれていますがapply_kernel、これを実装する方法がわかりません。
現在、私が与えたいデータで満たされたという名前の単一のcl_memバッファがあり、それは正しく機能します。カーネル arg を次のように設定します。d_vertexBufferrun_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 つのカーネルがデータを共有できるようにするにはどうすればよいですか?