Multi-CPU, Multi-Core und Hyper-Thread

79

Kann mir jemand 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- und Nachteile jeder Architektur in verschiedenen Szenarien.

BEARBEITEN: Hier ist mein aktuelles Verständnis, nachdem ich online gelernt und aus den Kommentaren anderer gelernt habe. Kann jemand bitte einen Kommentar abgeben?

  1. Ich denke, Hyper-Thread ist die minderwertigste Technologie unter ihnen, aber billig. Die Hauptidee besteht darin, doppelte Register zu erstellen, um Zeit für den Kontextwechsel zu sparen.
  2. Multi-Prozessor ist besser als Hyper-Thread, aber da sich verschiedene CPUs auf verschiedenen Chips befinden, hat die Kommunikation zwischen verschiedenen CPUs eine längere Latenz als Multi-Core, und bei Verwendung mehrerer Chips sind die Kosten und der Stromverbrauch höher als bei Multi-Core ;;
  3. Multi-Core integriert alle CPUs auf einem einzigen Chip, sodass die Latenz der Kommunikation zwischen verschiedenen CPUs im Vergleich zu Multi-Prozessoren erheblich reduziert wird. Da ein einziger Chip für alle CPUs verwendet wird, verbraucht er weniger Strom und ist kostengünstiger als ein Multiprozessorsystem.

Danke im Voraus, George

George2
quelle
Hyperthreading ist nicht minderwertig. Dies ist besonders für Server sehr nützlich. Es gibt abnehmende Renditen von ILP (was den Prozessor beschäftigt, indem sequentielle Anweisungen neu angeordnet werden). Hyperthreading ist eine Alternative zur Steigerung der Parallelität: Mehrere Hardware-Threads werden ohne großen Aufwand ausgeführt.
Amit
Wie wäre es mit meinen anderen Punkten zu Multi-Core und Multi-Prozessor? Glauben Sie, dass meine Punkte richtig sind? Stimmt etwas nicht?
George2
1
@ George2 - Deine 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 den normalen Gebrauch ist Multi-Core der beste Schuss!
Bogdan Constantinescu
Danke Bogdan, mit Ihrer Bestätigung bin ich zuversichtlicher! :-)
George2
Das ist eine schreckliche Beschreibung von Hyperthreading. Der Hauptpunkt besteht darin, die Leistung pro Thread aufzugeben, um einen höheren Gesamtdurchsatz zu erzielen, wobei nur ein wenig zusätzliche Hardware im Front-End eines nicht in Ordnung befindlichen Kerns vorhanden ist. In dieser Frage und Antwort wird nach einem ähnlichen Absatz in der akzeptierten Antwort gefragt (vor meiner Bearbeitung, die ihn behoben hat).
Peter Cordes

Antworten:

86

Multi-CPU war die erste Version: Sie hätten ein oder mehrere Mainboards mit einem oder mehreren CPU-Chips. Das Hauptproblem dabei war, dass die CPUs einen Teil ihrer internen Daten der anderen CPU aussetzen mussten, damit sie sich nicht in die Quere kamen.

Der nächste Schritt war Hyper-Threading. Ein Chip auf dem Mainboard, aber einige Teile waren intern zweimal vorhanden, sodass zwei Befehle gleichzeitig ausgeführt werden konnten.

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 Synchronisationssignale einfach in den Chip einführen (anstatt sie an einem Pin herausführen zu müssen, dann über das überfüllte Mainboard und in einen zweiten Chip).

Supercomputer sind heutzutage Multi-CPU- und Multi-Core-Computer: Sie haben viele Mainboards mit normalerweise 2-4 CPUs, jede CPU ist Multi-Core und jeder hat seinen eigenen RAM.

[EDIT] Du hast das ziemlich richtig verstanden. Nur ein paar kleine Punkte:

  • Durch Hyper-Threading werden zwei Kontexte gleichzeitig in einem einzelnen Kern verfolgt, wodurch mehr Parallelität zum CPU-Kern außerhalb der Reihenfolge erzielt wird. Auf diese Weise werden die Ausführungseinheiten mit Arbeit versorgt, selbst wenn ein Thread aufgrund eines Cache-Fehlers, einer Fehlvorhersage der Verzweigung oder des Wartens auf Ergebnisse von Anweisungen mit hoher Latenz blockiert ist. Es ist eine Möglichkeit, einen höheren Gesamtdurchsatz zu erzielen, ohne viel Hardware zu replizieren, aber wenn überhaupt, verlangsamt es jeden Thread einzeln. In diesen Fragen und Antworten finden Sie weitere Details und eine Erklärung, was mit dem vorherigen Wortlaut dieses Absatzes nicht stimmte.

  • Das Hauptproblem bei Multi-CPUs besteht darin, dass der auf ihnen ausgeführte Code möglicherweise auf den RAM zugreift. Es gibt N CPUs, aber nur einen Bus, um auf den RAM zuzugreifen. Sie müssen also über Hardware verfügen, die sicherstellt, dass a) jede CPU eine angemessene Menge an RAM-Zugriff erhält, b) dass der Zugriff auf denselben Teil des RAM keine Probleme verursacht und c) vor allem, dass CPU 2 benachrichtigt wird wenn CPU 1 in eine Speicheradresse schreibt, die CPU 2 in ihrem internen Cache hat. Wenn dies nicht der Fall ist, verwendet CPU 2 den zwischengespeicherten Wert gerne, ohne zu wissen, dass er 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 macht dasselbe. Aus Effizienzgründen kopieren beide CPUs nicht nur die wenigen Bytes in den Cache, sondern eine ganze "Cache-Zeile" (was auch immer das sein mag). Die Annahme ist, dass Sie beim Lesen von Byte X bald auch X + 1 lesen werden.

    Jetzt haben beide CPUs eine Kopie des Speichers in ihrem Cache. CPU 1 ruft dann das nächste Element aus der Liste ab. Ohne Cache-Synchronisierung hat es nicht bemerkt, dass CPU 2 auch die Liste geändert hat, und es beginnt mit dem gleichen Element wie CPU 2 zu arbeiten.

    Dies macht Multi-CPU effektiv so kompliziert. Nebenwirkungen 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 war Multi-Core: Sie können problemlos so viele Drähte hinzufügen, wie Sie zum Synchronisieren der Caches benötigen. Sie können sogar Daten von einem Cache in einen anderen kopieren ( Teile einer Cache-Zeile aktualisieren , ohne sie leeren und neu laden zu müssen) usw. Oder die Cache-Logik kann sicherstellen, dass alle CPUs dieselbe Cache-Zeile erhalten, wenn sie auf denselben Teil von zugreifen echter RAM, der einfach CPU 2 für einige Nanosekunden blockiert, bis CPU 1 seine Änderungen vorgenommen hat.

