GEANT4 (大規模なモンテカルロ C++ シミュレーション フレームワーク、多数の共有ライブラリ) を使用したシミュレーション コードの実行。ゴールド リンカーと標準の BFD ベースのリンカーを使用して、GEANT と私のアプリをコンパイルしてリンクしました。ゴールドの方が少し速く走っているように見えます (1'47" vs 1'51")。誰かが違いの理由を明らかにすることができますか? Ubuntu 15.04、64 ビット、GCC 4.9.2。各テストを約 10 回実行します。所要時間は最短で、他のアクティビティはなく、1 つのターミナルです。
2 に答える
当然、コンパイラが異なれば、リンカーが異なれば結果も異なります。結果は主に、各リンカーで有効になっている (および使用可能な) 最適化オプションに依存します。表示される違いの考えられる理由の 1 つを次に示しますが、他にも多数の理由が考えられます。
-fipa-icf
関数と読み取り専用変数に対して同一コードの折りたたみを実行します。最適化によりコード サイズが縮小され、関数を別の名前の同等の関数に置き換えることで、アンワインド スタックが妨げられる可能性があります。リンク時の最適化を有効にすると、最適化がより効果的に機能します。それにもかかわらず、動作は Gold リンカー ICF 最適化に似ていますが、GCC ICF はさまざまなレベルで機能するため、最適化は同じではありません。GCC によってのみ検出される同等のものと、Gold のみによって検出される同等のものがあります。
から: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
最後になりましたが、実際のバイナリ コンテンツ以外にも、ランタイムに影響を与える可能性のある多くの環境要因があります。たとえば、キャッシュのスラッシングは実行時間にかなりの影響を与える可能性があります。また、10 回の実行のセットは、統計的結論を出すには小さすぎます。