繁体   English   中英

GCC精心挑选的优化

[英]GCC handpicking Optimizations

我看到了这个线程,并且我有同样的问题,但是这个问题并未得到真正的回答: GCC标准优化行为

我试图弄清楚到底是什么标志在O1中引起了不可思议的性能提升。 我首先使用g++ -O1 -Q --help=optimizers找出设置了哪些标志,然后获取每个已启用的标志,并使用它们与g ++进行编译。 但是输出结果不同(二进制文件本身的大小不同)。

我该如何为g ++进行优化选择?

并非所有优化都有单独的标志,因此它们的组合不会生成与使用-O1或任何其他常规优化启用选项( -Os-O2等)相同的代码。 我还想像到,当您使用-O0 (默认值)时,许多特定的优化选项会被忽略,因为如果通常未启用优化功能,则它们会忽略通过的传递。

若要缩小性能提升的范围,可以尝试使用-O1 ,然后有选择地禁用优化。 例如:

g++ -O1 -fno-peephole -fno-tree-cselim -fno-var-tracking ...

但是您可能仍然没有这种运气。 可能是多种优化结合在一起可以提高性能。 这也可能是任何特定标志未涵盖的优化的结果。

我还怀疑更好的缓存局部性会导致您的“令人难以置信的性能提升”。 如果是这样,那可能是巧合,尤其是在-O1 通常,由于GCC能够消除您的代码块,或者是因为它实际上没有任何净效果,总是导致计算出相同的值或调用了未定义的行为,所以通常会带来性能的大幅提高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM