を適切にチェーンに、私は両方の入力と出力の画像を撮影し、いくつかの意味のある操作を行う2つのカーネルいる:今、私はチェーンにいくつかのケースでカーネルをOpenCLの:どのように[OK]をカーネル
#pragma OPENCL EXTENSION cl_khr_3d_image_writes : enable
kernel void Kernel1(read_only image3d_t input, write_only output)
{
//read voxel and some surrounding voxels
//perform some operation
//write voxel
}
#pragma OPENCL EXTENSION cl_khr_3d_image_writes : enable
kernel void Kernel2(read_only image3d_t input, write_only output)
{
//read voxel and some surrounding voxels
//perform some other operation
//write voxel
}
#pragma OPENCL EXTENSION cl_khr_3d_image_writes : enable
kernel void KernelCombined(read_only image3d_t input, write_only output)
{
//read voxel and some surrounding voxels
//...
//perform operation of both kernels (without read, write)
//...
//write voxel
}
をしたいです、だから私は最初にKernel 1を呼び出してからKernel2を呼び出すことができます。しかし、それは間に不必要な書き込みと読み込みがあることを意味します。私は両方を行う3番目のカーネルを書くこともできますが、コピー・ペースト・コードを維持することは面倒です。私は、私の知る限り、image3d_tの入力を渡すことができないので、実際には各カーネルの内容を別々の関数に入れることはできません。
質問: 2つのカーネルを繋ぐ巧妙な方法はありますか?おそらくOpenCLは私が知らない何か巧妙なことをしているのでしょうか?
編集:私がどのようにしたいのかの追加例。
私は実際にホストに書き込むことを心配していませんが、Image3Dに書き込むことについては心配していません。 – NOhs
私はあなたがそれについて心配している理由を本当に見ません... – Elalfer