web-dev-qa-db-ja.com

マルチCPU、マルチコア、ハイパースレッド

マルチCPU、マルチコア、ハイパースレッドの違いを説明するために、誰かが私にいくつかのドキュメントを勧めてもらえますか?私は常にこれらの違いについて、また異なるシナリオにおける各アーキテクチャの長所/短所について混乱しています。

編集:オンラインで学び、他の人のコメントから学んだ後の私の現在の理解です。誰でもコメントをレビューできますか?

  1. ハイパースレッドはそれらの中で最も劣った技術ですが、安価だと思います。その主なアイデアは、コンテキストの切り替え時間を節約するための重複レジスタです。
  2. マルチプロセッサはハイパースレッドよりも優れていますが、異なるCPUは異なるチップ上にあるため、異なるCPU間の通信はマルチコアよりもレイテンシが長く、複数のチップを使用すると、マルチコアよりも費用と電力消費が大きくなります;
  3. マルチコアはすべてのCPUを単一のチップに統合しているため、異なるCPU間の通信のレイテンシはマルチプロセッサに比べて大幅に短縮されます。 1つのチップを使用してすべてのCPUを収容するため、消費電力が少なく、マルチプロセッサシステムよりも安価です。

事前に感謝、ジョージ

75
George2

マルチCPUは最初のバージョンでした。1つ以上のCPUチップを搭載した1つ以上のメインボードがあります。ここでの主な問題は、CPUが邪魔にならないように、CPUが内部データの一部を他のCPUに公開する必要があることでした。

次のステップはハイパースレッディングでした。メインボード上に1つのチップがありますが、内部に2つの部分が2つあるため、同時に2つの命令を実行できます。

現在の開発はマルチコアです。基本的には元のアイデア(いくつかの完全なCPU)ですが、シングルチップです。利点:チップ設計者は、同期信号用の追加のワイヤをチップに簡単に配置できます(ピンで配線し、混雑したメインボードを経由して2番目のチップに配線する必要はありません)。

今日のスーパーコンピューターはマルチCPU、マルチコアです。通常2〜4個のCPUを搭載した多くのメインボードがあり、各CPUはマルチコアであり、それぞれに独自のRAMがあります。

[編集]あなたはそれでほぼ正しい。ほんのいくつかの小さな点:

  • ハイパースレッディングは、単一のコアで一度に2つのコンテキストを追跡し、異常なCPUコアにより多くの並列性を提供します。これにより、1つのスレッドがキャッシュミス、分岐予測ミス、または高遅延命令からの結果を待ってストールした場合でも、実行ユニットに作業が供給されます。これは、多くのハードウェアを複製することなく、より多くの合計スループットを得る方法ですが、もしあれば、各スレッドを個別に遅くします。 詳細についてはこのQ&Aを参照してください 、およびこの段落の前の文言で何が間違っていたかの説明。

  • マルチCPUの主な問題は、マルチCPU上で実行されるコードが最終的にRAMにアクセスすることです。 N個のCPUがありますが、RAMにアクセスするバスは1つだけです。したがって、a)各CPUがかなりの量のRAMアクセス、b)RAM =問題を引き起こさないでください。c)最も重要なことは、CPU 2が内部キャッシュに持っているメモリアドレスにCPU 1が書き込むと、CPU 2に通知されることです。それが起こらない場合、CPU 2はキャッシュされた値を喜んで使用します。

    リストにタスクがあり、利用可能なすべてのCPUにタスクを分散させたいと考えてください。そのため、CPU 1はリストから最初の要素を取得し、ポインターを更新します。 CPU 2も同じことを行います。効率上の理由から、両方のCPUは数バイトをキャッシュにコピーするだけでなく、「キャッシュライン」全体(それが何であれ)をコピーします。仮定は、バイトXを読み取ると、すぐにX + 1も読み取ることです。

    現在、両方のCPUのキャッシュにメモリのコピーがあります。 CPU 1は、リストから次のアイテムを取得します。キャッシュ同期がなければ、CPU 2がリストを変更したことにも気付かず、CPU 2と同じアイテムで動作し始めます。

    これは、マルチCPUを事実上非常に複雑にするものです。この副作用により、コード全体が単一のCPUでのみ実行された場合に得られるパフォーマンスよりもパフォーマンスが低下する可能性があります。ソリューションはマルチコアでした。キャッシュを同期するために必要な数のワイヤを簡単に追加できます。あるキャッシュから別のキャッシュにデータをコピーすることもできます(フラッシュラインをリロードせずにキャッシュラインのpartsを更新するなど)またはキャッシュロジックCPUが実際のRAMの同じ部分にアクセスするときに、すべてのCPUが同じキャッシュラインを取得し、CPU 1が変更を行うまで数ナノ秒間CPU 2をブロックするだけです。

[編集2]マルチコアがマルチCPUよりもシンプルな主な理由は、メインボード上で、同期を有効にするために必要な2つのチップ間ですべてのワイヤを配線できないことです。さらに、信号は30cm/nsのトップのみを移動します(光の速度。ワイヤーでは、通常、はるかに少なくなります)。また、多層メインボードでは、信号が相互に影響を及ぼし合うことを忘れないでください(クロストーク)。 0は0V、1は5Vであると考えたいのですが、実際には、「0」は-0.5V(1-> 0からラインをドロップするときのオーバードライブ)と.5Vの間にあり、「1」は0.8Vを超えます。

単一のチップ内にすべてがある場合、信号ははるかに高速に実行され、好きなだけ多くできます(まあ、ほぼ:)。また、信号クロストークの制御ははるかに簡単です。

82
Aaron Digulla

IntelのWebサイト または Yale University の短い記事で、デュアルCPU、マルチコア、およびハイパースレッディングに関する興味深い記事を見つけることができます。

ここで必要なすべての情報を見つけていただければ幸いです。

簡単に言うと、マルチCPUまたはマルチプロセッサシステムには複数のプロセッサがあります。マルチコアシステムは、同じダイ上に複数のプロセッサを備えたマルチプロセッサシステムです。ハイパースレッディングでは、同じプロセッサ上で複数のスレッドを実行できます(つまり、これらの複数のスレッド間のコンテキスト切り替え時間は非常に短いです)。

マルチプロセッサは30年前から存在していましたが、主にラボで使用されていました。マルチコアは、新しい人気のあるマルチプロセッサです。現在、サーバープロセッサは、マルチプロセッサとともにハイパースレッディングを実装しています。

これらのトピックに関するウィキペディアの記事は非常に説明的です。

2
amit