2 *XeonX5650を搭載したローカル計算サーバーから2*Opteron 4280を搭載した別のローカル計算サーバーに移行しています...今日、新しいマシン(AMD 1)ですばらしいCプログラムを起動しようとしましたが、パフォーマンス>50%、すべての可能なパラメーターを同じに保ちます(乱数ジェネレーターのシードでも)。私はこの問題を掘り下げ始めました。「amdopteron4200コンパイラオプション」をグーグルで検索すると、GCC 4.6.3コンパイラで使用できる「フラグ」(オプション)という2つの提案がありました。私はこれらの旗で遊んで、ここの下のプロットで私の発見を要約しました...
写真のアップロードは許可されていないので、チャートはこちらhttps://plus.google.com/117744944962358260676/posts/EY6djhKK9ab
誰か(コーディングの人)がこのテーマについてコメントをくれるかどうか疑問に思っています。特に、「... -march =bdver1-fprefetch-loop-arrays」と「...-fprefetch」という事実に興味があります。 -loop-arrays -march = bdver1 "は別のランタイムで生成されますか?また、「-funroll-all-loops」がすでに「-O3」または「-Ofast」に含まれているかどうかもわかりません。このフラグをもう一度追加しても、まったく違いが生じるのはなぜですか。Intelプロセッサにフラグを追加すると、パフォーマンスがさらに低下するのはなぜですか( "-ffast-math"のみを除きます。これは明らかです。これは、私が理解しているように、定義上、浮動小数点演算の精度が低く、高速であるためです。 )?
マシンと私のプログラムについてもう少し詳しく説明します。2*XeonX5650マシンはgcc4.4.3を搭載したUbuntuサーバーで、2(マザーボード上のCPU)X6(それぞれの実際のコア)* 2(ハイパースレッディング)=24スレッドマシンです。 、そして私の「実験」またはベンチマーク中に何かが実行されていました...
2 * Opteron4280マシンはgcc4.6.3を搭載したUbuntuサーバーであり、2(マザーボード上のCPU)X4(各あたりの実際のコア=ブルドーザーモジュール)* 2(AMDブルドーザースレッド=コアの種類)=18スレッドマシン、そして私はそれを私の素晴らしい「ベンチマーク」のためだけに使用していました...
私のベンチマークプログラムは単なるモンテカルロシミュレーションであり、最初はIOを実行し、その後、〜10^5のモートカルロループを実行して結果を取得します。したがって、整数と浮動小数点の両方の計算プログラムであると想定し、時々ループして、ランダムに生成された「結果」が私にとって十分に「良い」かどうかを確認します...プログラムはシングルスレッドであり、私はランダムジェネレータシードを含むすべてのベンチマーク(明らかですが、とにかく言及する必要があります)に対してまったく同じパラメータで起動していました(したがって、結果は100%同一でした)...プログラムはメモリインテンシブではありません。結果として得られるランタイムは、標準の「/ usr / bin/time」コマンドによる単なる「ユーザー」時間です。