【问题标题】:What GCC optimization flags and techniques are safe across CPUs?哪些 GCC 优化标志和技术在 CPU 之间是安全的?
【发布时间】:2019-02-25 09:10:30
【问题描述】:

在编译/链接适用于 ISA 的所有实现(例如 x86-64)的 C/C++ 库或程序时,从正确性和运行时性能的角度来看,哪些优化标志是安全的?我希望优化能够产生正确的结果,并且不会损害特定 CPU 的性能。例如,我想避免在第 8 代 Intel Core i7 上产生运行时性能改进,但在 AMD Ryzen 上导致性能下降的优化标志。

PGO、LTO 和-O3 安全吗?它是否仅依赖于-march-mtune(或不存在)?

【问题讨论】:

标签: gcc optimization


【解决方案1】:

假设您的代码定义明确,它们都应该是“安全的”。

如果您不想专注于特定的 CPU 系列,那么请不要理会-march-mtune;默认适合通用 x86_64。

PGO 总是一个好主意,它主要用于避开分支。

LTO 和 -O3 可以对不同的代码库产生不同的影响。例如,如果您的代码受益于矢量化,那么 -O3 比 -O2 大胜,但是额外的内联和展开会导致更大的代码大小,这对于缓存更有限的系统可能是不利的。

最后,唯一真正有意义的建议是:衡量它,看看什么对您的代码有好处。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多