我想向量化下面的循環在C:如何克服「載體的依賴存在」在ICC
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
可能會改變。
我想知道我該如何幫助編譯器知道向量化這種循環是安全的。
在此先感謝您的幫助。