2009-03-25 4 views
64

Könnte jemand mir einige Dokumente empfehlen, um die Unterschiede zwischen Multi-CPU, Multi-Core und Hyper-Thread zu veranschaulichen? Ich bin immer verwirrt über diese Unterschiede und über die Vor-/Nachteile jeder Architektur in verschiedenen Szenarien.multi-CPU, multi-core und hyper-thread

EDIT: hier ist mein derzeitiges Verständnis nach Online-Lernen und Lernen von anderen Kommentare; Könnte jemand bitte einen Kommentar kommentieren?

  1. Ich denke, Hyper-Thread ist die unterlegenste Technologie unter ihnen, aber billig. Seine Hauptidee besteht in doppelten Registern, um die Kontextwechselzeit zu sparen.
  2. Multi-Prozessor ist besser als hyper-Thread, aber da unterschiedliche CPUs auf unterschiedlichen Chips sind, ist die Kommunikation zwischen den verschiedenen CPUs längerer Latenz als Multi-Core und mehrere Chips verwendet wird, es mehr Kosten und mehr Stromverbrauch als bei Multi-Core;
  3. Multi-Core integriert alle CPUs auf einem einzigen Chip, so dass die Latenz der Kommunikation zwischen verschiedenen CPUs im Vergleich zu Multi-Prozessor erheblich reduziert wird. Da es einen einzelnen Chip verwendet, um alle CPUs zu enthalten, verbraucht es weniger Energie und ist weniger teuer als ein Multiprozessorsystem.

Vielen Dank im Voraus, George

+0

Hyperthreading ist nicht minderwertig. Es ist sehr nützlich, insbesondere für Server. Es gibt abnehmende Erträge von ILP (Prozessor bleibt beschäftigt, indem sequentielle Befehle neu angeordnet werden). Hyperthreading ist eine Alternative zur Erhöhung der Parallelität: Mehrere Hardware-Threads werden ohne großen Overhead ausgeführt. –

+0

Wie wäre es mit meinen anderen Punkten über Multi-Core und Multi-Prozessor, denkst du, dass meine Punkte richtig sind? Irgendwas falsch? – George2

+1

@ George2 - Ihre Bearbeitung ist sehr wahr. Das ist die ganze Idee. :) Das Beste, was Sie auf einem Server bekommen können, ist wahrscheinlich eine Multi-Core-Multi-CPU, aber für die übliche Verwendung ist Multi-Core der beste Schuss! –

Antwort

77

Multi-CPU war die erste Version: Sie einen oder mehrere Mainboards mit einem oder mehreren CPU-Chips auf sie haben würde. Das Hauptproblem bestand darin, dass die CPUs einige ihrer internen Daten der anderen CPU offenlegen mussten, damit sie ihnen nicht in die Quere kommen konnten.

Der nächste Schritt war Hyper-Threading. Ein Chip auf dem Mainboard, aber es hatte einige Teile intern zweimal, so dass es zwei Anweisungen gleichzeitig ausführen konnte.

Die aktuelle Entwicklung ist Multi-Core. Es ist im Grunde die ursprüngliche Idee (mehrere komplette CPUs), aber in einem einzigen Chip. Der Vorteil: Chipdesigner können die zusätzlichen Drähte für die Sync-Signale einfach in den Chip stecken (anstatt sie auf einem Pin, dann über das überfüllte Mainboard und auf einen zweiten Chip zu legen).

Supercomputer sind heute Multi-CPU, Multi-Core: Sie haben viele Mainboards mit meist 2-4 CPUs, jede CPU ist Multi-Core und jeder hat seinen eigenen Arbeitsspeicher.

[EDIT] Sie haben das ziemlich genau richtig. Nur ein paar kleine Punkte:

  • Hyper-Threading verfolgt zwei Kontexte auf einmal in einem einzigen Kern, mehr parallel zu dem out-of-order-CPU-Kern freigelegt wird. Dies hält die Ausführungseinheiten mit der Arbeit zugeführt wurden, selbst dann, wenn ein Faden auf einem Cache-Fehltreffer zum Stillstand gekommen ist, Zweigfehlvorhersage oder für die Ergebnisse von hohen Latenz Anweisungen warten. Es ist ein Weg, um mehr Gesamtdurchsatz zu erhalten, ohne viel Hardware zu replizieren, aber wenn etwas verlangsamt es jeden Thread einzeln nach unten. See this Q&A for more details, und eine Erklärung, was mit dem vorherigen Wortlaut dieses Absatzes falsch war.

  • Das Hauptproblem bei Multi-CPU ist, dass Code auf sie läuft schließlich den RAM zugreifen. Es gibt N CPUs, aber nur einen Bus, um auf den RAM zuzugreifen. So müssen Sie einige Hardware haben, die dafür sorgt, dass a) jede CPU einen fairen Betrag von RAM-Zugriff erhält, b), die Zugriffe auf den gleichen Teil des RAM verursacht keine Probleme und c) am wichtigsten ist, wird die CPU 2 benachrichtigt wenn die CPU 1 in eine Speicheradresse schreibt, die die CPU 2 in ihrem internen Cache hat.Wenn das nicht passiert, wird CPU 2 glücklich den zwischengespeicherten Wert verwenden, ohne auf die Tatsache zu achten, dass es veraltet ist.

    Stellen Sie sich vor, Sie haben Aufgaben in einer Liste und möchten diese auf alle verfügbaren CPUs verteilen. CPU 1 holt also das erste Element aus der Liste und aktualisiert die Zeiger. CPU 2 wird das gleiche tun. Aus Gründen der Effizienz werden beide CPUs nicht nur die wenigen Bytes in den Cache kopieren, sondern eine ganze "Cache-Zeile" (was auch immer das sein mag). Die Annahme ist, dass Sie, wenn Sie Byte X lesen, bald auch X + 1 lesen.

    Nun sind beide CPUs haben eine Kopie des Speichers in ihrem Cache. Die CPU 1 holt dann das nächste Element aus der Liste. Ohne Cachesynchronisierung hätte es nicht bemerkt, dass CPU 2 auch die Liste geändert hat und es mit dem gleichen Element wie CPU 2 zu arbeiten beginnt.

    Das macht Multi-CPU so kompliziert. Nebenwirkungen davon können zu einer Leistung führen, die schlechter ist als die, die Sie erhalten würden, wenn der gesamte Code nur auf einer einzelnen CPU ausgeführt würde. Die Lösung bestand aus mehreren Kernen: Sie können problemlos so viele Drähte hinzufügen, wie Sie zum Synchronisieren der Caches benötigen. Sie könnten sogar Daten von einem Cache auf einem anderen kopieren (Teile eine Cache-Zeile zu aktualisieren, ohne sie zu spülen und mit neu laden) usw. Oder der Cache-Logik könnte sicherstellen, dass alle CPUs die gleiche Cache-Zeile erhalten, wenn sie die gleichen Zugang Teil des realen RAM, blockiert CPU 2 für einige Nanosekunden, bis CPU 1 seine Änderungen vorgenommen hat.

[EDIT 2] Der Hauptgrund, warum Multi-Core einfacher als Multi-CPU ist, dass auf einem Mainboard, Sie können einfach nicht alle Drähte zwischen den beiden Chips laufen, die Sie effektiv sync machen bräuchten zu . Außerdem läuft ein Signal nur 30 cm/ns (Lichtgeschwindigkeit; in einem Kabel haben Sie normalerweise viel weniger). Und vergessen Sie nicht, dass Signale auf einem mehrschichtigen Mainboard sich gegenseitig beeinflussen (Crosstalk). Wir denken gerne, dass 0 0V und 1 5V ist, aber in Wirklichkeit ist "0" etwas zwischen -0.5V (Overdrive beim Fallenlassen einer Linie von 1-> 0) und .5V und "1" ist etwas über 0.8V.

Wenn Sie alles innerhalb eines einzelnen Chips haben, laufen Signale viel schneller und Sie können so viele haben, wie Sie möchten (gut, fast :). Außerdem ist das Signalübersprechen viel einfacher zu steuern.

+2

Ihre Vorstellung von Hyper-Threading kann ein wenig irreführend sein, da Hyperthreading "nur" die parallele Ausführung mehrerer Threads simuliert - vor allem aber versucht, die Multithread-Performance durch eingebaute CPU-Logik zu verbessern. –

+0

@jcinacio, verbessert Hyper-Threading die Multiprozessleistung? Warum? – George2

+0

@Aaron, 1. Ich habe meine aktuellen Punkte in meinem ursprünglichen Post editiert, nachdem ich von dir gelernt habe. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? 2. Was bedeutet "einige interne Daten der anderen CPU offen legen, damit sie nicht in die Quere kommen." in deinem Beitrag? – George2

2

In Kürze: Multi-CPU oder Multi-Prozessor-System verfügt über mehrere Prozessoren. Ein Mehrkernsystem ist ein Mehrprozessorsystem mit mehreren Prozessoren auf demselben Chip. Beim Hyperthreading können mehrere Threads auf demselben Prozessor ausgeführt werden (dh die Zeit für den Kontextwechsel zwischen diesen mehreren Threads ist sehr klein).

Multi-Prozessoren haben jetzt seit 30 Jahren gibt es aber vor allem in Labors. Multi-Core ist der neue populäre Multi-Prozessor. Server-Prozessoren implementieren heutzutage Hyperthreading zusammen mit Multi-Prozessoren.

Die Wikipedia-Artikel zu diesen Themen sind sehr anschaulich.

+0

Amit, 1. Ich habe meine aktuellen Punkte in meinem ursprünglichen Post editiert, nachdem ich von Ihnen gelernt habe. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? 2. Was bedeutet sterben und reißen in Ihrem Beitrag? – George2

+0

Träne-> Jahr (Entschuldigung), sterben: http://en.wikipedia.org/wiki/Die_(integrated_circuit) –

+0

Gut, von Ihnen zu lernen. Amit! – George2

4

Sie können einige interessante Artikel über Dual-CPU-, Multi-Core- und Hyper-Threading unter Intel's website oder in einem kurzen Artikel von Yale University finden.

Ich hoffe, dass Sie hier alle Informationen finden, die Sie brauchen.

+0

Bogdan, ich habe meine aktuellen Punkte in meinem ursprünglichen Post editiert. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? Ich habe sie nach dem Lesen Ihrer empfohlenen Links gelernt. – George2

+0

@ George2 - Ihre Bearbeitung ist sehr wahr. Das ist die ganze Idee. :) Die beste Sache, die Sie auf einem Server bekommen können, ist wahrscheinlich eine Multi-Core-Multi-CPU –

+1

Beide Links sind gebrochen :( – redobot