3

私は 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 つのカーネルがデータを共有できるようにするにはどうすればよいですか?

4

2 に答える 2

1

問題は結局無関係でした。1 だけが必要なときに誤って 2 インデックスのグローバル作業サイズを使用していたapply_kernelので、NaN を捨てていました。

于 2013-07-29T19:34:47.887 に答える
1

からの重要な出力run_kernelを の最後に追加する機能が必要ですd_vertexBuffer。通常の入力値 ( ) と の出力からの余分な頂点d_vertexBufferを格納するのに十分な大きさにすることができます。 重要な出力の一部を上記のセクションにコピーしますvertexBufferSizerun_kernelrun_kernelapply_kerneld_vertexBuffervertexBufferSize

于 2013-07-29T16:41:39.113 に答える