[EDIT2] Der Hauptgrund, warum Multi-Core einfacher ist als Multi-CPU, ist, dass Sie auf einem Mainboard einfach nicht alle Drähte zwischen den beiden Chips verlegen können, die Sie für eine effektive Synchronisierung benötigen. Außerdem bewegt sich ein Signal nur über 30 cm / ns (Lichtgeschwindigkeit; in einem Draht haben Sie normalerweise viel weniger). Und vergessen Sie nicht, dass sich auf einem mehrschichtigen Mainboard die Signale gegenseitig beeinflussen (Übersprechen). Wir denken gerne, dass 0 0 V und 1 5 V ist, aber in Wirklichkeit liegt "0" zwischen -0,5 V (Overdrive beim Ablegen einer Leitung von 1-> 0) und 0,5 V und "1" liegt über 0,8 V.

Wenn Sie alles in einem einzigen Chip haben, laufen die Signale viel schneller und Sie können so viele haben, wie Sie möchten (na ja, fast :). Außerdem ist das Signalübersprechen viel einfacher zu steuern.

Aaron Digulla
quelle
3
Ihre Vorstellung von Hyper-Threading kann etwas irreführend sein, da Hyperthreading "nur" die parallele Ausführung mehrerer Threads simuliert - aber hauptsächlich versucht, die Multithread-Leistung mithilfe der integrierten CPU-Logik zu verbessern.
JC Inacio
@jcinacio, verbessert Hyper-Threading die Leistung mehrerer Prozesse? Warum?
George2
@ Aaron, 1. Ich habe meine aktuellen Punkte in meinem ursprünglichen Beitrag bearbeitet, nachdem ich von Ihnen gelernt habe. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? 2. Was bedeutet "einige ihrer internen Daten der anderen CPU aussetzen, damit sie sich nicht in die Quere kommen". in deinem Beitrag?
George2
@ Aaron, Ihre Antwort ist so hervorragend, meine letzte Frage, warum löst die Multi-Core-CPU das Problem der Synchronisierung des CPU-Status / Warten auf RAM-Probleme? Ich denke, wenn die Codelogiken identisch sind, besteht immer noch das Problem der Synchronisierung und des Wartens auf RAM. Irgendwelche Kommentare?
George2
1
@AmitP Bitte beachten Sie, dass zu breite Fragen bei Programmierern eher abgelehnt und geschlossen werden. Weitere Informationen finden Sie unter Programmierer.SE. Eine Anleitung für Stack Overflow
Mücke
4

Auf der Intel-Website oder in einem kurzen Artikel der Yale University finden Sie einige interessante Artikel zu Dual-CPU, Multi-Core und Hyper-Threading .

Ich hoffe, Sie finden hier alle Informationen, die Sie benötigen.

Bogdan Constantinescu
quelle
Bogdan, ich habe meine aktuellen Punkte in meinem ursprünglichen Beitrag bearbeitet. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? Ich habe sie gelernt, nachdem ich Ihre empfohlenen Links gelesen hatte.
George2
@ George2 - Deine 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
Bogdan Constantinescu
2
Beide Links sind defekt :(
rkachach
2

Kurz gesagt: 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 Kontextwechselzeit zwischen diesen mehreren Threads ist sehr gering).

Multiprozessoren gibt es seit 30 Jahren, aber meistens in Labors. Multi-Core ist der neue beliebte Multiprozessor. Serverprozessoren implementieren heutzutage Hyperthreading zusammen mit Multiprozessoren.

Die Wikipedia-Artikel zu diesen Themen sind sehr anschaulich.

amit
quelle
Amit, 1. Ich habe meine aktuellen Punkte in meinem ursprünglichen Beitrag bearbeitet, nachdem ich von Ihnen gelernt habe. Könnten Sie bitte helfen, zu überprüfen und zu kommentieren? 2. Was bedeutet Sterben und Zerreißen in Ihrem Beitrag?
George2