使用 O3 优化级别编译 GSL

Compile GSL with O3 optimization level

我的程序严重依赖于 GSL 的特殊功能,因此我想让它 运行 更快,所以我希望编译具有更高优化级别的 GSL。

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

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

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

由于该级别激活了可能会大大增加代码大小的优化。这意味着在某些情况下,它创建的二进制文件与使用 -O2 优化的二进制文件相比甚至更慢。这种情况很少发生。更有可能的是编译时间大幅增加、二进制文件大小增加和几乎无法衡量的性能变化等影响。

-O3 实际上破坏某些东西在过去很常见,但在过去的几年里,我没有遇到 -O3 实际上优化导致二进制文件破坏的东西.

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

有趣的选项是 -O3 甚至 -Os。我过去遇到过两个选项都比 -O2.

提高了性能

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