最快的代码的gcc选项

最快的代码的gcc选项,第1张

概述最快的代码的gcc选项

我正在发布一个C ++程序,其中包含Unix版本的makefile,我想知道我应该使用什么编译器选项来获得最快的代码(它属于可以使用所有计算能力的程序类别因为我不知道硬件, *** 作系统或gcc版本的用户将有什么,我想要高于一切,以确保它至less在每个主要的Unix类似的工作正常 *** 作系统。

到目前为止,我有g++ -O3 -Wno-write-strings ,还有其他的选项可以添加吗? 在windows上,微软编译器有快速调用约定和链接时间代码生成等值得使用的选项,gcc上是否有任何等价物?

(我假设它将在64位平台上默认为64位,如果不是这种情况,请纠正我)。

使崩溃日志有意义(c ++,linux env)

从客户端发送任何消息之前,无法将消息从服​​务器端打印到客户端

从Visual Studio Solution生成Make文件(用于GCC)

write()返回后立即从文件中读取()是否安全?

“循环设备”中的“循环”是什么意思?

OpenCV 3.1.0不能用CMake编译

如何用C#.NET编写程序,在linux / Wine / Mono上运行它们?

这些消息在NetBeans C ++ 8.0.2输出中的含义是什么?

Visual C ++中容错DLL的使用

windows 8应用程序WebVIEw捕获事件目标=“_ blank”

不知道你的程序的具体细节,很难说。 O3涵盖了大部分的优化。 其余的选择是“有代价的”。 如果你可以容忍一些随机舍入,你的代码不依赖于IEEE浮点标准,那么你可以尝试-Ofast。 这忽略了标准合规性,并可以给你更快的代码。

其余的优化标志只能提高某些程序的性能,但对其他程序甚至是不利的。 查看优化标志的gcc文档中的可用标志并对其进行基准测试。

另一个选项是启用C99(-std = c99)并内联适当的功能。 这是一个艺术,你不应该内联一切,但有一点工作,你可以让你的代码更快(虽然以一个更大的可执行文件为代价)。

如果速度真的是一个问题,我会建议要么回到微软的编译器,要么尝试英特尔的。 我已经开始意识到一些gcc编译的代码可以很慢,特别是当涉及到math.h时。

编辑:哦,等等,你说C ++? 然后无视我的C99段落,你可以内联:)

我会尝试简介指导优化:

-fprofile-generate启用通常用于检测应用程序的选项,以生成配置文件,以便随后使用基于配置文件反馈的优化进行重新编译。 在编译和链接程序时,必须使用-fprofile-generate 。 以下选项已启用: -fprofile-arcs , -fprofile-values , -fvpt 。

你也应该给编译器提示关于程序运行的体系结构。 例如,如果它只能在服务器上运行,并且可以在与服务器相同的机器上进行编译,则可以使用-march=native 。 否则,您需要确定您的用户将拥有哪些功能,并将相应的参数传递给GCC。

(显然你的目标是64位,所以GCC可能已经包含比通用x86更多的优化。)

考虑使用-fomit-frame-pointer除非你需要使用gdb(yuck)进行调试。 这将给编译器一个更多的寄存器来使用变量(否则这个寄存器浪费了无用的帧指针)。

你也可以使用类似-march=core2或者更一般的-march=native来使编译器能够使用更新的指令,并进一步调整指定架构的代码,但是为此你必须确保你的代码不会被期望运行在旧的处理器上。

-oFast

请尝试-oFast而不是-o3

此处还有一列您可能希望选择性启用的标志。

-ffloat店

-fexcess精度=风格

-ffast,数学

-fno-舍入数学

-fno-信令的NaN

-fcx-有限范围

-fno-数学错误号

-funsafe-数学优化

-fassociative,数学

-freciprocal,数学

-ffinite,数学只

-fno签署3/0

-fno截留数学

-frounding,数学

-fsingle精度恒定

-fcx Fortran的规则

这里提供了一个完整的标志列表及其详细描述

gcc -O3不保证是最快的。 -O2通常是一个更好的起点。 之后,配置文件指导优化和尝试具体的选项: http : //gcc.gnu.org/onlinedocs/gcc/Optimize-Options.HTML

这是一个很长的阅读,但可能值得。

请注意,“链接时间代码生成”(MSVC)(也称为“链接时间优化”)可在gcc 4.5+中使用

顺便说一下,Win64没有特定的“fastcall”调用约定。 只有“调用约定”: http : //msdn.microsoft.com/en-us/magazine/cc300794.aspx

除了其他人已经提出的建议之外,您应该尝试使用-flto 。 它使链接时间优化,在某些情况下,可以真正做到魔术。

有关更多信息,请参阅https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.HTML

在x86-64上没有“快速调用” – Win64和linux ABI都将基于寄存器的调用(“fastcall”)定义为唯一的调用约定(尽管linux使用更多的寄存器)。

总结

以上是内存溢出为你收集整理的最快的代码的gcc选项全部内容,希望文章能够帮你解决最快的代码的gcc选项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存