哪些 gcc 编译器选项可以安全地用于数值编程?
打开 gcc 优化的简单方法是添加-0#
到编译器选项。很有诱惑力的说-O3
。但是,我知道这-O3
包括非保存的优化,因为一旦包含此选项,数值计算的结果可能会有所不同。如果算法稳定,结果的微小变化可能是微不足道的。另一方面,精度可能是某些数学运算的问题,因此数学优化可能会产生重大影响。
我发现在调试过程中考虑编译器相关问题很不方便。即我不想怀疑代码中的微小变化是否会导致截然不同的行为,因为编译器在内部改变了它的优化。
如果我希望代码中的行为具有确定性,因此可以安全地添加哪些选项?哪些几乎是安全的,也就是说,与性能收益相比,哪些选项只引起很小的不确定性?
我想到了这样的选项:-finline -finline-limit=2000
即使它们很长,也可以内联函数。