我想在 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
可能会改变。
我想知道如何帮助编译器知道向量化这样的循环是安全的。
在此先感谢您的帮助。