質問

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

編集:オンラインで学習し、他の人のコメントから学んだ後の私の現在の理解は次のとおりです。誰かコメントを見直してもらえませんか?

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

よろしくお願いします、ジョージ

役に立ちましたか?

解決

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

次のステップはハイパースレッディングでした。メインボード上には 1 つのチップがありますが、内部にはいくつかの部品が 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 を非常に複雑にしている原因です。この副作用により、コード全体が 1 つの CPU 上でのみ実行された場合よりもパフォーマンスが低下する可能性があります。解決策はマルチコアでした。キャッシュを同期するために必要なだけワイヤを簡単に追加できます。あるキャッシュから別のキャッシュにデータをコピーすることもできます (更新 部品 キャッシュラインをフラッシュしたり再ロードしたりする必要がなくなります)など。あるいは、キャッシュ ロジックは、すべての CPU が実際の RAM の同じ部分にアクセスするときに同じキャッシュ ラインを取得するようにし、CPU 1 が変更を行うまで数ナノ秒間 CPU 2 をブロックするだけでもよいでしょう。

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

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

他のヒント

あなたは、デュアルCPU、マルチコアおよびハイパースレッディングに<のhref = "http://www.intel.com/cd/ids/developer/asmo-na/eng/200677についての興味深い記事を見つけることができます。 HTM」のrel = "nofollowをnoreferrer">インテルのウェブサイトのか<のhref =から短い記事で "http://www.yale.edu/pclt/PCHW/Hyperthreading.htm" のrel = "nofollowをnoreferrer" >エール大学はします。

私はあなたがここにあなたが必要なすべての情報を見つけることを願っています。

一言で言えば:マルチCPUまたはマルチプロセッサシステムは、複数のプロセッサを有しています。マルチコアシステムは、同じダイ上の複数のプロセッサを有するマルチプロセッサシステムです。ハイパースレッディングでは、複数のスレッド(つまり、これら複数のスレッド間のコンテキストスイッチ時間が非常に小さい場合)、同じプロセッサ上で実行することができます。

マルチプロセッサは、ラボになりましたが、ほとんど30年間がありました。マルチコアは、新しい人気のマルチプロセッサです。サーバプロセッサは、今日のマルチプロセッサと一緒にハイパースレッディングを実装します。

これらのトピックのWikipediaの記事はかなり例示するものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top