作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
gcc
的v4系列编译器可以使用 SIMD 自动向量化循环。某些现代 CPU 上的处理器,例如 AMD Athlon 或 Intel Pentium/Core 芯片。这是怎么做到的?
最佳答案
原始页面提供了有关让 gcc 自动矢量化的详细信息
循环,包括几个例子:
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
虽然示例很棒,但事实证明,使用最新 GCC 调用这些选项的语法似乎发生了一些变化,请看现在:
gcc -O2 -ftree-vectorize -msse2 -mfpmath=sse -ftree-vectorizer-verbose=5
-mfpmath=sse
。这是 64 位的默认值,但不是 32 位的。)
-ftree-vectorize
在 -O3
所以只需在 GCC4.x 及更高版本中使用它 :
gcc -O3 -msse2 -mfpmath=sse -ftree-vectorizer-verbose=5
-O2
处启用自动矢量化。ICC 默认启用优化 + 快速数学。)
-march=native
.
-ffast-math
将 FP 数学视为关联和矢量化。
Example on the Godbolt compiler explorer with -O3 -march=native -ffast-math
包括一个没有
-ffast-math
的标量减少(数组总和) . (好吧,GCC8 及更高版本执行 SIMD 加载,然后将其解压缩为标量元素,这与简单展开相比毫无意义。一个
addss
依赖链的延迟的循环瓶颈。)
-ffast-math
, 只是
-fno-math-errno
可以帮助 gcc 内联数学函数并矢量化涉及
sqrt
的内容和/或
rint
/
nearbyint
.
-flto
(跨文件内联、常量传播等的链接时间优化)和/或使用
-fprofile-generate
的配置文件引导优化/使用实际输入进行测试运行/
-fprofile-use
. PGO 为“热”循环启用循环展开;在现代 GCC 中,即使在 -O3 时也默认关闭。
关于gcc - 如何使用 gcc 进行矢量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/409300/
我是一名优秀的程序员,十分优秀!