使用O3优化级别编译GSL

时间:2016-02-19 11:51:21

标签: c compiler-optimization gsl

我的程序在很大程度上取决于GSL的特殊功能,因此我想让它运行得更快,所以我希望以更高的优化级别编译GSL。

当我编译gsl时,默认的CFLAGS是" -g -O2"如果我在配置" ./ configure"时什么都不做。我想知道为什么gsl默认为O2的优化级别,因为O3符合标准。我尝试使用" ./ configure CFLAGS =' -g -O3'"进行编译和测试。但我仍然不确定一切是否会奏​​效。

有谁能告诉我为什么GSL默认为O2而不是O3?如果我默认为O3会不会很危险?谢谢!

1 个答案:

答案 0 :(得分:2)

优化级别3只有在绝对确定它有助于库的情况下才能使用。

由于该级别激活了可能会大大增加代码大小的优化。这意味着在某些情况下,与使用-O2优化的二进制文件相比,它会创建更慢的二进制文件。怎么会很少发生这种情况。更有可能是大量增加编译时间的效果,以及增加的二进制大小和几乎不可测量的性能变化。

-O3实际上破坏了某些东西在一段时间后非常普遍,但在过去的几年中,我没有一个案例,其中-O3实际上优化了导致二进制分解的东西。< / p>

最后,您可以测试优化级别。由于-O2是默认值,因此可以肯定的是,在这种情况下,这是编译操作的最佳设置。如果您愿意,可以尝试使用不同的设置对其进行编译,以确定它是否会产生任何性能差异。

有趣的选项是-O3甚至是-Os。过去我遇到的情况都是两个选项都比-O2提高了性能。

所以真正的答案是:试一试,看看会发生什么。