数値プログラミングに安全に使用できる gcc コンパイラ オプションはどれですか?
gcc の最適化を有効にする簡単な方法は-0#
、コンパイラ オプションに追加することです。と言いたくなる-O3
。-O3
ただし、このオプションが含まれると数値計算の結果が異なる可能性があるという意味で保存されない最適化が含まれていることは知っています。アルゴリズムが安定している場合、結果の小さな変化は重要ではない場合があります。一方、特定の数学演算では精度が問題になる可能性があるため、数学の最適化は大きな影響を与える可能性があります。
デバッグの過程でコンパイラに依存する問題を考慮するのは不便だと思います。つまり、コンパイラが内部的に最適化を変更したため、コードの小さな変更が大幅に異なる動作につながるかどうか疑問に思いたくありません。
コード内で決定論的 (したがって制御可能) な動作が必要な場合、追加しても安全なオプションはどれですか? ほぼ安全なものはどれですか?つまり、パフォーマンス上の利点と比較して、わずかな不確実性しか引き起こさないオプションはどれですか?
私は次のようなオプションを考えています:-finline -finline-limit=2000
関数が長くても関数をインライン化します。