gpt4 book ai didi

c - 如何克服icc中的 "existence of vector dependence"

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:31 24 4
gpt4 key购买 nike

我想在 C 中向量化以下循环:

for(k = 0; k < SysData->numOfClaGen; k++)
A[k] = B[k] * cos(x1[2 * k] - x1[ind0 + k]);

其中,变量之间没有别名,ind0 是常量。没有其他指针(AB)指向 ind0,因此,ind0 在整个循环中保持不变。

当我用 icc 编译代码时,它说由于可能存在 vector 依赖性,因此无法对该循环进行向量化。这是消息:

loop was not vectorized: existence of vector dependence.

我缩小了问题范围,发现用常量替换 ind0 可以解决问题。所以,我假设 icc 认为 A 可能指向 ind0,因此 ind0 可能会改变。

我想知道如何帮助编译器知道向量化此类循环是安全的。

预先感谢您的帮助。

最佳答案

在for循环前面添加#pragma ivdep,它指示编译器忽略假设的 vector 依赖。

#pragma ivdep
for(k = 0; k < SysData->numOfClaGen; k++)
A[k] = B[k] * cos(x1[2 * k] - x1[ind0 + k]);

有关 ivdep 的更多信息,请参阅 icc doc

关于c - 如何克服icc中的 "existence of vector dependence",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com