我正在阅读gcc手册,以找出-O3
和-Ofast
之间的区别。
对于-O3
-O3
优化更多。-O3启动由-O2指定的所有优化,并打开以下优化标志:fgcse-reload -fipa-cp-clone floop interchange floop unroll和jam-fpeel循环-f预测-共有-f拆分-路径-ftree-循环-分配模式-ftree-循环-ftree-循环-vectorize-ftree-pre slp-vectorize-fvect-成本-模型-fversion-循环
-Ofast
的时间
-Ofast
无视严格的标准。-Ofast启用所有-O3优化。它还支持并非对所有符合标准的程序都有效的优化。它打开-ffast-数学、-休闲-存储-数据-种族和Fortran特定的-fstack-数组,除非-fmax-堆栈-var-size被指定,并且-fno-保护-parens。
因此,我想知道,也许-Ofast
由于某些原因不如-O3
安全,因此我应该在大多数时候坚持使用-O3
。
你能澄清在使用它们时的“实际差异”吗?如果-Ofast
真的是安全的呢?
发布于 2020-05-17 09:05:06
Ofast
支持违反C标准浮点语义要求的优化。特别是在-Ofast
(又名-ffast-math
)下,它可以自由地重新排序浮点计算(默认情况下是禁止的,因为在一般情况下,浮点数的a + (b + c) != (a + b) + c != a + (c + b)
是禁止的)。
-Ofast
在特定情况下是否安全取决于算法,但通常大多数非科学应用都能很好地工作。例如,大多数游戏引擎都是用-ffast-math
构建的。
https://stackoverflow.com/questions/61232427
复制相似问题