gpt4 book ai didi

c++ - pragmas simd 和 ivdep vector 之间的区别总是?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:12 27 4
gpt4 key购买 nike

我目前正在尝试对一个程序进行矢量化,但我观察到了一个奇怪的行为

使用时似乎for循环被向量化了

#pragma simd

(262): (col. 3) remark: SIMD LOOP WAS VECTORIZED.

但是我用的时候没有

#pragma vector always

#pragma ivdep

(262): (col. 3) remark: loop was not vectorized: existence of vector dependence.

我一直以为两个句子做的向量化是一样的

最佳答案

pragma simd 强制循环矢量化,而不考虑成本或安全性。

pragma vector 总是告诉编译器在决定是否向量化时忽略效率启发式。仅在添加此 pragma 时才进行矢量化的代码可能速度较慢。

pragma ivdep 告诉编译器忽略抑制向量化的假设数据依赖(例如循环携带依赖),但不是经过验证的数据依赖。例如,它可能假设指针不指向相同的内存和向量化。但是,它不会忽略经过验证的循环携带依赖性 (a[i] = a[i - 1] * c),但 pragma simd 可能会。

您的代码可能仅使用 pragma simd 进行矢量化的一个原因是已证明的依赖性被忽略了。您可能想要验证您的程序输出是否正确。

来源:英特尔特定编译指示文档(http://software.intel.com/en-us/node/462880)

关于c++ - pragmas simd 和 ivdep vector 之间的区别总是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681300/

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