Gleichzeitiges Multithreading ( SMT ) ist eine Technik zur Verbesserung der Gesamteffizienz superskalarer CPUs mit Hardware-Multithreading. SMT ermöglicht die Ausführung mehrerer unabhängiger Ausführungsthreads, um die von modernen Prozessorarchitekturen bereitgestellten Ressourcen besser zu nutzen.
Details [ edit ]
Der Name multithreading ist mehrdeutig, da nicht nur mehrere Threads gleichzeitig auf einem CPU-Kern ausgeführt werden können ( mit unterschiedlichen Seitentabellen, verschiedenen Task-Statussegmenten, unterschiedlichen Schutzringen, unterschiedlichen E / A-Berechtigungen usw.). Obwohl sie auf demselben Kern laufen, sind sie vollständig voneinander getrennt. Multithreading ist in seinem Konzept dem präemptiven Multitasking ähnlich, wird jedoch auf Thread-Ebene der Ausführung in modernen superskalaren Prozessoren implementiert.
Simultaneous Multithreading (SMT) ist eine der zwei Hauptimplementierungen des Multithreading, die andere Form ist zeitliches Multithreading (auch als Super-Threading bekannt). Beim zeitlichen Multithreading kann jeweils nur ein Thread von Anweisungen in einer bestimmten Pipeline-Stufe ausgeführt werden. Beim gleichzeitigen Multithreading können Anweisungen von mehr als einem Thread gleichzeitig in einer beliebigen Pipeline-Stufe ausgeführt werden. Dies erfolgt ohne große Änderungen an der grundlegenden Prozessorarchitektur: Die wichtigsten erforderlichen Ergänzungen sind die Möglichkeit, Befehle von mehreren Threads in einem Zyklus abzurufen, und eine größere Registerdatei, um Daten von mehreren Threads zu enthalten. Die Anzahl der gleichzeitigen Threads kann von den Chipherstellern festgelegt werden. Zwei gleichzeitige Threads pro CPU-Kern sind üblich, aber einige Prozessoren unterstützen bis zu acht gleichzeitige Threads pro Kern.
Da es sich tatsächlich um eine Effizienzmethode handelt, die unvermeidlich Konflikte um gemeinsam genutzte Ressourcen verstärkt, kann es schwierig sein, deren Wirksamkeit zu messen oder sich darauf zu einigen. Die gemessene Energieeffizienz von SMT mit parallelen nativen und verwalteten Workloads bei historischen SMT (Hyper-Threading) -Implementierungen von 130 bis 32 nm ergab jedoch, dass SMT in 45-nm- und 32-nm-Implementierungen extrem energieeffizient ist, selbst mit Inorder-Atom-Prozessoren. [1] In modernen Systemen nutzt SMT die Parallelität mit sehr wenig zusätzlicher dynamischer Leistung. Das heißt, selbst wenn die Leistungssteigerungen minimal sind, können die Einsparungen beim Stromverbrauch beträchtlich sein. [ Zitat benötigt ]
Einige Forscher haben gezeigt, dass die zusätzlichen Fäden zum proaktiven Saatgut verwendet werden können eine gemeinsam genutzte Ressource wie ein Cache, um die Leistung eines anderen einzelnen Threads zu verbessern, und behauptet, dies zeige, dass SMT nicht nur die Effizienz erhöht. Andere verwenden SMT, um redundante Berechnungen für einen bestimmten Grad der Fehlererkennung und -wiederherstellung bereitzustellen.
In den meisten aktuellen Fällen geht es jedoch bei SMT darum, die Speicherlatenz zu verbergen, die Effizienz zu steigern und den Durchsatz der Berechnungen pro eingesetzter Hardware zu erhöhen. Zitat erforderlich ]
Taxonomy edit ]
Beim Prozessordesign gibt es zwei Möglichkeiten, den On-Chip-Parallelismus mit weniger Ressourcenanforderungen zu erhöhen: Zum einen handelt es sich um eine superskalare Technik, bei der versucht wird, Instruktion-Level-Parallelismus (ILP) zu nutzen. der andere ist der Multithreading-Ansatz, der Thread-Level-Parallelismus (TLP) nutzt.
Superscalar bedeutet, dass mehrere Befehle gleichzeitig ausgeführt werden, während Thread-Level-Parallelismus (TLP) Anweisungen von mehreren Threads innerhalb eines Prozessorchips gleichzeitig ausführt. Es gibt viele Möglichkeiten, mehr als einen Thread in einem Chip zu unterstützen, nämlich:
- Interleaved Multithreading: Interleaved-Ausgabe mehrerer Anweisungen aus verschiedenen Threads, auch als zeitliches Multithreading bezeichnet. Es kann weiter in feinkörniges Multithreading oder grobkörniges Multithreading unterteilt werden, abhängig von der Häufigkeit der verschachtelten Probleme. Feinkörniges Multithreading - wie in einem Barrel-Prozessor - gibt nach jedem Zyklus Anweisungen für verschiedene Threads aus, während grobkörniges Multithreading nur wechselt, um Anweisungen aus einem anderen Thread auszugeben, wenn die aktuelle Ausführung ausgeführt wird Thread verursacht einige lange Latenzzeitereignisse (wie Seitenfehler usw.). Grobkörniges Multithreading ist häufiger für weniger Kontextwechsel zwischen Threads. Beispielsweise setzt der Montecito-Prozessor von Intel grobkörniges Multithreading ein, während das UltraSPARC T1 von Sun feinkörniges Multithreading verwendet. Für Prozessoren, die nur eine Pipeline pro Kern haben, ist Interleaved-Multithreading die einzige Möglichkeit, da pro Zyklus höchstens ein Befehl ausgegeben werden kann.
- Simultaneous Multithreading (SMT): Mehrere Befehle werden in einem Zyklus von mehreren Threads ausgegeben. Der Prozessor muss dazu superskalar sein.
- Multi-Processing auf Chipebene (CMP oder Multicore): Integriert zwei oder mehr Prozessoren in einen Chip, die jeweils unabhängig voneinander Threads ausführen.
- Kombination aus Multithreaded / SMT / CMP. [19659022] Der entscheidende Faktor für die Unterscheidung ist, wie viele Anweisungen der Prozessor in einem Zyklus ausgeben kann und wie viele Threads die Anweisungen enthalten. Zum Beispiel ist UltraSPARC T1 von Sun Microsystems (bis zum 14. November 2005 als "Niagara" bekannt) ein Multicore-Prozessor in Kombination mit feinkörnigem Multithreading-Verfahren anstelle von simultanem Multithreading, da jeder Kern jeweils nur einen Befehl ausgeben kann.
Historische Implementierungen [ edit ]
Während Multithreading-CPUs seit den 1950er Jahren auf dem Markt sind, wurde das simultane Multithreading erstmals 1968 von IBM im Rahmen des ACS-360-Projekts untersucht. [2] ] Der erste mit SMT entwickelte kommerzielle Mikroprozessor war der Alpha 21464 (EV8). Dieser Mikroprozessor wurde von DEC in Zusammenarbeit mit Dean Tullsen von der University of California in San Diego und Susan Eggers und Henry Levy von der University of Washington entwickelt. Der Mikroprozessor wurde nie veröffentlicht, da die Alpha-Linie der Mikroprozessoren kurz vor der Übernahme von Compaq durch HP eingestellt wurde, die wiederum DEC erworben hatte. Dean Tullsens Arbeit wurde auch zur Entwicklung der Hyper-Threading-Versionen (Hyper-Threading-Technologie oder HTT) der Intel Pentium 4-Mikroprozessoren wie "Northwood" und "Prescott" verwendet.
Moderne kommerzielle Implementierungen [ edit ]
Der Intel Pentium 4 war der erste moderne Desktop-Prozessor, der simultanes Multithreading implementierte, beginnend mit dem 3.06 GHz-Modell, das 2002 veröffentlicht wurde und seitdem eingeführt wurde eine Reihe ihrer Prozessoren. Intel nennt die Funktionalität Hyper-Threading und stellt eine grundlegende SMT-Engine mit zwei Threads bereit. Intel behauptet eine Geschwindigkeitsverbesserung von bis zu 30% [3] im Vergleich zu einem ansonsten identischen Pentium 4 ohne SMT. Die beobachtete Leistungsverbesserung hängt stark von der Anwendung ab. Beim Ausführen von zwei Programmen, die die volle Aufmerksamkeit des Prozessors erfordern, kann es jedoch so aussehen, als würde eines oder beide Programme etwas verlangsamt, wenn das Hyper-Threading aktiviert ist. [4] Dies liegt am Wiedergabesystem der Pentium 4-Bindung wertvolle Ausführungsressourcen aufbauen, die Konkurrenz um Ressourcen wie Bandbreite, Caches, TLBs, Puffereinträge umsortieren, die Prozessorressourcen zwischen den beiden Programmen angleichen, wodurch die Ausführungszeit variiert. Der Pentium 4 Prescott-Kern erhielt eine Wiedergabewarteschlange, die die für das Wiedergabesystem erforderliche Ausführungszeit reduziert. Dies reicht aus, um diesen Performance-Hit vollständig zu überwinden. [5]
Die neuesten MIPS-Architekturentwürfe von Imagination Technologies umfassen ein SMT-System, das als "MIPS MT" MIPS bekannt ist MT bietet sowohl schwere virtuelle Verarbeitungselemente als auch leichtere Hardware-Mikrogewebe. RMI, ein Cupertino-basiertes Startup, ist der erste MIPS-Anbieter, der einen Prozessor-SOC mit acht Kernen bereitstellt, von denen jeder vier Threads ausführt. Die Threads können im Feinkornmodus ausgeführt werden, wobei in jedem Zyklus ein anderer Thread ausgeführt werden kann. Den Threads können auch Prioritäten zugewiesen werden. MIPS-CPUs von Imagination Technologies haben zwei SMT-Threads pro Kern.
Das Blue Gene / Q von IBM verfügt über 4-Wege-SMT.
Die im Mai 2004 angekündigte IBM POWER5 wird entweder als Dual-Core-Dual-Chip-Modul (DCM) oder als Quad-Core- oder Oct-Core-Multichip-Modul (MCM) geliefert, wobei jeder Kern einen Zweithread enthält SMT-Motor. Die IBM-Implementierung ist komplexer als die vorherigen, da sie den verschiedenen Threads eine andere Priorität zuweisen kann, feinkörniger ist und die SMT-Engine dynamisch ein- und ausgeschaltet werden kann, um die Workloads besser auszuführen, bei denen ein SMT-Prozessor verwendet wird Leistung nicht steigern. Dies ist die zweite Implementierung von allgemein verfügbarem Hardware-Multithreading von IBM. Im Jahr 2010 veröffentlichte IBM auf dem POWER7-Prozessor basierende Systeme mit acht Kernen mit jeweils vier simultanen intelligenten Threads. Dadurch wird der Threading-Modus in Abhängigkeit von der Anzahl der zu diesem Zeitpunkt geplanten Prozessthreads zwischen einem Thread, zwei Threads oder vier Threads umgeschaltet. Dies optimiert die Verwendung des Kerns für minimale Antwortzeiten oder maximalen Durchsatz. IBM POWER8 verfügt über 8 intelligente simultane Threads pro Kern (SMT8).
IBM z13 hat zwei Threads pro Kern (SMT-2).
Obwohl viele Leute berichteten, dass UltraSPARC T1 von Sun Microsystems (bekannt als "Niagara" bis zu seiner Veröffentlichung vom 14. November 2005) und der inzwischen nicht mehr erhältliche Prozessor mit dem Codenamen "Rock" (ursprünglich angekündigt) bekannt waren 2005, aber nachdem viele Verzögerungen im Jahr 2009 aufgehoben wurden) sind Implementierungen von SPARC fast ausschließlich auf die Nutzung von SMT- und CMP-Techniken ausgerichtet, Niagara verwendet SMT jedoch nicht. Sun bezeichnet diese kombinierten Ansätze als "CMT" und das Gesamtkonzept als "Throughput Computing". Der Niagara hat acht Kerne, aber jeder Kern hat nur eine Pipeline. Daher verwendet er feinkörniges Multithreading. Im Gegensatz zu SMT, bei dem Anweisungen aus mehreren Threads das Problemfenster in jedem Zyklus gemeinsam nutzen, verwendet der Prozessor eine Round-Robin-Richtlinie, um Anweisungen aus dem nächsten aktiven Thread in jedem Zyklus auszugeben. Dies macht es einem Barrel-Prozessor ähnlicher. Der Rock-Prozessor von Sun Microsystems ist anders, er hat komplexere Kerne mit mehr als einer Pipeline.
Die Oracle Corporation Sparc T3 hat acht feinkörnige Fäden pro Kern, Sparc T4, Sparc T5, Sparc M5, M6 und M7 haben acht feinkörnige Fäden pro Kern, von denen zwei gleichzeitig ausgeführt werden können.
Fujitsu Sparc64 VI verfügt über grobkörniges Vertical Multithreading (VMT), Sparc VII und neuere Versionen über 2-Wege-SMT.
Intel Itanium Montecito verwendete grobkörniges Multithreading und Tukwila und neuere 2-Wege-SMT (mit Dual-Domain-Multithreading).
Intel Xeon Phi verfügt über 4-Wege-SMT (mit Zeitmultiplex-Multithreading) mit hardwarebasierten Threads, die im Gegensatz zum regulären Hyperthreading nicht deaktiviert werden können. [7] Der 2008 veröffentlichte Intel Atom ist das erste Intel-Produkt 2-Wege-SMT (als Hyper-Threading vermarktet), ohne das Umordnen von Anweisungen, die spekulative Ausführung oder das Umbenennen von Registern zu unterstützen. Intel führte das Hyper-Threading mit der Nehalem-Mikroarchitektur wieder ein, nachdem es auf der Core-Mikroarchitektur nicht vorhanden war.
AMD Bulldozer-Mikroarchitektur FlexFPU und Shared L2-Cache sind Multithreading-Kerne, aber ganzzahlige Kerne im Modul sind Single-Threading, es handelt sich also nur um eine partielle SMT-Implementierung. 19659005] AMD Zen-Mikroarchitektur besitzt 2-Wege-SMT.
Die VISC-Architektur [10][11][12] verwendet den Virtual Software Layer (Übersetzungsschicht), um einen einzelnen Befehlsstrang an das Global Front End zu senden, das Anweisungen in virtuelle Hardware aufteilt Threadlets die dann an separate virtuelle Kerne gesendet werden. Diese virtuellen Kerne können sie dann an die verfügbaren Ressourcen auf einem der physischen Kerne senden. Mehrere virtuelle Kerne können Threadlets in den Neuordnungspuffer eines einzelnen physischen Kerns schieben, wodurch Teilbefehle und Daten von mehreren Threadlets gleichzeitig über die Ausführungsports aufgeteilt werden können. Jeder virtuelle Kern verfolgt die Position der relativen Ausgabe. Diese Form des Multithreading kann die Leistung eines einzelnen Threads erhöhen, indem einem einzelnen Thread die Nutzung aller Ressourcen der CPU ermöglicht wird. Die Ressourcenzuteilung erfolgt dynamisch auf einer Latenzzeit nahe eines einzelnen Zyklus (1 bis 4 Zyklen, abhängig von der Änderung der Zuweisung in Abhängigkeit von den jeweiligen Anwendungsanforderungen. Wenn zwei virtuelle Kerne um Ressourcen konkurrieren, gibt es geeignete Algorithmen, um dies zu bestimmen welche ressourcen sind wo zu vergeben.
Nachteile [ edit ]
Je nach Design und Architektur des Prozessors kann gleichzeitiges Multithreading die Leistung beeinträchtigen, wenn die gemeinsam genutzten Ressourcen zu Leistungsengpässen führen. [13] Kritische Argumente Es ist eine erhebliche Belastung für Softwareentwickler, die prüfen müssen, ob gleichzeitiges Multithreading für ihre Anwendung in verschiedenen Situationen gut oder schlecht ist, und zusätzliche Logik einzufügen, um sie auszuschalten, wenn die Leistung beeinträchtigt wird. Derzeit gibt es keine geeigneten API-Aufrufe, um zu verhindern, dass Prozesse mit unterschiedlicher Priorität Ressourcen voneinander trennen. [14]
Es gibt auch Sicherheitsbedenken bei bestimmten gleichzeitigen Multithreading-Implementierungen. Intels Hyperthreading in NetBurst-basierten Prozessoren weist eine Sicherheitsanfälligkeit auf, durch die es einer Anwendung möglich ist, einen kryptografischen Schlüssel aus einer anderen Anwendung zu stehlen, die in demselben Prozessor ausgeführt wird, indem die Verwendung des Caches überwacht wird wird angeblich auf der Black Hat 2018 erklärt. [16]
Siehe auch [ edit ]
Referenzen [ edit
- ASPLOS '11
- ^ Smotherman, Mark (25. Mai 2011). Msgstr "Ende des IBM ACS - Projekts". School of Computing, Clemson Universität . 19. Januar 2013 .
- ^ Marr, Deborah (14. Februar 2002). "Architektur und Mikroarchitektur der Hyper-Threading-Technologie" (PDF) . Intel Technology Journal . 6 (1): 4. doi: 10.1535 / itj . Abgerufen 25. September 2015 .
- ^ "CPU-Leistungsbewertung Pentium 4 2.8 und 3.0".
- "Wiederholung: Unbekannte Funktionen des NetBurst Core. Seite 15 ". Wiederholung: Unbekannte Merkmale des NetBurst-Kerns . xbitlabs.com. Nach dem Original am 14. Mai 2011 archiviert . 24. April 2011 2011.
- ^ "MIPS MT ASE description".
- ^ Barth, Michaela; Byckling, Mikko; Ilieva, Nevena; Saarinen, Sami; Schliephake, Michael (18. Februar 2014). Weinberg, Volker, Hrsg. "Best-Practice-Handbuch Intel Xeon Phi v1.1". Partnerschaft für Advanced Computing in Europa.
- ^ "AMD Bulldozer Family Module Multithreading". wccftech. Juli 2013.
- ^ Halfacree, Gareth (28. Oktober 2010). "AMD stellt Flex FP vor". bit-tech.
- ^ Cutress, Ian (12. Februar 2016). "Untersuchung der Architektur von Soft Machines: Ein Element von VISC zur Verbesserung des IPC". AnandTech.
- ^ "Next Gen Processor Performance Revealed". VR-Welt. 4. Februar 2016. Aus dem Original am 2017-01-13 archiviert.
- ^ "Architectural Waves". Weiche Maschinen. 2017. Archiviert aus dem Original am 29.03.2017.
- ^ "Replay: Unbekannte Funktionen des NetBurst-Kerns. Seite 15". Wiederholung: Unbekannte Merkmale des NetBurst-Kerns . xbitlabs.com. Nach dem Original am 14. Mai 2011 archiviert . 24. April 2011 .
- ^ Wie gut ist Hyperthreading?
- ^ Hyper-Threading als schädlich
- ^ TLBleed: Beim Schützen Ihres CPU-Caches reichen nicht
- General
- Shar, Leonard E .; Davidson, Edward S. (Februar 1974). Msgstr "Ein Multiprozessor - System, das durch Pipelining implementiert wird". Computer . 7 (2): 42–51. Doi: 10.1109 / MC.1974.6323457.
- Tullsen, D.M .; Eggers, S. J .; Levy, H.M. (1995). "Gleichzeitiges Multithreading: Maximierung der On-Chip-Parallelität". 22. Internationales Symposium über Computerarchitektur . IEEE. S. 392–403. ISBN 978-0-89791-698-1
- Tullsen, D.M .; Eggers, S. J .; Emer, J. S .; Levy, H. M .; Lo, J. L .; Stamm, R. L. (1996). Msgstr "Ausnutzungsmöglichkeit: Befehlsabruf und Ausgabe auf einem implementierbaren Simultaneous Multithreading - Prozessor". 23. Internationales Symposium über Computerarchitektur . IEEE. p. 191. doi: 10.1145 / 232973.232993. ISBN 978-0-89791-786-5.
- Esmaeilzadeh, H .; Cao, T .; Yang, X .; Blackburn, S. M .; McKinley, K.S. (2011). "Rückblick auf die Sprach- und Hardware-Revolutionen: gemessene Leistung, Leistung und Skalierung" (PDF) . ASPLOS XVI Vorträge der sechzehnten internationalen Konferenz über Architekturunterstützung für Programmiersprachen und Betriebssysteme (PDF) . ACM. S. 319–332. doi: 10.1145 / 1950365.1950402. ISBN 978-1-4503-0266-1.
Externe Links [ edit ]
No comments:
Post a Comment