首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字gcc的安全优化选项

数字gcc的安全优化选项
EN

Stack Overflow用户
提问于 2012-11-22 19:08:34
回答 1查看 859关注 0票数 3

哪些gcc编译器选项可以安全地用于数值编程?

打开gcc优化的简单方法是将-0#添加到编译器选项中。说-O3是很诱人的。但是,我知道-O3包括优化,这是非保存的,因为一旦包含了这个选项,数值计算的结果可能会有所不同。如果算法是稳定的,结果中的小变化可能是微不足道的。另一方面,对于某些数学运算来说,精度可能是一个问题,因此数学优化可能会产生重大影响。

我发现在调试过程中考虑编译器相关问题是不方便的。也就是说,我不想怀疑代码中的小改动是否会导致强烈不同的行为,因为编译器在内部改变了它的优化。

如果我想要在我的代码中添加确定性的行为--因此也是可控的--哪些选项是安全的?哪种选择几乎是安全的,也就是说,与业绩效益相比,哪种选择只导致了较小的不确定性?

我想到了一些选项,比如:-finline -finline-limit=2000,它可以内联功能,即使它们是长的。

EN

回答 1

Stack Overflow用户

发布于 2012-11-22 22:28:39

-O3不包括不安全的数值优化,这是不正确的。根据the manual,与-O2相比,-O3包括以下优化传递

-finline-functions-funswitch-loops-fpredictive-commoning-fgcse-after-reload-ftree-vectorize-fipa-cp-clone

您可能指的是-ffast-math,默认情况下使用-Ofast打开,而不是-O3打开

-ffast-math设置-fno-math-errno-funsafe-math-optimizations-ffinite-math-only-fno-rounding-math-fno-signaling-nans-fcx-limited-range。此选项将导致定义预处理宏__FAST_MATH__。 该选项是除-O -Ofast之外的任何选项不打开的,因为它可能导致程序输出不正确,这些程序依赖于精确实现IEEE或规则/规范的数学函数。但是,对于不需要这些规范的保证的程序,它可能会产生更快的代码。

换句话说,所有的-O-O2-O3对于数字编程都是安全的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13518759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档