2

2 つのデータベース間のデータ転送を目的としたアプリケーションがあります。このアプリケーションの操作のほとんどは独立しており、同時に実行されます。以前、このアプリケーションは 4 コア Intel マシンで実行されていましたが、現在、このアプリケーションを AMD Quad(4) コア マシンに移植する必要があります。以下のいくつかの点について疑問があります。

  1. AMD はハイパー スレッディング (HTT) をサポートしていないことがわかりました。これは明らかに、アプリケーションのパフォーマンス (スループット) が低下することを意味します。コンテキストの切り替えが原因でパフォーマンスが低下しますか? はいの場合、同時に実行されるスレッドの数が減少しますか??

  2. アプリケーションのスループットを向上させるために、コードの変更が必要かどうか。

4

3 に答える 3

5

ハイパースレッディングの代わりに、AMD は Bulldozer の時点で (一部によって) クラスタリングと呼ばれる別のルートを採用しました。MinGW がもたらし
たリンクで説明されているように、これは、単一の AMD コアが 2 つの整数 "HW スレッド" (HT によく似ています) + 1 つの浮動小数点専用スレッドを維持できることを意味します。HW スレッド間ですべてのコア リソースを共有する HT とは異なり、このスキームではフロントエンド (命令フェッチとデコード) のみが共有されることに注意してください。バックエンドは複製されます。つまり、バックエンドにバインドされている場合 (実行にほとんどの時間がかかっていた場合)、HT の 2 倍のリソース BW を取得できるはずであり、フロントエンドにバインドされている場合は HT とほぼ同じです (たとえば、複数のブランチを持つ複雑な制御フローがあります)。

ほぼ同じことを言っている次の引用に注意してください。

他のすべてが同じであれば、単一の SMT (ハイパースレッド) コアよりもスレッド化されたパフォーマンスが得られますが、専用コアは 2 つ未満です。

そのため、基本的に各 HW スレッドは、1 つの Intel HW スレッド以上になりますが、完全な Intel コアにはなりません。個人的な好みに応じて、それをスーパー HW スレッドまたはラメ コアと見なすことができます。

ただし、これは大きな「しかし」ですが、AMD はここで少しごまかしていました。実際のコンボ (新しく「モジュール」と呼ばれる) ではなく、これらの「スーパー」スレッドに基づいてコア数を公開しました。これは、4 コアの AMD マシンが実際には 2 つのモジュールと 4 つのスーパー スレッドを備えていることを意味します。したがって、2 コアの Intel マシンと同じ HW スレッド カウントになりますが (より強力なスレッドを使用します)、4 コアの Intel マシンではスレッドの半分になります。 -コア HT が有効な Intel マシン。使用するマシンを指定していないため、コア数が正しい意味を持っていることを確認してください。

上で述べたように、パフォーマンスは異なる場合があります。実行負荷の高いワークロードの場合、並列パイプラインの数が同じであるため、4 コア AMD と 4 コア Intel の間で同様の結果が得られる可能性があり、HT は Intel にあまり役に立たない可能性があります (「可能性はあるが」はここでは非常に広い意味で使用されています。より適切な比較を行うには、各マシンのさまざまなバッファーのサイズ、並列 ALU とポートの数、発行幅などを考慮に入れる必要があります。) 一方、ブランチやメモリ集約型のワークロードでは、データ/ブランチの解決を待ってスタックする傾向があります-インテルは、コンテキスト切り替えのオーバーヘッドなしで、余分な 4 つの HW スレッドを並行してプルでき、より多くの作業を完了できます。

于 2013-10-21T15:14:33.147 に答える
1

Java は、ハードウェアに依存しないように作成されました。CPU が提供する機能について心配する必要はありません。

ところで、HTT の結果としてのパフォーマンスの向上は、ほとんどのベンチマークで常に非常に限られています (5 ~ 10%)。

覚えておいてください: すべてのメーカーやすべてのプロセッサーに搭載されているわけではありません。

DB のパフォーマンスに関する限り、並列処理を最大化し、コンテキスト スイッチを最小化することを検討する必要があります。

于 2013-10-21T09:28:45.360 に答える