我的程序在很大程度上依赖于GSL的特殊功能,因此我想让它运行得更快,所以我希望用更高的优化级别编译GSL。
当我编译gsl时,如果我在使用“./ -O2”进行配置时什么都不做,默认的CFLAGS就是"-g -O2“。我想知道为什么gsl只默认到O2的优化级别,因为O3是符合标准的。我试着用"./configure =‘-g -O3'“编译和测试,结果成功了。但我还是不确定是否一切都会成功。
有人能告诉我为什么GSL是默认的O2而不是O3吗?如果我默认为O3,这会很危险吗?谢谢!
发布于 2016-02-19 12:05:10
优化级别3只应用于绝对确定它对库有帮助的情况。
因为该级别激活了优化,这可能会大大增加代码的大小。这意味着在某些情况下,它会创建比使用-O2优化的二进制文件更慢的二进制文件。这种事怎么很少发生。更有可能的是这样的效果,比如大量增加编译时间,以及二进制大小的增加和几乎无法测量的性能变化。
在过去的一段时间里,-O3实际上破坏了一些东西是很常见的,但是在过去的几年里,我没有一个-O3实际上优化了导致二进制文件中断的东西的情况。
最后,优化级别是您可以测试的内容。由于-O2是默认的,所以在本例中这是编译操作的最佳设置,这是一个非常安全的选择。如果您喜欢,可以尝试使用不同的设置来编译它,看看它是否会产生任何性能差异。
有趣的选项是-O3,甚至是-Os。我过去也有过这样的情况,这两种选择都比-O2提高了性能。
所以真正的答案是:试一试,看看会发生什么。
https://stackoverflow.com/questions/35504633
复制相似问题