6

モンテカルロ計算を行うために、12 コアの MacPro を入手しました。同社の Intel Xeon プロセッサではハイパースレッディング (HT) が有効になっているため、実際には 24 のプロセスを並行して実行して完全に活用する必要があります。ただし、計算は 24x50% よりも 12x100% で実行する方が効率Processor的であるため、より高いパフォーマンスを得るために、システム設定のペインでハイパー スレッディングをオフにしようとしました。HT をオフにすることもできます。

hwprefs -v cpu_ht=false

次に、いくつかのテストを実行した結果、次の結果が得られました。

  1. 残念なことに、12 個の並列タスクが HT の有無にかかわらず同時に実行されます。
  2. HT がオフの場合、24 の並列タスクは 20% を失います (私たちが考えていた -50% ではありません)。
  3. HT がオンの場合、24 タスクから 12 タスクに切り替えると、効率が 20% 低下します (これも驚くべきことです)。
  4. HT がオフの場合、24 から 12 に切り替えても何も変わりません。

ハイパースレッディングは計算のパフォーマンスを低下させるだけのようで、回避する方法はありません。計算に使用するプログラムは、Fortran で記述され、.NET でコンパイルされていgfortranます。このハードウェアでより効率的にする方法はありますか?


アップデート:当社のモンテカルロ計算 (MCC) は通常、データの損失を回避するため、およびその他の理由により段階的に実行されます (このような段階を常に回避できるとは限りません)。私たちの場合、各ステップは可変期間の多くのシミュレーションで構成されています。各ステップは多数の並列タスクに分割されるため、期間も可変です。基本的に、すべての高速タスクは、最も低速なタスクが完了するまで待機する必要があります。この事実により、より大きなステップを作成する必要があり、平均化による時間のずれが少なくなり、プロセッサは待機に時間を浪費しなくなります。これが、24*1.33 GHz の代わりに 12*2.66 GHz を使用する動機です。HT をオフにできる場合、HT を使用する 24 タスクから HT を使用しない 12 タスクに切り替えることで、約 +10% のパフォーマンスが得られます。ただし、テストでは、20% を失うことが示されています。

テストでは非常に大きなステップを使用しましたが、通常はステップが短いため、効率がさらに向上します。

もう 1 つの理由があります。一部の計算では 3 ~ 5 GB のメモリが必要になるため、12 個の高速タスクを使用することがいかに経済的であるかがわかります。共有メモリの実装に取り​​組んでいますが、長期プロジェクトになる予定です。したがって、既存のハードウェア/ソフトウェアをできるだけ高速にする方法を見つける必要があります。

4

4 に答える 4

8

これは、答えというよりも拡張されたコメントです。

あなたの観察はそれほど驚くべきものではありません。ハイパースレッディングは、並列化に対する貧弱なアプローチであり、1 つの CPU で保留中の命令の 2 つのパイプラインを持つことができます。ただし、追加の浮動小数点演算ユニットまたは整数演算ユニットやその他のレジスタは提供されません。1 つのパイプラインが ALU (または最近では何と呼ばれているものでも) にデータを供給できない場合、もう 1 つのパイプラインが 1 ~ 2 クロック サイクル以内にアクティブ化されます。これは、ハイパースレッディングを使用しない CPU の状況とは対照的です。命令パイプラインが停止すると、CPU が速度を回復する前にフラッシュして別のプロセスからの命令を補充する必要があります。

ハイパースレッディングに関するウィキペディアの記事では、これらすべてがかなりうまく説明されています。

パイプライン ストールが完全に同期され、プログラム ミックスの合計実行時間の大部分を占める負荷を実行している場合は、非ハイパースレッド プロセッサからハイパースレッド プロセッサに移行することで、プログラムの速度を 2 倍にすることができます。

命令パイプラインで停止することのないプログラムを作成できる場合 (これは大きな問題です)、ハイパースレッディングは (実行の高速化に関して) まったくメリットがありません。あなたが測定したのは、HT による高速化ではありません (まあ、HT による高速化ですが、実際にはそれは望ましくありません) が、スレッドがパイプラインの動きを維持できないことです。

あなたがしなければならないことは、実際には HT によるスピードアップを減らすことです! むしろ、パイプラインをいっぱいにして、12 のプロセス (コアごとに 1 つ) の実行速度を上げる必要があります。個人的には、12 コアでプログラムの実行を最適化する間、ハイパースレッディングをオフにします。

楽しむ。

于 2010-10-04T13:31:16.743 に答える
2

ベンチマークの説明を理解するのに少し苦労しています。

100%を、12のタスクとhtoffで実行できる作業量と定義しましょう。また、同じ期間に2倍の成果を上げることができるとしたら、それを200%と呼びます。では、他の3つのボックスに入れる数字は何ですか?

編集:あなたの番号で更新されました。

             without HT     with HT
12 tasks     100%           100%
24 tasks     100%           125%

したがって、HTを無効にすると、スレッドが基本的に一時停止している間(メモリやディスクからのデータを待機しているときなど)に時間のギャップがあるため、実際には2.66 GHzで実行されませんが、少し少ない。ハイパースレッディングを有効にすると、CUPはこれらの瞬間的なギャップを一時停止する代わりにタスクを切り替えるため、使用される処理能力の合計量が増加します。

于 2010-10-04T13:19:07.983 に答える
1

つまり、HTをオンにすると、12タスクから24タスクに切り替えると、効率が20%向上します良いベンチマーク!

一方、各スレッドが別々のタスクでのみ動作できるようにプログラムが作成されている場合(単一のタスクを小さなチャンクに分割して同時に続行できるのではなく)、それぞれのレイテンシを削減するためタスク(最初から最後まで)は、ソフトウェアでスレッドの数を12に制限するだけです。ハードウェアHTスイッチはどちらの位置でも構いません。

于 2010-10-04T11:58:07.430 に答える
0

ハイパースレッディング (およびアクティブな CPU の数) を有効/無効にする Xcode ツールのアプリについては、この投稿を参照してください。この設定は、スリープまたは再起動後も保持されません: http://www.logicprohelp.com/forum/viewtopic.php?f=5&t=88835

(Instruments アプリを実行し、最初の画面をキャンセルしてから、CPU 設定を変更します)。

于 2012-12-28T19:05:26.663 に答える