解決するのが少し難しい問題があります。私は 2 つの配列を持っています。1 つはすべてのカーネル呼び出しに対して固定サイズであり、1D 配列にマップされた通常の 3D グリッドです。この配列を meshData と呼びましょう。2 番目の配列は、x、y、z 座標と、meshData 配列と整列していないポイントの値を保持します。これを pointData と呼びましょう。
ここで、OpenCL を使用して meshData 配列を実行する必要があり、両方の配列と、pointData 配列に格納されているポイントの数をカーネルに渡します。カーネル内で、meshData 内の現在の要素の x、y、z 座標を問題なく計算し、それらの座標を使用して、for ループを使用して pointData 配列内のすべてのポイントを見つけます。for ループ内には、次のような if ステートメントがあります。
for (l = 0; l < points; l++) {
if(x1Cell <=pointdata[l*indexOffset] && x2Cell >= pointData[l*indexOffset &&
y1Cell <=pointdata[l*indexOffset + 1] && y2Cell >=pointdata[l*indexOffset + 1] &&
z1Cell <=pointdata[l*indexOffset + 2] && z2Cell >=pointdata[l*indexOffset + 2]){
}
}
問題は、x1Cell、x2Cell などの値をハードコーディングすると、コードが if ステートメントの内部に入りますが、x1Cell などに計算値を使用すると、条件が y1Cell を通過しないことです。
コード全体が非 OpenCL として完全に機能するので、動作することがわかります。上記で見逃したOpenCLに何かありますか?