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変更される可能性があると思います。
このようなループをベクトル化しても安全であることをコンパイラーに知らせる方法を知りたいです。
よろしくお願いします。