我的程序在很大程度上取决于GSL的特殊功能,因此我想让它运行得更快,所以我希望以更高的优化级别编译GSL。
当我编译gsl时,默认的CFLAGS是" -g -O2"如果我在配置" ./ configure"时什么都不做。我想知道为什么gsl默认为O2的优化级别,因为O3符合标准。我尝试使用" ./ configure CFLAGS =' -g -O3'"进行编译和测试。但我仍然不确定一切是否会奏效。
有谁能告诉我为什么GSL默认为O2而不是O3?如果我默认为O3会不会很危险?谢谢!
答案 0 :(得分:2)
优化级别3只有在绝对确定它有助于库的情况下才能使用。
由于该级别激活了可能会大大增加代码大小的优化。这意味着在某些情况下,与使用-O2
优化的二进制文件相比,它会创建更慢的二进制文件。怎么会很少发生这种情况。更有可能是大量增加编译时间的效果,以及增加的二进制大小和几乎不可测量的性能变化。
-O3
实际上破坏了某些东西在一段时间后非常普遍,但在过去的几年中,我没有一个案例,其中-O3
实际上优化了导致二进制分解的东西。< / p>
最后,您可以测试优化级别。由于-O2
是默认值,因此可以肯定的是,在这种情况下,这是编译操作的最佳设置。如果您愿意,可以尝试使用不同的设置对其进行编译,以确定它是否会产生任何性能差异。
有趣的选项是-O3
甚至是-Os
。过去我遇到的情况都是两个选项都比-O2
提高了性能。
所以真正的答案是:试一试,看看会发生什么。