哪些GCC优化标志和技术在CPU之间是安全的?

时间:2018-09-21 01:58:22

标签: gcc optimization

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

PGO,LTO和-O3安全吗?它是否仅取决于-march-mtune(或不存在)?

1 个答案:

答案 0 :(得分:4)

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

如果您不想专门研究某个特定的CPU系列,那么就不理会-march-mtune了;默认值适合通用x86_64。

PGO始终是一个好主意,主要用于避免分支。

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

最后,唯一真正有意义的建议是:对其进行度量,并查看对您的代码有什么好处。