【发布时间】:2013-01-07 16:23:51
【问题描述】:
问题
我们有一个用于模拟任务的中型程序,需要对其进行优化。我们已经尽最大努力将源代码优化到我们编程技能的极限,包括使用Gprof 和Valgrind 进行分析。
最终完成后,我们希望在多个系统上运行该程序可能几个月。因此,我们非常有兴趣将优化推向极限。
所有系统都将在相对较新的硬件(Intel i5 或 i7)上运行 Debian/Linux。
问题
使用最新版本的 g++ 有哪些可能的优化选项,超越 -O3/-Ofast?
我们还对代价高昂的小优化感兴趣,从长远来看,这会带来回报。
我们现在使用什么
现在我们使用以下 g++ 优化选项:
-
-Ofast:最高“标准”优化级别。包含的-ffast-math没有在我们的计算中造成任何问题,因此我们决定继续使用它,尽管不符合标准。 -
-march=native:启用所有 CPU 特定指令的使用。 -
-flto允许跨不同编译单元的链接时间优化。
【问题讨论】:
-
您是否尝试过配置文件驱动的优化 - 尽管这将取决于配置文件的“代表性”数据。除此之外,我认为它正在识别热点并查看处理器生成的代码,看看您是否可以更好地组织数据/代码或提出不同的算法。
-
请注意,在一天后启动您的程序并获得 1% 的性能提升,因为当天优化只会在运行 100 天后收支平衡。换句话说,提前几天开始运行您的程序可能会超过小的优化。
-
@sth: 这简直是天方夜谭。不过我希望能找到一些提示/技巧,也可以在以后的项目中重复使用,这样我就不用花一天时间从优化中获胜了……
-
@OliCharlesworth:你可能是对的,所以我把那个明确的例子拿出来了。但是,我希望可能有一些标志/技巧可以产生甚至超过小加速的效果。
-
我没有检查自己,但
-ffast-math并不总是让代码更快according to this 博客。
标签: c++ g++ compiler-optimization