C で次のループをベクトル化したい:
for(k = 0; k < SysData->numOfClaGen; k++)
A[k] = B[k] * cos(x1[2 * k] - x1[ind0 + k]);
ここで、変数間にエイリアスはなくind0
、定数です。他のポインタ (A
またはB
) はいずれも ind0 を指していないため、ind0
ループ全体で一定のままです。
コードを icc でコンパイルすると、ベクトル依存の可能性があるため、このループをベクトル化できないと表示されます。メッセージは次のとおりです。
loop was not vectorized: existence of vector dependence.
問題を絞り込んだところ、ind0 を定数に置き換えると問題が解決することがわかりました。そのため、iccが指し示すA
可能性があると考えているind0
ため、ind0
変更される可能性があると思います。
このようなループをベクトル化しても安全であることをコンパイラーに知らせる方法を知りたいです。
よろしくお願いします。