问题我们有一个用于模拟任务的中型程序,我们需要对其进行优化。我们已经尽最大努力将源代码优化到我们编程技能的极限,包括使用Gprof和Valgrind进行分析。最终完成后,我们希望在多个系统上运行该程序可能几个月。因此,我们非常有兴趣将优化推向极限。所有系统都将在相对较新的硬件(Inteli5或i7)上运行Debian/Linux。问题除了-O3/-Ofast之外,使用最新版本的g++有哪些可能的优化选项?我们也对代价高昂的小优化感兴趣,从长远来看,这将带来返回。我们现在使用的现在我们使用以下g++优化选项:-Ofast:最高“标准”优化级别。包含的-ffast-math没有在我们的计算
我对GCC-O3标志非常熟悉,但它与-Os有何不同,在哪种情况下我们应该更喜欢一个而不是另一个? 最佳答案 GCCdocumentation非常明确地描述了这些选项的作用。-O3尝试大量优化代码以提高性能。它包括所有优化-O2包括,以及更多。另一方面,-Os指示GCC“优化大小”。它启用所有-O2优化不会增加可执行文件的大小,然后它还会切换一些优化标志以进一步减小可执行文件的大小。请注意,我的描述故意含糊不清-请阅读GCC文档以更深入地讨论究竟为任一优化级别启用了哪些标志。我相信-O*优化级别就是-互斥、不同的优化级别。混合它们并没
我对GCC-O3标志非常熟悉,但它与-Os有何不同,在哪种情况下我们应该更喜欢一个而不是另一个? 最佳答案 GCCdocumentation非常明确地描述了这些选项的作用。-O3尝试大量优化代码以提高性能。它包括所有优化-O2包括,以及更多。另一方面,-Os指示GCC“优化大小”。它启用所有-O2优化不会增加可执行文件的大小,然后它还会切换一些优化标志以进一步减小可执行文件的大小。请注意,我的描述故意含糊不清-请阅读GCC文档以更深入地讨论究竟为任一优化级别启用了哪些标志。我相信-O*优化级别就是-互斥、不同的优化级别。混合它们并没
我从各种来源(尽管主要来self的一位同事)听说,在g++中使用-O3的优化级别进行编译在某种程度上是“危险的”,通常应该避免,除非证明是必要的。这是真的吗?如果是,为什么?我应该坚持使用-O2吗? 最佳答案 在gcc(2.8等)的早期和egcs时代,redhat2.96-O3有时会出现很多问题。但这是十多年前的事了,-O3与其他级别的优化(在错误方面)没有太大区别。然而,由于更严格地依赖语言的规则,尤其是极端情况,它确实倾向于揭示人们依赖未定义行为的情况。作为个人说明,我多年来一直使用-O3在金融领域运行生产软件,并且还没有遇到如
我从各种来源(尽管主要来self的一位同事)听说,在g++中使用-O3的优化级别进行编译在某种程度上是“危险的”,通常应该避免,除非证明是必要的。这是真的吗?如果是,为什么?我应该坚持使用-O2吗? 最佳答案 在gcc(2.8等)的早期和egcs时代,redhat2.96-O3有时会出现很多问题。但这是十多年前的事了,-O3与其他级别的优化(在错误方面)没有太大区别。然而,由于更严格地依赖语言的规则,尤其是极端情况,它确实倾向于揭示人们依赖未定义行为的情况。作为个人说明,我多年来一直使用-O3在金融领域运行生产软件,并且还没有遇到如