1

私は同じ C++ 実装を 2 つの異なる計算環境で実行しています。最初の環境は 48 Gb メモリの Xeon 2.3 GHz で、2 つ目は 3 Gb メモリの Core2 Duo 2.53 GHz です。コンパイルには、同様のオプションで g++ を使用しました。最初のシステムは 64 ビットの Red Hat、2 番目のシステムは 32 ビットの Ubuntu であることに注意してください。さらに、g++ のバージョンが異なり、最初のシステムではバージョン 4.1.2 がインストールされ、2 番目のシステムではバージョン 4.6.1 がインストールされます。

コードを実行すると、両方のシステムがまったく同じソリューションを返します。各システムの時間結果は次のとおりです。

System-1:
real 0m19.623s
user 2m13.588s
sys 0m3.118s

System-2:
real 0m11.229s
user 0m11.785s
sys 0m1.496s

2 つの質問があります。

  1. System-1 (より優れた計算環境) がこのコードを System-2 よりも劣って実行するのはなぜですか?
  2. System-1 では、リアルタイムとユーザー時間の差がかなりあります。なぜそのような状況が発生するのですか?
4

2 に答える 2

0

問題は解決された。アプリケーションで共有ライブラリを使用しています。この共有ライブラリは、デフォルト設定でマルチスレッドで動作することを認識しています。シングルスレッドに設定すると、両方のシステムで正常に動作し始めます。

于 2012-05-27T22:58:00.173 に答える
0

ユーザー時間が大きいのはなぜですか?

2 つのコアがあり、両方がそれぞれ 1 分間ユーザー モードで実行されている場合、2 ユーザー分が得られます。

これは、コードがマルチスレッドでうまく機能しないことを示唆しています。ロックの競合やキャッシュの競合を待っているビジー状態などが原因である可能性があります。

于 2012-05-14T13:30:50.963 に答える