在编译/链接用于所有ISA实现(例如x86-64)的C/C++库或程序时,从正确性和运行时性能的角度来看,哪些优化标志是安全的?我希望优化能够产生正确的结果,并且不会对特定CPU的性能造成不利影响。例如,我想避免在第8代英特尔核心i7上产生运行时性能改进的优化标志,但在AMD上会导致性能下降。
PGO,LTO和-O3安全吗?它是否仅依赖于-march和-mtune (或它们不存在)?
发布于 2018-09-21 14:39:07
假设您的代码定义良好,它们都应该是“安全的”。
如果您不想专门针对某个特定的CPU家族,那么只需让-march和-mtune单独使用;默认设置适合一般的x86_64。
PGO总是一个好主意,它主要用于避免分支。
LTO和-O3对不同的代码基有不同的影响.例如,如果您的代码从矢量化中受益,那么-O3是比-O2更大的赢家,但是额外的内联和展开可能会导致更大的代码大小,这在缓存更有限的系统中可能是一个缺点。
最后,这里唯一真正有意义的建议是:度量它,看看对您的代码有什么好处。
https://stackoverflow.com/questions/52435573
复制相似问题