gcc -O3 与 -Ofast 优化之间的差异

2024-02-10

我只是阅读 gcc 手册来找出两者之间的区别-O3 and -Ofast.

For -O3

-O3

Optimize yet more. -O3 turns on all optimizations specified by -O2 and also turns on the following optimization flags:

-fgcse-after-reload 
-fipa-cp-clone
-floop-interchange 
-floop-unroll-and-jam 
-fpeel-loops 
-fpredictive-commoning 
-fsplit-paths 
-ftree-loop-distribute-patterns 
-ftree-loop-distribution 
-ftree-loop-vectorize 
-ftree-partial-pre 
-ftree-slp-vectorize 
-funswitch-loops 
-fvect-cost-model 
-fversion-loops-for-strides

的同时-Ofast

-Ofast

Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for
all standard-compliant programs. It turns on -ffast-math,
-fallow-store-data-races and the Fortran-specific -fstack-arrays, unless -fmax-stack-var-size is specified, and -fno-protect-parens

因此我想知道是否可能-Ofast由于某种原因不如-O3,因此我应该坚持-O3那时的大多数时候。

您能澄清一下使用它们时的“实际差异”吗?而如果-Ofast实际上安全吗?


Ofast实现违反 C 标准浮点语义要求的优化。特别是在-Ofast (aka -ffast-math)它会自由地重新排序浮点计算(默认情况下是禁止的,因为一般来说a + (b + c) != (a + b) + c != a + (c + b)对于浮标)。

Whether -Ofast在特定情况下是否安全取决于算法,但是usually大多数非科学应用程序都可以很好地使用它。例如,大多数游戏引擎都是用-ffast-math.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc -O3 与 -Ofast 优化之间的差异 的相关文章

随机推荐

  • 如何设置 AsyncStorage 的过期日期 - React Native

    我正在使用 React Native 异步存储 它效果很好 但在某些情况下 我必须设置数据的到期日期并刷新我检查的存储 异步存储文档 https facebook github io react native docs asyncstora
  • 将 jquery 验证添加到 kendo ui 元素

    我已经查看了很多关于此的帖子 并且当我添加以下内容时它确实验证了我的字段 validator setDefaults ignore 我仍然缺少的部分是添加input validation error类来通知用户 它对于我的其他输入元素 非剑
  • 通过 Windows 批处理文件将长命令拆分为多行

    如何在批处理文件中将长命令拆分为多行 您可以使用插入符号分隔长行 只要您记住插入符号及其后面的换行符已被完全删除即可 因此 如果需要在换行处插入一个空格 请添加一个空格 下面详细介绍一下 https stackoverflow com a
  • 地图 std::map< std::string, Stock*> &stocks 上的模板参数无效

    我有声明 或类似声明 std map lt std string Stock gt stocks 贯穿我的代码 Eclipse 不喜欢这样并产生 无效模板参数 错误 库存声明为 class Stock public Stock std st
  • 可编辑组合框文本滚动

    我有一个可编辑的 wpf 组合框 当我输入比其长度长的内容而不是滚动到最后一个字符时 文本将脱离控制并且不可见 有没有什么办法解决这一问题
  • 应用程序在 Android 2.2 (Froyo) 中根本无法启动

    在最近的 Froyo 更新之前 我的应用程序一直运行正常 安装 Android 2 2 SDK 后 我可以编译我的代码 没有任何错误 但是 当我运行它时 它只是强制关闭 这是日志 05 23 10 15 13 463 DEBUG Andro
  • 我可以列出几个键来执行相同的操作吗? [AHK]

    AHK允许绑定按键 就是我们a z每当按下 a 时 都会触发 z 如果我想在按下 a b 或 c 时触发 z 怎么办 我显然可以重复我的代码 a z b z c z 我可能可以使用 Gosub 像 a Gosub abc b Gosub a
  • 列表可以改变吗? [复制]

    这个问题在这里已经有答案了 当我输入以下代码时 x 1 2 4 print x print x id x x 2 5 3 print x print x id x 它给出的输出为 1 2 4 x 47606160 2 5 3 x 47578
  • ActionbarSherlock:长按操作项会显示 Toast?

    长按操作项时 操作项下方会显示不带文本的 Toast 我可以禁用Toast 感谢您 如果您省略标题或指定操作项应与文本一起显示 则长按将不会出现 否则 吐司会添加每个操作项代表的内容的说明
  • 如何理解Process.Threads.Count结果?这个变量显示什么?

    让我们编写简单的控制台应用程序 调试模式 static void Main string args Process p Process GetCurrentProcess IList
  • Django / Python:捕获 MySQL IntegrityError

    在 Django Python 中 如何捕获特定的 mySQL 错误 IntegrityError try cursor execute sql except IntegrityError do something 不确定我应该导入什么以及
  • CSS3 性能?向左动画或平移X

    在我制作的 HTML5 CSS3 演示中 我主要使用 CSS 过渡来提高性能 我想知道我的 UI 例如 当前 JQuery 根据鼠标位置操纵容器 Div 的 LEFT 属性 我应该使用transform translateX tx 反而 或
  • Entity Framework Core 禁用 .Include() 函数中信息的递归检索

    该数据库包含表 Machines Wheels Characteristics 和 Pilot 汽车的 1 条记录包括 1 条关于 Pilot 的记录 4 条关于车轮和几个特性的记录 在我的模型类中 它看起来像这样 public class
  • HTTP 状态代码是否正在进行?

    我有一个看起来像这样的端点 得到 v1 资源正在创建 状态 如果该资源的加载 创建正在进行但尚未完成 是否有首选的 HTTP 状态代码返回 超过 200 响应正文解释 正在进行中 如果不是 那么在标头或响应正文中返回 正在进行 状态的最佳方
  • 在pygame中朝鼠标方向射击子弹

    我只是不明白为什么我的子弹不起作用 我做了一个项目符号类 如下 class Bullet def init self self x player x self y player y self height 7 self width 2 se
  • 自签名CA和自签名证书之间的区别[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不清楚 CA 密钥和证书之间的区别 CA 密钥不就是一个证书吗 让我尝试用一 个例子来澄清 我有一个客户端和一个服务器 我只是想验证我与
  • Kivy 应用程序无法在 Android 上运行

    我想使用 kivy 在 Android 上用 Python 编写简单的应用程序 遗憾的是 当我启动示例代码时 我只看到启动屏幕 几秒钟后应用程序完成工作 调试存在一个巨大的问题 因为 Linux Mint 上的 adb 无法检测到我的设备
  • 函数分析问题 - Visual Studio 2010 Ultimate

    我正在尝试分析我的应用程序以监视重构之前和之后函数的效果 我对我的申请进行了分析 并查看了摘要 我注意到Hot Path http msdn microsoft com en us library ms182398 aspx列表没有提到我使
  • 将一个摄像机视图中的 2D 点投影到同一场景的另一个摄像机视图中相应的 2D 点

    我在带有两个摄像机的多视图场景中使用 C 中的 open cv 我有两个相机的内在和外在参数 我想将视图 1 中的 X Y 点映射到第二个视图中的同一点 我有点不确定应该如何使用内在矩阵和外在矩阵 以便将点转换为 3D 世界 并最终在视图
  • gcc -O3 与 -Ofast 优化之间的差异

    我只是阅读 gcc 手册来找出两者之间的区别 O3 and Ofast For O3 O3 Optimize yet more O3 turns on all optimizations specified by O2 and also t