Vorlesung Rechnerarchitektur 2 Seite 1 Rechnerarchitektur 2 (Computer Architecture 2) Overview Introduction Parallelisim Threads, Synchronization Classification of Architectures SIMD Array Processors Vector Processors MIMD Shared Memory vs. Distributed Memory Classification of MIMD-Architectures Performance Modeling and Terms Sppeed up, logP, PRAM Amdahl’s Law Current Implementations Cluster Computing, MPP Programming Models Shared Memory vs. Distributed Memory Shared Memory address space synchronization critical area multithreading case study: POSIX Threads Message Passing concepts case study: MPI Parallel Languages Fortran 90 HPF Components of Parallel Computers Processing Nodes Interconnection Networks Architecture Examples MTAs Vorlesung Rechnerarchitektur 2 Seite 2 Rechnerarchitektur 2 (Computer Architecture 2) Requirements: This course requires experience of programming in C and Assembler and as basic knowledge the course on Computer Architecture 1 (WS) which covers the following items of sequential system architectures: Taxonomy of Computer Architectures, Basics of Processor Architecture, Pipelining, Hazards, Memory Hierarchy, Memory Management Unit, Caches, Cache Consistency, Main Memory, DRAM-Architecture, Instruction Sets, CISC, RISC, Superscalar, VLIW, MTA, Compilation Techniques Contents: Computer Architecture 2 covers the architecture of parallel systems and the basic programming models. Interconnection networks and communication protocols are presented. The implementation of commercially available systems and research activities are analysed. Concepts of Parallel Processing, Communication and Synchronization, Taxonomy of Interconnection Networks, Point-to-Point INs, Switched INs, Busses, Shuffles, Crossbars, Routing, Latency, Communication Protocols, SIMD-Architectures, MIMD-Architectures, Shared Memory, Distributed Memory, Virtual Shared Memory, Multi-thread-Architectures, Dataflow-Architectures Programming examples for the different architecture types will be implemented and tested on the available parallel systems. Vorlesung Rechnerarchitektur 2 Seite 3 Literaturliste für RA2 Hardware Giloi Wolfgang K. (empfehlenswert, Einführung) Rechnerarchitektur Springer Verlag, 1993 Culler, David E., Pal Singh, Jaswinder, Gupta, Anoop, (sehr empfehlenswert) Parallel Computer Architecture: A Hardware/Software Approach Morgan Kaufmann Publishers, Inc. 1999. Hwang, Kai (empfehlenswert) Advanced Computer Architecture Parallelism, Scalability, Programmability, Mc Graw Hill, 1993 Morgan Kaufmann Publishers, Inc., 1999. Waldschmidt Klaus (ed.) (für Interessierte, Übersicht) Parallelrechner: Architekturen - Systeme - Werkzeuge, Kap. 4 B.G.Teubner, Stuttgart, 1995. Stone, Harold S. (optional) High Performance Computer Architecture Addison Wesley, 1993 Hennessy J., Patterson D. (sehr teuer) Computer Architecture: A quantitative approach Morgan Kaufmann Publishers, Inc., 1995 (auf neueste Auflage achten) Vorlesung Rechnerarchitektur 2 Seite 4 Literaturliste für RA2 Software Programmieren in C: (Grundlagen) Kernighan, Ritchie: Programmieren in C. Zweite Ausgabe, Carl Hanser Verlag, 1990 Paralleles Programmieren: Wilson: Practical Parallel Programming. MIT Press, 1995 Lenoski, Weber: Scalable Shared-Memory Multiprocessing. Morgan Kaufmann Publishers, 1995 Foster: Designing and Building Parallel Programms. Addison-Wesley, 1995 MPI: Pacheco: Parallel Programming with MPI. Morgan Kaufmann Publishers, 1997 Sni, Otto, Huss-Ledermann, Walker, Dongarra: MPI. The Complete Reference. MIT Press, 1996 Gropp, Lusk, Skjellum: Using MPI. MIT Press, 1994 Threads: Nichols, Buttlar, Farrell: Phtreads Programming. O’Reilly, 1996 Kleiman, Shah, Smaalders: Programming with Threads. SunSoft Press, 1996 Verteilte Betriebssysteme: (optional, Ergänzung) Tanenbaum: Distributed Operating Systems. Prentice Hall, 1995 Parallel Processing and Parallel Algorithms, Theory and Computation, Roosta, Seyed H., Springer Verlag, 1999. Vorlesung Rechnerarchitektur 2 Seite 5 Einführung Warum Parallelrechner? Ziel: höhere Leistung !!! billigere Technologie Modularität Erweiterbarkeit (skalierbar) Fehlertoleranz Anforderungen an die Architektur Prozessoranzahl Speicherorganisation Kommunikationsmechanismus Synchronisationsmechanismus Verbindungsnetzwerk Fehlertoleranz Anforderungen an die Software Mehrprozessoranwendungen dedizierte Anwendung Zuordnung von Prozessen zu Prozessoren verteiltes Betriebssystem Fehlertoleranz Vorlesung Rechnerarchitektur 2 Seite 6 Einführung Verfahren der Leistungssteigerung Architektur Parallelarbeit Optimierung von: Speicherorganisation Speicherzugriffsgeschwindigkeit Verbindungsstrukturen Verbindungsnetzwerk Kommunikationsmechanismus Synchronisationsmechanismus Technologie Vorlesung Rechnerarchitektur 2 Seite 7 Einführung Grand Challenges Die hohen Anforderungen an die Rechenleistung werden von Anwendungen bestimmt, deren Lösung zu den großen Herausforderungen (‘Grand Challenges’) der Wissenschaft gehören. Die Anwendungen von Parallelrechnern können in zwei wesentliche Gruppen unterteilen werden, die numerischen und die nicht-numerischen. Die meisten der numerischen Anwendungen lassen sich als wirklichkeitsnahe Simulationen von naturwissenschaftlichen Disziplinen charakterisieren. Die Modellierung und Simulation ist erforderlich, weil sich Experimente zur Wissensgewinnung nicht durchführen lassen (Wettermodell) oder einfach zu kostspielig sind (Crash-Tests). Durch Simulation läßt sich außerdem die Entwicklungszeit von Prototypen und Produkten wesentlich verkürzen und die Sicherheit erhöhen, daß das entworfene Produkt den spezifizierten Anforderungen genügt, was in unserer heutigen, schnellebigen Zeit einer der entscheidenden Wettbewerbsvorteile sein kann. Speicherbedarf [MWords] Climate Modeling Fluid Turbulence Human Genome Vehicly Dynamics Ocean Circulation Viscous Fluid Dynamics Superconductor Modeling Quantum Chromodynamics 10 000 1 000 Vehicle Signature Structural Biology 100 72 Hour Weather Pharmaceutical Design Estimates of Higgs Boson Mass 10 3D Plasma Modeling 1 Chemical Design 48 Hour Weather 2D Plasma Airfoil Modeling Oil Reservoir Modeling 1980 0.1 1988 1991 1 1996 and beyond 10 100 1000 Rechenbedarf [GFLOPS] Vorlesung Rechnerarchitektur 2 Seite 8 Grundlagen paralleler Architekturen Einleitung Das Ziel der Entwicklung paralleler Rechnerachitekturen ist die Überwindung der Einschränkungen, die durch die sequentielle Verarbeitung nicht-paralleler Architekturen vorgegeben sind. Als wichtigste Einschränkung ist hier die Leistung eines Rechnersystems zu nennen. Neben weiteren funktionalen Eigenschaften von Parallelrechnern, (wie z.B. Fehlertoleranz, Modularität, Anwendungsspezialisierung, etc.) ist die Steigerung der Leistung, möglichst proportional zur Anzahl der parallelen Einheiten, die entscheidende Anforderung an die Entwicklung von parallelen Rechnerarchitekturen. Hierzu ist ein grundsätzliches Umdenken der Personen erforderlich, die Anwendungen, Algorithmen und Software entwickeln, um das Potential der parallelen Architekturen für konkrete Anwendungen ausschöpfen zu können. Der Hardwareentwurf paralleler Architekturen sollte die verschiedenen Anforderungen mit seinen parallelen Funktionseinheiten optimal unterstützen, wobei die Randbedingung der Kosteneffektivität bei der Realisierung eines parallelen Systems starke Berücksichtigung finden sollte (Verwendung preiswerter Technologie). Der aktuelle Trend, immer mehr Komponenten aus dem Bereich der Massenproduktion (COTS components off the shelff) einzusetzen, führte zu dem Aufkommen von Clustersystemen, bestehend aus Knoten mit PCs oder Workstations und der Entwicklung von Verbindungsnetzwerken, die für diese Systeme optimiert wurden. Vorlesung Rechnerarchitektur 2 Seite 9 Grundlagen paralleler ArchitekturenEinleitung Einleitung Getrieben wird die Entwicklung auf dem Gebiet der parallelen Architekturen durch die Anforderungen an immer höhere Rechenleistungen, die mit sequentiellen Architekturen entweder gar nicht oder aber nur durch einen sehr hohen technologischen Aufwand erzielbar sind. Die hohen Anforderungen an die Rechenleistung werden von Anwendungen bestimmt, deren Lösung zu den großen Herausforderungen (‘Grand Challenges’) der Wissenschaft gehören. Die Anwendungen von Parallelrechnern können in zwei wesentliche Gruppen unterteilen werden, die numerischen und die nicht-numerischen. Verteilte Datenbanken, parallele Symbolverwaltung und die digitale Schaltkreissimulation sind nur einige Beispiele für die Gruppe der nicht-numerischen Anwendungen. Die Lösung von solchen umfangreichen Aufgaben kann durch Aufteilung in Teilaufgaben und deren parallele Bearbeitung beschleunigt werden. Die wichtigsten Voraussetzungen für die Ausnutzung von Parallelität sind: die Existenz ausnutzbarer Parallelität die Erkennung der Parallelität die Aufteilbarkeit in Teilaufgaben das Vorhandensein von parallelen Verarbeitungseinheiten Die obere Grenze des Leistungsgewinns, den man durch Parallelisierung erhalten kann, ist vom Grad der Parallelität bestimmt, der in der Applikation enthalten ist. Dieser ist natürlich sehr stark von dem verwendeten Lösungsalgorithmus abhängig. Aufgaben, die bisher sequentiell ausgeführt wurden, müssen zur Parallelisierung in unabhängige Teilaufgaben zerlegt werden, was bei sequentiellen Algorithmen nicht immer möglich ist. Für eine Steigerung des Leistungsgewinn ist oft auch die Entwicklung neuer ‘parallelerer’ Algorithmen erforderlich. Wie gut die Ausnutzung der Parallelität gelingt, wird von der gewählten Systemarchitektur und der Effizienz der Abbildung des Algorithmus auf diese bestimmt.Die verschiedenen Ebenen, auf denen die Parallelität genutzt werden kann, wird im folgenden Abschnitt dargestellt und die sich daraus ergebenden Rechnerarchitekturen aufgezeigt. Die Parallelisierbarkeit eines Algorithmus hängt sehr stark vom Algorithmus selbst ab, nicht so sehr von den Eigenschaften der gewählten Rechnerarchitektur. Vorlesung Rechnerarchitektur 2 Seite 10 Grundlagen paralleler Architekturen Die Ebenen der Parallelität In Parallelrechnern ist die Ausnutzung aller Ebenen der Parallelität von ausschlaggebender Bedeutung. Nur ein ausgewogenes System bietet dem Benutzer den höchsten Leistungsgewinn. Die unterscheidbaren Ebenen der Parallelität erfordern auch verschiedene Maßnahmen, um einen Leistungsgewinn zu erreichen. Benutzt werden die im folgenden beschriebenen Ebenen. Sie sind heterogen, nach verschiedenen Merkmalen aufgeteilt und überlappen sich zum Teil. Zu jeder Ebene ist eine kurze Beschreibung der Maßnahmen zur Ausnutzung der Parallelität angefügt. 1 Maschinenbefehle instruction level parallelism a) Parallelität im organisatorischen Ablauf Überlappen von Operationen b) Operationen innerhalb einzelner Anweisungen chaining 2 Anweisungen eines Benutzerprogramms fine grain dataflow 3 Datenstrukturen medium grain 4 Kooperierende Prozesse coarse grain dataflow 5 einzelne Benutzerprogramme multi computing Die Parallelitätsebene mehrerer, parallel ablaufender Benutzerprogramme (‘tasks’) wird durch den Mehrbenutzerbetrieb (‘multi user mode’) von Rechnern ausgenutzt. Diese Betriebsart ist von Betriebssystemen sequentieller Rechner bestens bekannt und wird auf ihnen durch ein Zeitscheibenverfahren (‘time-multiplex’) emuliert. Durch den erhöhten Zeitaufwand der Betriebssystemfunktionen für den Mehrbenutzerbetrieb wird die Laufzeit der einzelnen Tasks verlängert. Die Ausnutzung dieser Parallelitätsebene steigert im wesentlichen den Durchsatz an Benutzerprozessen, nicht aber die Abarbeitungsgeschwindigkeit eines Programms. In parallelen Systemen mit wenigen Prozessoren können die Benutzerprozesse und unter Umständen auch die Betriebssystemprozesse auf die parallelen Prozessoren verteilt werden. Vorlesung Rechnerarchitektur 2 Seite 11 Grundlagen paralleler Architekturen Architekturformen Dadurch kann für ein solches System die Zuteilungszeit für einen lauffähigen Benutzerprozeß deutlich gesteigert werden und damit die Laufzeit der Applikation verringert werden, aber leider nicht unter die Laufzeit des Prozesses auf einem sequentiellen System mit einem Prozessor ohne Zeitscheibenverfahren. Bei massiv parallelen Systemen wird diese Ebene der Parallelität auf Grund der komplexen Kontrollvorgänge, speziell im Betriebssystem, selten mit dem notwendigen Leistungsgewinn ausgenutzt werden können und wird hier nicht weiter betrachtet. Die folgende Tabelle gibt eine Übersicht über die Parallelitätsebenen, ihren Parallelitätsgrad und die sich daraus ergebenden Architekturformen. Parallelitäts- potentieller Parallelitätsebene grad kooperierende Prozesse hoch Erkennung der Parallelität und Aufteilung in Teilaufgaben durch Anwender Algorithmus Architekturformen Multiprozessorsysteme mit verteiltem lokalen Speicher nachrichtenorientierte Parallelrechner Anwender auf Sprachebene Datenstrukturen hoch Anweisungen und Schleifen niedrig bis hoch Compiler Multiprozessorsysteme mit gemeinsamem Speicher ‘multi-threaded’ Architekturen Maschinenbefehle niedrig Compiler superskalare Prozessoren ‘very long instruction word’ Prozessoren Datenflußrechner Vektorrechner Feldrechner Parallelitätsebenen und ihre Architekturformen Vorlesung Rechnerarchitektur 2 Seite 12 Grundlagen paralleler Architekturen Kooperierende Prozesse Die Nutzung mehrerer verschiedener Parallelitätsebenen in den Architekturformen ist durchaus möglich und nur eine Frage des erreichbaren Leistungsgewinns. Die Pfeile in der Tabelle deuten diese übergreifenden Nutzungen an. Nachfolgend werden die einzelnen Parallelitätsebenen ausführlicher beschrieben. Die Parallelitätsebene der kooperierenden Prozesse ist eine häufig genutze Ebene. Sie beruht auf dem grundlegenden Konzept des Prozesses. Die Definition des Prozesses ist für die nachfolgende Beschreibung hilfreich. Definition : Ein Prozeß ist eine funktionelle Einheit, bestehend aus einem zeitlich invariantem Programm, einem Satz von Daten, mit dem der Prozeß initialisiert wird und einem zeitlich varianten Zustand [Gil93]. Auf sequentiellen Rechnern ist der Prozeß im wesentlichen eine Einheit, dessen Adreßraum gegenüber anderen Prozessen geschützt ist. Ein solcher Prozeß mit Adreßraumschutz wird als schwergewichtiger Prozeß bezeichnet und ist auch die Einheit, die auf der Benutzerprozeßebene verwendet wird. Die Kommunikation der Prozesse erfolgt durch die Mechanismen der Prozeßkommunikation (‘inter-process-communication’ IPC). Beim Client-Server Modell [Tan92] liegt die Aufteilung der Prozesse in dienstanfordernde (‘client’) und diensterbringende (‘server’) bereits vor und kann dadurch speziell auf dem Server einfach genutzt werden. Wird die Zerlegung einer Anwendung für die parallele Ausführung auf einem Parallelrechner vorgenommen, so ist ein Adreßraumschutz für diese Prozesse unerwünscht, da sie ja in einem gemeinsamen Adreßraum miteinander kooperieren sollen. Solche kooperierenden Prozesse im gleichen Adreßraum bezeichnet man als leichtgewichtig. Die Bezeichnung thread (Kontrollfaden) ist eine häufig anzutreffende für den leichtgewichtigen Prozess. Sind diese Prozesse voneinander datenunabhängig, so können sie parallel ausgeführt werden und sind damit konkurrent. Die Kommunikation der kooperierenden Prozesse kann entweder durch gemeinsame Daten (‘memory sharing’) oder durch expliziten Nachrichtenaustausch (‘message passing’) erfolgen. Im Abschnitt Kommunikation und Synchronisation wird auf diese Problematik noch näher eingegangen. Vorlesung Rechnerarchitektur 2 Seite 13 Grundlagen paralleler Architekturen Datenstrukturen Um einen Leistungsgewinn auf dieser Ebene zu erziehlen, muß man die in kooperierende Prozesse aufgeteilte Applikation auf entsprechende Verarbeitungseinheiten verteilen (‘mapping’) und die Prozesse dürfen keine zu starken Datenabhängigkeiten aufweisen. Als Verarbeitungseinheiten verwendet man parallel arbeitende Prozessoren mit jeweils eigenem Instruktionsstrom. Diese Architekturform wird nach Flynn [Fly72] als Parallelrechner mit mehrfacher Instruktionsverarbeitung und mehrfacher Datenverarbeitung (‘multiple instruction-multiple data stream’ MIMD) bezeichnet. Datenstrukturen bieten eine weitere Ebene der Nutzung von Parallelität. Als Beispiel sei die Verwendung von Vektoren und Matrizen angeführt, die für die Lösung von numerischen Problenen oft benutzt werden. Die Addition oder Multiplikation zweier Vektoren besteht aus datenunabhängigen Teiloperationen auf den Elementen des Vektors und kann damit konkurrent ausgeführt werden. Desweiteren ist die Adressierungsfunktion für den Zugriff auf die Elemente vorgegeben und ermöglicht damit auch den parallelen Zugriff auf die Elemente. Die Ausnutzung der Datenparallelität erfordert entweder Programmiersprachen mit Datenstrukturtypen [Gil93] und darauf definierten Operationen [For90] oder vektorisierende Compiler, die aus den Schleifen für die Beschreibung der Vektoroperationen die Maschinenbefehle für die Vektorverarbeitung erzeugen. Diese Datenparallelität bei strukturierten Daten führt zu der Architekturform, in der mit einer Instruktion mehrere Datenoperationen ausgeführt werden und die als SIMD-Architektur (‘single instruction-multiple data stream’) bezeichnet wird. Die Parallelitätsebene der Anweisungen und Schleifen enthält, betrachtet man nur die Basisblöcke (Anweisungen zwischen zwei Kontrollflußverzweigungen), relativ wenig Parallelität (2-3). Versucht man die Beschränkungen durch die Kontrollflußverzweigungen zu überwinden, so ergeben sich wesentlich größere Parallelitätsgrade [NiF84]. Bei dieser Betrachtung sollte man immer berücksichtigen, daß die meisten Schleifen nur die Datenparallelität in der sequentiellen Programmiersprache ausdrücken. Definition des Parallelitätsgrades ? Vorlesung Rechnerarchitektur 2 Seite 14 Grundlagen paralleler Architekturen ILP Analyseverfahren von Compilern, die über Kontrollflußgrenzen hinausgehen, wurden zur Erkennung und Nutzung dieser Parallelitätsebene entwickelt [Nic85] [Gas89] [Ess90]. Auch Schleifeniterationen von Berechnungen [Lil94] kann man auf diese Weise für die Ausnutzung der Parallelität heranziehen und dann ergeben sich erhebliche Gewinne, die zum Teil natürlich von den zu grunde liegenden Datenstrukturtypen stammt. Im Gegensatz zu den Vektoroperationen können aber auf dieser Ebene die Anweisungen innerhalb der Schleifen von größerer Allgemeinheit sein und müssen nicht auf Vektoroperationen abbildbar sein. Die Nutzung dieser Parallelitätsebene führt zu mehreren recht unterschiedlichen Architekturformen. Ihre gemeinsame Eigenschaft ist die enge Kopplung der Verarbeitungseinheiten, die den Aufwand für die Ablaufsteuerung und die Synchronisation zwischen den Verarbeitungseinheiten gering hält. Auch die mehrfädigen Architekturen nutzen diese Parallelitätsebene und versuchen die Latenzzeit der Synchronisation in der Berarbeitungszeit weiterer Basisblöcke zu verstecken. Die Parallelitätsebene der Maschinenbefehle enthält die Elementaroperation, die zur Lösung von arithmetischen Ausdrücken benötigt werden. Da diese Datenabhängigkeiten aufweisen, ist eine der wichtigsten Aufgaben des Compilers eine Datenabhängigkeitsanalyse zu erstellen, die es ermöglicht, den Abhängigkeitsgraph so zu transformieren [Kuc78], daß sich ein hohes Maß an konkurrenten Operationen ergibt. Die Ausnutzung dieser Parallelität geschieht durch parallele Funktionseinheiten innerhalb der Verarbeitungseinheiten. Die Ablaufsteuerung wird vom Compiler bereits zur Übersetzungszeit geplant oder zur Laufzeit von effizienten Hardwareresourcen innerhalb der Verarbeitungseinheiten ausgeführt. VLIW-Prozessoren (‘very long instruction word’), superskalare Prozessoren und PipelineProzessoren sind die Verarbeitungseinheiten, mit denen diese Parallelitätsebene gut ausnutzbar ist, allerdings immer nur so gut, wie der Compiler die dafür notwendigen Optimierungen beherrscht. Die feinkörnigen Datenflußsysteme nutzen ebenfalls diese Ebene, erkennen aber die parallel ausführbaren Operationen zur Laufzeit durch die in Hardware realisierte Datenflußsynchronisation. Vorlesung Rechnerarchitektur 2 Seite 15 Grundlagen paralleler Architekturen Granularität Den Ebenen der Parallelität entsprechend kann man eine Körnigkeit oder Granularität der Parallelarbeit feststellen. Jede Ebene besitzt eine ihr eigene Granularität, die im folgenden nach [KrS88] definiert wird. Definition : Grob-körnige Parallelität ist die Art von Parallelität, die zwischen großen Teilen von Programmen, weit oberhalb der Prozedurebene, im gemeinsamen Adreßraum der Applikation existiert (‘coarse-grain parallelism’). Definition : Fein-körnige Parallelität ist die Art von Parallelität, die man auf der Ebene von Instruktionen innerhalb eines oder auch zwischen wenigen Basisblöcken (‘basic blocks’) von seriellen Programmen findet (fine-grain parallelism’). Für die bei numerischen Problemen sehr häufig autretenden Schleifeniterationen, die eine der wesentlichen Quellen der Parallelität in numerischen Programmen ist, wird häufig auch noch die Definition der mittel-körnigen Granularität verwendet. Definition : Mittel-körnige Parallelität ist die Art von Parallelität, die zwischen längeren Sequenzen von Instruktionen existiert. Sie tritt hauptsächlich bei Schleifeniterationen auf und stammt im wesentlichen von der datenparallelen Verarbeitung von strukturierten Datenobjekten (‘loop-level parallelism’). Granularität des Algorithmus Je kleiner die Granularität des Algorithmus, desto schwieriger wird die Parallelisierung sein. Feine Granularität bevorzugt Architekturen bzw. Implementierungen mit kurzen "start up"Zeiten und leistungsfähiger Kommunikation. Vorlesung Rechnerarchitektur 2 Seite 16 Grundlagen paralleler Architekturen Ebenen der Parallelarbeit (Beispiele) Parallelität im organisatorischen Ablauf Überlappen von Operationen Aufruf eines Unterprogramms Aufteilung in Teilaufgaben (Phasen) Parameter-Übergabe PC . Status retten Platz für lokale Variablen bereitstellen Überlappen der einzelnen Phasen mit anderen vorlaufenden oder nachfolgenden Operationen. stark sprachenabhängig Operationen innerhalb einzelner Anweisungen R:= (A+B) * C/D + (E+F) + / + Lösen eines arithmetischen Ausdrucks * + R Vorlesung Rechnerarchitektur 2 Seite 17 Grundlagen paralleler Architekturen Ebenen der Parallelarbeit (Beispiele) Parallelausführung innerhalb der Operation von Datenstrukturtypen Vektorverarbeitung Ri: = Ai * Bi i = ^ ... n automatische Adressrechnung, da Zugriffsfunktion auf Datenobjekt (strukturiert) im voraus bekannt ist. Überlappen (Pipelining) der Teilschritte in Stufen Ai Ai Bi ~ 76 ns 300 ns * Bi } 1 2 3 k= 4 Ri tstart tflush n --> 8 Gewinn einer Pipeline G --> k Ri n = Anzahl der Werte k = Anzahl der Pipelinestufen * Vorlesung Rechnerarchitektur 2 Seite 18 Grundlagen paralleler Architekturen Ebenen der Parallelarbeit (Beispiele) Anweisungen und Schleifen eines Benutzerprogramms fine grain dataflow a) Erkennen von datenunabhängigen Anweisungen b) Verteilen der Instruktionen an parallele Verarbeitungseinheiten a ist möglich zur Compilezeit aa oder zur Auführungszeit ab aa WIWComputer (VLIW), Transputer ab intelligent instrucition issue logic (I3L) Datenflussrechner Scoreboarding b ist möglich zur Compilezeit ba oder zur Auführungszeit bb ba VLIW, bb I3L, Scoreboarding, dataflow synchronization Vorlesung Rechnerarchitektur 2 Seite 19 Grundlagen paralleler Architekturen Ebenen der Parallelarbeit (Beispiele) kooperierende Prozesse coarse grain dataflow Aufteilen des Algorithmus in mehrere Prozesse, die zusammenarbeiten "kooperierende Prozesse" send receive Prozess A Prozess B receive send memory sharing Kommunikation durch message passing Verteilen der Prozesse (A, B, ...) auf mehrere Prozessoren (mapping) wichtig: je geringer der overhead für die Kommunikation, desto größer der Gewinn der Aufteilung (ermöglicht damit eine feinere Aufteilung) Vorlesung Rechnerarchitektur 2 Seite 20 Grundlagen paralleler Architekturen Unterscheidung der Parallelrechner nach dem Operationsprinzip Als grobes Unterscheidungsmerkmal kann die von Flynn [Fly72] eingeführte Klassifikation verwendet werden, die trotz ihrer unzulänglichen Beschreibung sehr weit verbreitet ist. Sie unterteilt Rechner in vier Klassen, die sich durch die Anzahl der gleichzeitig vorhandenen Instruktions- und Datenströme unterscheiden. Klassifikation nach Flynn (recht grob) SISD single instruction - single data stream SIMD single instruction - multiple data stream MISD multiple instruction - single data stream MIMD multiple instruction - multiple data stream Die Klasse der SISD-Systeme beschreibt die konventionellen von Neumann Architekturen, die weit verbreitet sind und auch in Parallelrechnern als Prozessoren für die Verarbeitungseinheiten Verwendung finden. Die Klasse der MISD-Systeme ist von untergeordneter Bedeutung und bis auf einige wenige spezielle Realisierungen leer. Auch sind auf Grund der groben Unterteilung viele verschiedene Typen von Parallelrechnern in der MIMD-Klasse enthalten. Die Klassen der SIMD- und MIMD-Systeme sind die für Parallelrechner relevanten und unterscheiden sich in ihren Operationsprizipien sehr voneinander. Unter dem Operationsprinzip versteht man das funktionelle Verhalten der Architektur, welches auf der zugrunde liegenden Informations- und Kontrollstruktur basiert. Die Operationsprinzipien von SIMD- und MIMD-Architekturen sollen im folgenden ausführlicher betrachtet werden. SIMD - Architekturen Verarbeitung von mehreren Datenelementen mit nur einer Instruktion Pipeline - Prinzip Vektorrechner parallele V.E. (P.E‘s) Feldrechner (’array of processing elements’) Unter dem Operationsprinzip versteht man das funktionelle Verhalten der Architektur, welches auf der zugrunde liegenden Informations- und Kontrollstruktur basiert. Vorlesung Rechnerarchitektur 2 Seite 21 SIMD-Architekturen Unter dieser Architekturform versteht man die Rechner, die als Kontrollstruktur nur einen Instruktionsstrom besitzen, aber mit einer Instruktion mehrere Datenelemente einer Datenstruktur verarbeiten können. Die Informationsstrukturen für eine solche Verarbeitung sind geordnete Datenmengen in der Form von Vektoren und Matrizen. Die Ausnutzung der expliziten Parallelität von Vektor- und Matrixoperationen kann auf unterschiedliche Weise erfolgen. Wird die Verarbeitung der Elemente eines Vektors nach dem Pipeline-Prinzip [Ram 77] durchgeführt, so erhält man die Form des Vektorrechners. Werden die Elemente mittels paralleler Verarbeitungseinheiten (‘processing elements’ PE) gleichzeitig bearbeitet, so ergibt sich die Form des Feldrechners (‘array of processing elements’). Beiden gemeinsam ist die zentrale Steuerungsinstanz, die die Instruktionsausgabe an die parallelen Recheneinheiten steuert. Vektorrechner besitzen neben der Ausführungseinheit für Skalare spezielle optimierte Einheiten für die Verarbeitung von Vektoren. Ihre weite Verbreitung beruht auf der Tatsache, daß sie in der gewohnten sequentiellen Weise programmiert werden, und daß sie die in den Vektoroperationen enthaltene Datenparallelität durch die einfache Hardwarestruktur der Pipeline effizient nutzen können. Weiterhin erlauben vektorisierende Compiler für sequentielle Programmiersprachen (z.B. Fortran 77) die automatische Umsetzung von Schleifen in die in der Maschine vorhandenen Vektorinstruktionen. Die Verarbeitung eines Vektors erfolgt nach dem Fließbandverfahren (‘pipeline’). Dafür wird die Operation in möglichst gleichlange Teiloperationen zerlegt, die dann wie in einem Montagefließband zeitsequentiell hintereinander in den verschiedenen Stufen bearbeitet werden. Die Ausführung der verschiedenen Teiloperationen überlappen sich dabei für die einzelnen Vektorelemente. Der Gewinn einer Pipelineverarbeitung gegenüber der sequentiellen Verarbeitung ist für lange Vektoren gleich der Stufenzahl der Pipeline [Hockney,Jesshop]. Mehrere Verarbeitungseinheiten (z.B. Multiplikation und Addition) können meist auch in einer längeren Kette hintereinander geschaltet werden (‘chaining’), um die verketteten Operationen mit nur einem Strom von Vektorelementen bearbeiten zu können. Vorlesung Rechnerarchitektur 2 Seite 22 SIMD-Architekturen Vektorrechner Skalareinheit Instruktions- Instruktionsausgabe Vektoreinheit Vektorkontrolleinheit puffer Vektorverarbeitungspipeline Skalarkontrolleinheit Vektor Skalarverarbeitungs einheit Skalar Register Instruktionshole einheit Skalarlade/speicher einheit Register Vektorverarbeitungspipeline Vektorlade/speicher einheit HauptHauptspeicher speicher Architektur eines Vektorrechners Die Vektoreinheit enthält Vektorverarbeitungspipelines, die die datentransformierenden Operationen ausführen. Die Vektorregister dienen als schnelle Zwischenspeicher für eine größere Anzahl von Vektorelementen. Die Verarbeitung erfolgt mit einer Maschineninstruktion zwischen den schnellen Vektorregistern (‘ register-to-register vector architecture’). Ohne Vektorregister muß der Datenstrom direkt aus dem Hauptspeicher zu den Verktorverarbeitungspipelines geführt werden und die Verarbeitung erfolgt aus dem Hauptspeicher (‘memory-to-memory vector architecture’). Der Hauptspeicher wird in beiden Architekturen mehrfach verschränkt ausgeführt, um den hohen Bandbreitenanforderungen der Pipelineverarbeitung gerecht werden zu können. Ein klassischer Vertreter dieser Architekturform ist die CRAY 1 [HwangBriggs]. • "register-to-register" Vector A Vektorregister bilden schnellen Zwischenspeicher • "memory-to-memory" Vector A Verarbeitung erfolgt direkt aus dem Hauptspeicher GRAY-1 typischer Vertreter Vorlesung Rechnerarchitektur 2 Seite 23 SIMD-Architekturen Feldrechner Feldrechner nutzen die Nebenläufigkeit von parallelen Verarbeitungseinheiten. Eine parallele Verarbeitungseinheit (‘processing element’ PE) kann datentransformierende Operationen vornehmen, ist aber bei der Ablaufsteuerung direkt von der zentralen Steuerungsinstanz abhängig. Sie besitzt keine Hardware zur Programmflußkontrolle. Programmspeicher Instruktion Instruktionshole einheit Instruktionsausgabe Maskier einheit Maske PE Skalarkontrolleinheit Maskier einheit PE Skalar Register PE PE PE Skalarverarbeitungs einheit VN Speicher VN kontroll einheit Datenpfad VN Verbindungsnetzwerk Instruktionspfad PE Processing element Architektur des Feldrechners Um die Flexibilität eines Feldrechners aus solchen PEs zu erhöhen, wird häufig zusätzlich die Maskierung jeder Datenoperation ermöglicht. Dadurch können einzelne Operationen des Rechenablaufs in jedem PE in Abhängigkeit von der Maskierungsinformation unterdrückt werden. Ein typischer Vertreter des Feldrechners ist die Connection-Maschine CM-2 der Firma Thinking Machines [Hillis]. Eine besondere Form des Feldrechners ist das systolische Array [Kung88]. Es ist meist eine zwei- oder dreidimensionale Gitteranordnung von Verarbeitungselementen. Die Verarbeitung der Daten erfolgt taktsynchron im Pipelineverfahren. Ihr Name stammt von der wellenförmigen Bearbeitungsaktivität in dem Feld der PE, die durch die Taktsynchronisation hervorgerufen wird. Vorlesung Rechnerarchitektur 2 Seite 24 SIMD-Architekturen Trotz der großen Erfolge von SIMD-Architekturen (viele ‘Supercomputer’ gehören in diese Klasse: Cray Y, NEC SX2, CM-2, etc.) ist die Ausführung nur eines Instruktionsstromes eine zu starke Einschränkung für die Ausnutzung der Parallelität auf allen Ebenen. Mit der Verbesserung der Programmierwerkzeuge für Systeme mit mehrfachen Instruktionsströmen können MIMD-Systeme mehr Parallelität ausnutzen und einen größeren Anwendungsbereich erschließen. Vorlesung Rechnerarchitektur 2 Seite 25 Architecture Examples Beispiel eines Feldrechners: Der ISATEC-Parallelrechner • PCI-Karte mit insgesamt 1024 bitseriellen Prozessoren, die in einem 32x32 Feld angeordnet sind • Prinzip des Instruction Systolic Array (ISA) • Parallelrechner wird durch den Hostrechner (PC) gesteuert: Programm laden, starten, Datenaustausch zwischen Parallelrechnerkarte und Hauptspeicher • das Prozessorfeld besteht aus RISC-Prozessoren, die über spezielle Kommunikationsregister ein Datenwort mit einem Befehl austauschen können • Treiber für Windows 95/NT + MacOS • Programmierumgebung/Bibliotheken für C + Pascal • viele Programmbibliotheken vorhanden für Numerik, Bildverarbeitung, Kryptographie, ... Vorlesung Rechnerarchitektur 2 Seite 26 Architecture Examples Beispiel eines Feldrechners: Der ISATEC-Parallelrechner • Befehle werden in der linken, oberen Ecke in das Prozessorfeld eingespeist und wandern (systolisch) pro Takt eine Diagonale weiter. Dadurch befinden sich maximal 32 verschiedene Befehle im ISA • durch Selektoren kann die Ausführung eines Befehles in einer Zeile (Spalte) unterbunden werden Spaltenselektoren Befehle Zeilenselektoren 4.Befehl 3.Befehl 2.Befehl 5.Befehl Prozessorfeld 1.Befehl CN CW C CE CS • Kommunikation innerhalb des Prozessorfeldes ist mit den 4 Nachbarn möglich • jeder Prozessor hat ein spezielles Kommunikationsregister, welches von den Nachbarn gelesen werden kann Vorlesung Rechnerarchitektur 2 Seite 27 Architecture Examples Beispiel eines Feldrechners: Der ISATEC-Parallelrechner • Spezielle Interfaceprozessoren stellen die Schnittstelle zum ISA dar • 2 RAM-Bereiche sind den jeweiligen IP’s zugeordnet. Über das RAM werden Daten mit dem Host ausgetauscht • jeder IP besitzt zwei Speicherbänke, von denen eine dem RAM und eine dem ISA zugeordnet ist. Durch Vertauschung der Bänke werden Daten in das/aus dem ISA geladen • Ein Controller steuert den Datentransfer auf dem Parallelrechner und startet einzelne Programme für das ISA PCI-Bus PCI Interface North RAM Data-Bus Controller West RAM North Interface Processors West Interface Processors Processor Array Vorlesung Rechnerarchitektur 2 Seite 28 MIMD-Architekturen MIMD-Architekturen verfügen im Gegensatz zu den SIMD-Architekturen über keine zentrale Steuerungsinstanz. Die Verarbeitungseinheiten können verschiedene Programmsequenzen autonom bearbeiten (lokale Autonomie) und verfügen damit jeweils über einen eigenen Programmzähler. Um die Verarbeitungseinheiten kostengünstig realisieren zu können, greift man häufig auf hochintegrierte Standard-Prozessoren (‘off-the-shelf processor’) zurück. Diese erlauben durch ihre weite Verbreitung in Arbeitsplatzrechnern (‘workstations’) oder eingebetteten Systemen die synergistische Nutzung des technologischen Fortschritts bei der Prozessorentwicklung und die Verwendung vieler sequentieller Softwarepakete für die Entwicklung oder Portierung von Anwendungen auf den MIMDParallelrechner. Aber auch Prozessorentwicklungen mit Eigenschaften speziell optimiert für die Anwendung in MIMD-Parallelrechnern sind in kommerziellen Systemen zu finden. Der Transputer [Inmos] ist eine der Entwicklungen, die bereits zu einem sehr frühen Zeitpunkt einen Prozessor mit einer Kommunikationseinheit auf einem Siliziumbaustein vereinte. Vorlesung Rechnerarchitektur 2 Seite 29 MIMD-Architekturen Einteilung MIMD-Architekturen lassen sich bezüglich verschiedener Merkmale unterscheiden, welche in der folgenden Abbildung dargestellt sind. physikalische Speicheranordnung gemeinsamer Speicher Programmiermodell Adreßraum global, gemeinsam verteilter Speicher globaler Adressraum lokal, privat Nachrichtenorientiert Synchronisation Kommunikationsstruktur gemeinsame Variablen Semaphoren Speicherkopplung synchronisierende Nachrichten Latenzbehandlung verstecken minimieren Merkmale von MIMD-Architekturen Diese Merkmale sind orthogonal zueinander, wobei in speichergekoppelten Systemen nur das Programmiermodell des gemeinsamen Adressraums verwendet wird, da es keine Datenverteilung erfordert und somit einfacher zu handhaben ist. Die physikalische Speicheranordnung ist eines der meistbenutzten Unterscheidungsmerkmale, womit sich die MIMDSysteme in zwei Hauptkategorien einteilen lassen: - speichergekoppelte Systeme (‘shared memory architectures’) - Systeme mit verteiltem Speicher (‘distributed memory architectures’) Bei dieser Unterteilung sollte beachtet werden, daß die physikalische Anordnung des Speichers sich durchaus von der logischen Sicht des Adreßraums unterscheiden kann. Die Bezeichnung des gemeinsamen Speichers (‘shared memory’) wird sowohl für die physikalische Anordnung als auch für die logische Sicht des Adreßraums verwendet Vorlesung Rechnerarchitektur 2 Seite 30 MIMD-Architekturen Globale Architektur Mg Mg Mg Mg ‘shared memory’ Multiprozessor VN P P P geringe Anzahl von P VN mit hoher Bandbreite Kommunikation durch gemeinsame Variablen Synchronisation durch kritische Bereiche P Mischformen sehr hohe Anzahl von P möglich VN mit geringerer Bandbreite Kommunikation durch Datentransport von Objekten VN P Ml P Ml P Ml P Ml ‘message based’ Multiprozessor Synchronisation durch Botschaftenaustausch Globale Architektur von MIMD-Parallelrechnern Die weiteren Merkmale sind stark durch diese physikalische Struktur der Speicherankopplung beeinflußt. Bei Systemen mit gemeinsamem Speicher finden wir fast ausschließlich den globalen, gemeinsamen Adreßraum als Programmiermodell mit den gemeinsamen Variablen zur Synchronisation vor. Bei Systemen mit physikalisch verteiltem Speicher ist zu unterscheiden, ob die Prozessoren ausschließlich auf ihre zugeordneten lokalen Speicher zugreifen können (verteilter lokaler Speicher) und der Datenaustausch explizit durch Nachrichten erfolgen muß, oder ob ein Prozessor auch Zugriff auf die Speicher der anderen Prozessoren hat (verteilter gemeinsamer Speicher). Die zwei unterschiedlichen Sichtweisen des Adreßraums - lokaler oder gemeinsamer- unterteilt die MIMD-Rechner mit verteilem Speicher in zwei vom Programmiermodell recht unterschiedliche Architekturformen. Es sollte beachtet werden, daß bei den Architekturbezeichnungen oft bei den Systemen mit verteiltem globalen Speicher (’distributed shared memory’) die Bezeichnung der physikalischen Verteilung des Speichers weggelassen wird und nur die Sicht des Adreßraums hervorgehoben wird, wohingegen bei den Systemen mit verteiltem lokalen Speicher (‘distributed local memory’) allein die physikalische Verteilung die Bezeichnung dominiert. Vorlesung Rechnerarchitektur 2 Seite 31 Einteilung der MIMD-Architekturen Aus den beiden Unterscheidungsmerkmalen Programmiermodel und Latenzbehandlung lassen sich die MIMD-Architekturen wie folgt einteilen MIMD-Architekturen Programmiermodell Nachrichtenorientiert Behandlung der Kommunikationslatenz globaler Adreßraum Latenz minimieren Latenz verstecken Distributed Memory Architecture Multiprocessor System with Central Memory Distributed Shared Memory Architecture Virtual Shared Memory Architecture Multithreaded Architecture Architekturen mit verteiltem Speicher Multiprozessor mit zentralem Speicher Architektur mit verteiltem gemeinsamem Speicher Architektur mit virtuell gemeinsamem Speicher Mehrfädige Architektur Eigenschaften: Speicherzugriff: lokal und entfernt Granularität: fein Skalierbarkeit: mittel Working Sets: genutzt, im Cache Eigenschaften: Speicherzugriff: nur lokal Granularität: grob Skalierbarkeit: gut Working Sets: genutzt, im lok. Sp. Eigenschaften: Speicherzugriff: nur lokal Granularität: grob Skalierbarkeit: sehr gut Working Sets: nicht genutzt Eigenschaften: Speicherzugriff: zentral Granularität: fein Skalierbarkeit: schlecht Working Sets: nicht genutzt Eigenschaften: Speicherzugriff: lokal und entfrent Granularität: fein oder mittel Skalierbarkeit: gut Working Sets: nicht genutzt Architekturunterscheidung nach Programmiermodell und Latenz (nach Giloi [GIL93]) Im folgenden soll nun die Unterscheidung nach der physikalischen Speicherstruktur näher beschrieben werden. Vorlesung Rechnerarchitektur 2 Seite 32 Einteilung der MIMD-Architekturen Gemeinsamer Speicher In Architekturen mit gemeinsamem Speicher (‘shared memory architecture’) arbeiten die Prozessoren auf einem von allen Prozessoren zugänglichen Speicher. Das Verbindungsnetzwerk stellt die Transportwege für die zu übertragenden Daten von den Speichern zu den Prozessoren zur Verfügung. Die erforderliche Speicherbandbreite läßt sich nur durch mehrere parallele Speichermodule aufbringen. Entscheidend für die Architekturform ist, daß die Kommunikation zwischen den Prozessoren über gemeinsame Daten (‘shared variables’) im gemeinsamen Adreßraum des Speichers erfolgt. Bei der Zugriffsweise auf den Speicher lassen sich im wesentlichen drei Klassen von Architekturen unterscheiden: - gleichförmiger Speicherzugriff (‘uniform memory access’ UMA) - ungleichförmiger Speicherzugriff (‘non-uniform memory access’ NUMA) - nur Cachespeicherzugriffe (‘cache-only memory architectureCOMA) Bei der UMA-Architektur ist die Zugriffsweise aller Prozessoren auf die Speichermodule identisch. Die Abb 1.6 zeigt die prinzipielle Anordnung der einzelnen Komponenten in einem UMA-Parallelrechner mit gemeinsamem Speicher Prozessor Prozessor Prozessor Prozessor Verbindungsnetzwerk Speicher Speicher Speicher UMA-Parallelrechner mit gemeinsamem Speicher Speicher Vorlesung Rechnerarchitektur 2 Seite 33 Einteilung der MIMD-Architekturen Da sich Prozessoren und Speichermodule wie in einem Tanzsaal gegenüberstehen, wird diese symmetrische Form des Parallelrechners auch als Tanzsaal-Architektur (‘dance-hall architecture’) bezeichnet. Alle Prozessoren haben bei dem Zugriff auf den zentralen Speicher eine gleichförmige Zugriffslatenz. Die Anzahl der Prozessoren und der Speichermodule muß aber nicht notwendigerweise gleich sein. Der Zugriff auf die Daten dieses speichergekoppelten Systems wird durch das Verbindungsnetzwerk zwischen den Prozessoren und den Speichermodulen ausgeführt. Die Datenzugriffe erfolgen von den Prozessoren durch elementare Lade- und Speicherbefehle. Vertreter dieser Architekturform sind das SymmetrySystem S81 von Sequent und der Challenge Rechner von Silicon Graphics, deren Verbindungsnetzwerk durch ein schnelles Bussystem realisiert wird. Die Speicheranordnung der CRAY-X/MP [RoR89] und der CRAY-Y/MP ist ebenfalls dieser Architekturklasse zuzurechnen, allerdings gehören diese beiden Rechner vom Operationsprinzip in die erweiterte Klasse der MIMD/SIMD Rechner, da die vier Prozessoren jeweils über Vektoreinheiten verfügen. Das Verbindungsnetzwerk benötigt bei dieser Speicheranordnung eine recht hohe Bandbreite, um allen Prozessoren einen möglichst schnellen und konfliktfreien Zugriff auf die Daten zu ermöglichen. Diese Anforderungen lassen sich nur bei einer geringen Anzahl von Prozessoren erfüllen, so daß die existierenden UMA-Architekturen mit gemeinsamem Speicher nur über eine sehr begrenzte Anzahl von Prozessoren verfügen. Das Verbindungsnetzwerk stellt hierbei die entscheidende Begrenzung für die Skalierbarkeit dar. Um die hohen Anforderungen an das Verbindungsnetzwerk abzumildern, kann man die Speichermodule den einzelnen Prozessoren lokal zuordnen und nur den globalen Zugriff über das Verbindungsnetzwerk ausführen, oder eine Speicherhierarchie verwenden. In beiden Fällen werden die Zugriffszeiten ungleichförmig und man erhält eine NUMA-Architektur P P P M P C C M M Cache Zugriff M C lokaler Zugriff P globaler Zugriff globaler Zugriff VN P M VN C Speicher Prozessor Verbindungsnetzwerk Cache M NUMA-Architekturformen VN Vorlesung Rechnerarchitektur 2 Seite 34 Einteilung der MIMD-Architekturen Der Parallelrechner FX 2800 von Alliant [Kus90] mit einem Kreuzschienenverteiler (‘crossbar’) als Verbindungsnetzwerk und Cache-Speicher ist ein Beispiel für die NUMA-Architektur. Der Einsatz von Cache-Speichern bei den Prozessoren führt für Daten (nicht für Instruktionen; keine Schreiboperationen auf Code!) auf das Problem der Cache-Kohärenz [Dubois Scheurig]. Da jetzt lokale Kopien des Hauptspeichers in den Caches der Prozessoren existieren, muß mit Hilfe von Konsistenzprotokollen die Gültigkeit der Daten gewährleistet werden. Für Architekturen mit einem Bus als Verbindungsnetzwerk kann die Cache-Kohärenz z.B. durch das MESI-Protokoll gewährleistet werden. Dafür muß jeder Cache-Speicher die Bustransfers überwachen (‘snooping’) und die Cache-Einträge gemäß den Protokollzuständen (‘modified, exclusive, shared, invalid’) verwalten. Solche Systeme sind nur bedingt erweiterbar, da die Transferleistung vom Bus begrenzt ist. Die Einhaltung der CacheKohärenz bei anderen VN ist wesentlich aufwendiger und bedarf der Hardwareunterstützung. Das SCI-Protokoll (‘scalable coherent interface’) und seine Implementierung durch einen schnellen seriellen Verbindungskanal stellt eine mögliche Lösung dar. Eine solche Realisierung ist der SPP-Parallelrechner von Convex [Convex]. Bei der COMA-Architektur werden die Speichermoduln ausschließlich als Cache-Speicher benutzt P D VN C P P P C C C D D D Prozessor Directory Verbindungsnetzwerk Cache VN COMA-Architektur Alle Cache-Speicher befinden sich in einem globalen Adreßraum und der Zugriff auf die entfernt liegenden Caches wird durch eine ‘cache-directory’ [Dash] unterstützt. Die Datenobjekte werden durch den Cache-Mechanismus zu dem Prozessor transportiert, von dem sie zur Berechnung angefordert werden [KSR2]. Vorlesung Rechnerarchitektur 2 Seite 35 Einteilung der MIMD-Architekturen Verteilter Speicher In Architekturen mit verteiltem Speicher (‘distributed memory architecture’) sind die einzelnen Speichermodule über das System verteilt und typischerweise den Prozessoren physikalisch zugeordnet. Hat jeder Prozessor nur Zugriff auf seinen lokalen Speicher, so spricht man von einem verteilten Speicher mit lokalem Adreßraum (‘distributed local memory’). Eine solche Architektur kann somit keine Zugriffe auf Speicher anderer Knoten durchführen (no-remote memory access’ NORMA) und wird auch als NORMA-Architektur bezeichnet. Die Verbindung der Prozessoren untereinander erfolgt über das Verbindungsnetzwerk. Das Verbindungsnetzwerkinterface (VNI), der Prozessor und der lokale Speicher bilden eine Funktionseinheit, die als Knoten (Verarbeitungsknoten) bezeichnet wird. Sind alle Knoten im System gleich, so liegt ein symmetrischer Parallelrechner vor. Asymetrische Systeme entstehen durch Knotentypen, deren Funktionen erweitert oder spezialisiert sind. Solche Funktionseinheiten bezeichet man typischerweise als Spezial-Knoten, wobei je nach Funktion die Namensgebung erfolgt (z.B. Ein/Ausgabe-Knoten). Das folgende Bild zeigt die prinzipielle Struktur eines Parallelrechners mit verteiltem Speicher Knoten Knoten Knoten M M M P P P nur lokale Zugriffe VNI VNI VNI BotschaftenVerbindungsnetzwerk VN austausch Parallelrechner mit verteiltem Speicher Die Prozessoren besitzen eine sehr enge Verbindung zu ihren lokalen Speichermodulen, die damit über eine sehr hohe Zugriffsbandbreite und eine geringe Latenz verfügen. Die Verbindung der Knoten untereinander erfolgt nur über die Schnittstelle zum Verbindungsnetzwerk, die in den meisten Parallelrechnern dieses Typs eine geringere Bandbreite besitzt als das Speicherinterface. Die Kommunikation erfolgt ausschließlich über den Austausch von Nachrichten oder Botschaften (‘messages’). Das Verbindungsnetzwerk kann von geringerer Leistung und höherer Latenz sein als bei der Realisierung des gemeinsamen Speichers, wenn es möglich ist, die Daten in den lokalen Speichern zu halten. Eine große Zahl von numerischen Applikationen zeigt diese ausgeprägte Lokalität der Daten, hervorgerufen z.B. durch die physikalische Anordnung des Lösungsraumes. Vorlesung Rechnerarchitektur 2 Seite 36 Communication in MIMD Systems Speichergekoppelte Architekturen Die speichergekoppelten Architekturen können über gemeinsame Variablen im gemeinsamen Adreßraum kommunizieren (‘shared variable communication’). Arbeiten diese Prozesse kooperierend auf gemeinsamen Daten, so können sie auf diese Daten jederzeit zugreifen und sie auch verändern. speichergekoppelte Architekturen gemeinsamer Adreßraum Prozeß A gemeinsame Variable Prozeß B Muß der Zugriff in der vom Programm gewünschten Ordnung erfolgen, so muß die logische Reihenfolge durch die Synchronisation zwischen den Prozessen sichergestellt werden. Dazu können kritische Bereiche oder Barrieren eingeführt werden, durch die der Zugriff der leichtgewichtigen Prozesse auf diese gemeinsamen Daten koordiniert wird. Die Zugangskontrolle zu den kritischen Bereichen kann im einfachsten Fall durch Semaphorevariablen [Dijkstra] erfolgen. Für die Implementierung der Semaphore ist eine unteilbare Speicheroperation sehr hilfreich. Vorlesung Rechnerarchitektur 2 Seite 37 Communication in MIMD Systems Speichergekoppelte Architekturen Einige der verschiedenen Varianten der atomaren Speicherzugriffe sind: - read-modify-write test-and-set lock-unlock load-linked and store conditional fetch-and-add Sie beruhen zum größtenTeil auf der Idee, daß für die Sequenz des Lesens, Modifizierens und des Zurückspeicherns andere Speicherzugriffe auf diese Speicherzelle unterbunden werden. Bei einem einfachen Verbindungsnetzwerk, wie dem Bus, kann dazu ein Signal benutzt werden, welches die Arbitrierung für die Zeitdauer der atomaren Operation unterbindet. Bei komplexeren Netzwerken ist eine Hardwareunterstützung zur Implementierung der atomaren Operation nötig. Die Synchronisation mit Hilfe von gemeinsamen Variablen ist mit dem Nachteil verknüpft, daß ein Prozeß, während er auf die Zuteilung eines kritischen Bereiches wartet, die Synchronisationsvariable ständig abfragt (spin lock) und damit wertvolle Bandbreite auf dem Verbindungsnetzwerk konsummiert. CCB concurrency control bus CCB CCU Processor CCU Processor CCU Processor CCU Processor CCU Processor CCU concurrency control unit Interconnection network Mem Mem Mem Mem Mem communication structure of the Alliant FX-8 Verwendet man ein speziell für die Synchronisationsoperationen optimiertes zusätzliches Verbindungsnetzwerk [Alliant] [Cray T3D], so kann man diesen Nachteil vermeiden und besitzt im VN zum Speicher weiterhin die volle Bandbreite. Vorlesung Rechnerarchitektur 2 Seite 38 Communication in MIMD Systems Speichergekoppelten Architekturen "cluster" CLN 0 interconnect cpus memory CPU 0 port 0 CPU 1 port 1 CPU 2 port 2 CPU 3 port 3 CLN 1 CLN 2 CLN 3 CLN 4 communication cluster of CRAY Y-MP In einigen Parallelrechnersystemen findet man zur Unterstützung der Datensynchronisation ein erweitertes Speicherwort, in dem der Zustand (voll, leer) der Speicherzelle vom Speichercontroller abgelegt wird und bei speziellen Speicherzugriffen eine atomare Synchronisationsoperation ausgeführt wird [HEP, Tera]. Mit dieser Methode ist eine ‘producerconsumer’ Synchronisation auf jeder Speicherzelle möglich. Auch für die Prozeßynchronisation sind Vorschläge für die Verwendung separater VN bekannt, die z.B. die Verluste für die Synchronisation an einer Barriere [Stone] sehr gering halten. Vorlesung Rechnerarchitektur 2 Seite 39 Communication in MIMD Systems Nachrichtenorientierte Architekturen Im Falle der nachrichtenorientierten Architekturen existiert kein gemeinsam zugänglicher Adreßraum. Die Daten müssen auf die lokalen Speicher der Prozessoren verteilt werden und die benötigten Datenobjekte werden durch Botschaftenaustausch in dem lokalen Adreßraum des Empfangsprozesses verfügbar gemacht. Bei dieser Nachrichtenkommunikation (‘inter process communication’) kann die Synchronisation der Prozesse je nach verwendeter Kommunikationsroutine enthalten sein oder nicht. Erfolgt die Synchronisation für die Übertragung, so spricht man von synchroner Kommunikation. Hierfür werden die blockierenden Primitiven ‘send’ und ‘receive’ verwendet. Asynchrone Kommunikation kann auch dann stattfinden, wenn beide Prozesse nicht an einem Synchronisationspunkt angekommen sind. nachrichtenorientierte Architekturen Botschaftenaustausch Botschaft message Prozeß A Prozeß B lokaler Adreßraum lokaler Adreßraum Die bekannten prozeßorientierten Kommunikationsfunktionen sind: - remote process invocation remote procedure call rendez vous asynchronous-no-wait-send non-blocking send blocking send blocking send, reply, blocking wait non-blocking send, blocking wait Bei dem ‘remote process invocation’ wird vom sendenden Prozeß ein weiterer Prozeß gestartet und der sendende Prozeß setzt seine Arbeit ohne weitere Kommunikation fort. Vorlesung Rechnerarchitektur 2 Seite 40 Communication in MIMD Systems Communication Constructs Der ‘remote procedure call’ wird von dem startenden Prozeß benutzt, um eine Prozedur mit Parametern zu starten. Danach blockiert der startende Prozeß und wartet auf das Ergebnis oder die Fertigmeldung der Prozedur. classical constructs remote procedure call (rpc) blocking send no-wait send blocking receive ● remote procedure call (rpc) caller IN calculation of data objects rpc rpc stub copying of data objects to rpc buffer rpc buffer activation of remote procedure callee blocking of thread remote procedure thread blocked unblocking of thread result data local node activity remote node activity - no concurrency between the two threads Vorlesung Rechnerarchitektur 2 Seite 41 Communication in MIMD Systems Communication Constructs Beim ‘rendez vous’ fragt der sendende Prozeß beim empfangenden Prozeß an, wann dieser bereit ist, die auszutauschenden Objekte entgegenzunehmen. Der sendende Prozeß blockiert sofort nach Aussenden der Anfrage und wird erst durch die Bereitmeldung zum Empfangen wieder aktiv. Nach dieser Synchronisation kann die eigentliche Übertragung der Datenobjekte erfolgen. ● blocking send AP IN CP calculation of data objects send blocking of thread send (request only) receive (ack only) reply (message transfer) unblocking reuse of data objects local node activity - synchronizing send - invocation send - rendez vous - synchronous, no buffering of data objects - low level of concurrency - sequentialization of processing and communication Vorlesung Rechnerarchitektur 2 Seite 42 Communication in MIMD Systems Communication Constructs Beim ‘no-wait-send’ verschickt der sendende Prozeß die Daten ohne Rücksicht auf den Zustand des empfangenden Prozesses und arbeitet danach weiter. Eine Synchronisation erfolgt erst, wenn der sendende Prozeß an eine Stelle gelangt, wo er ohne den Erhalt einer Rückantwort nicht weiterarbeiten kann. ● no-wait send AP CP calculation of data objects IN copying of data objects to message buffer send message buffer sending of message buffer to IN reuse of data objects local node activity - asynchronous, buffering of data objects - level of concurrency limited by message buffers - overlapping of processing and communication Vorlesung Rechnerarchitektur 2 Seite 43 Communication in MIMD Systems Communication Constructs introduction of new constructs >>> increase level of concurrency synchronized no-wait send prefetched blocking receive ● synchronized no-wait send CP IN AP issues send request to CP send sending of message (data objects) to IN remote node thread AP calculation of data objects delay slot synchronization point wait for send completion new definition of data objects local node activity - non-blocking, non-copying - high level of concurrency - overlapping of processing and communication - synchronous concerning the synchronization point ● prefetched blocking receive CP IN AP issues receive request to CP receive new data objects received by CP from IN delay slot new definition of received data object new use of received data objects synchronization point of blocking receive remote node thread AP previous use of data objects local node activity - no buffering of data objects - high level of concurrency - overlapping of processing and communication - blocking only after the synchronization point Vorlesung Rechnerarchitektur 2 Seite 44 Communication in MIMD Systems Message Passing versus Shared Memory Interprocessor communication is critical in comparing the performance of message-passing and shared-memory maschines. In a shared-memory-system, communication requires no intervention on the part of a runtime system or operating system. The processors can transfer data using a shared data area. Data availability can be signaled by a flag. Cache consistency must be observed! Producer Process Consumer Process for (i=0; i<length; i++) buffer[i] = source[i]; flag = length; while (flag == 0) for (i=0; i<flag; i++) dest[i] = buffer[i]; In a message-passing system, access to the network is typically managed by system software. The network interface must be multiplexed between users and the separated address spaces must be overcome. This overhead at the sending and receiving processors makes the start-up cost of communication much higher on a message passing machine. The following steps must be performed: - The operating system checks protections and then programs the network DMA controller (vitual to physical address translation involved) to move the message from the sender’s buffer to the network interface - A DMA channel on the consumer processor has been programmed to move all messages to a common system buffer area. When the message arrives, it is moved from the network interface to one system buffer, and an interrupt is posted to the processor. - The receiving processor services the interrupt and determines which process the message is intended for (demultiplexing). It then copies the system buffer to the specified receive buffer on the user process and reschedules the user process on the processor’s ready queue. - The user process is dispatched on the processor and reads the message from the user’s receive buffer. [Lenoski] Producer Process Consumer Process send( ProcessID, @sbuffer, length); receive( @rbuffer, length); Vorlesung Rechnerarchitektur 2 Seite 45 Communication in MIMD Systems Der Kommunikationsaufwand ist in keiner der betrachteten Rechnerarchitektur vernachlässigbar. Dort wo bei einem ’message passing’ Rechner explizite Kommunikation erforderlich ist, muß beim ’shared memory’ Rechner an exakt der gleichen Stelle eine explizite Synchronisation vorgesehen werden, um die Integrität der Daten zu sichern. Es ist also keineswegs "einfacher" einen Parallelrechner mit globalem Adreßraum zu programmieren, d.h. der Denkaufwand ist praktisch derselbe. Für ’message passing’ Systeme ist es sinnvoll, die Algorithmen so zu konstruieren, daß Daten für einen nachfolgenden Rechenschritt schon ausgetauscht werden, während noch am momentanen Schritt gerechnet wird. Dieses ’latency hiding’ (verstecken der Latenz) genannte Verfahren dient dazu, den sichtbaren Kommunikationsaufwand zu verringern [Waldschmidt] Vorlesung Rechnerarchitektur 2 Seite 46 Programmierkonzepte Programmiermodelle implicit parallelism The main two characteristics of parallel programming systems are how to manage communication between the concurrent activities, and how they synchronize, or coordinate, these activities [Wilson95]. control parallelism data parallelism dusty decks applicative languages parallelizing compiler SISAL FORTRAN 77 + Parafrase compiler FORTRAN 77 + Cray directives parallelization directives FORTRAN 77 + HPF directives whole-array operations FORTRAN 90, C* arbitrary sharing fork/join futures partial/explicit sharing - LINDA - Implementierung eines virtuell gemeinsamen Speichers CSP no sharing procedural message passing Language Taxonomy Scheme [Wilson95] Konventionelle Sprachen und Implementierung eines "virtual shared memory" Fortran C C++ - Softwareimplementierung von VSM mit Hardwareunterstützung - adaptive Konsistenz Vorlesung Rechnerarchitektur 2 Seite 47 ProgrammierkonzepteCommunication in MIMD Systems Programmiermodelle Festlegungen für ein Programmiermodell Message passing model Shared Memory Model - (Global Address Space Model) Datentypen Strukturierung des Programms in Programmeinheiten Datenaustausch zwischen den Programmeinheiten Festlegung der Ablaufkontrolle + + + + Ausnutzung der Parallelität Parallelisierung von Programmeinheiten Verwendung der Kommunikationsprotokolle Koordination des parallelen Ablaufs Die Skalierbarkeit erfordert: >>> Shared Memory Knoten solange der ’speep up’ innerhalb des Knotens die Kosten rechtfertigt >>> Physikalisch verteilte Speicher und Verarbeitungseinheiten sobald größere Systeme angestrebt werden Probleme durch physikalische Verteilung: Latenzzeit - i. A. nicht vorhersagbare Zeit - der Kommunikation - beim Zugriff auf globale Daten Synchronisationsaufwand Vorlesung Rechnerarchitektur 2 Seite 48 Programmierkonzepte Kommunikation Message passing model Erweiterung konventioneller Sprachen um "message passing libraries" - Erweiterung um Funktionen: Kommunikation Synchronisation Prozessverwaltung "Mapping" features of communication - synchronous / asynchronous - blocking behavior - management of communication object - buffering - concurrency level Fortran C C++ - Express - Parmacs - PVM - MPI >>> MPI Standard Implementation: MPICH Argonne National Laboratory Vorlesung Rechnerarchitektur 2 Seite 49 Programmierkonzeptes Programmierkonzepte Sprachen für Datenparallelität C* - Erweiterung von C um Datentypen und Operationen auf Vektoren und Feldern - speziell zugeschnitten auf SIMD-Verarbeitung der Connection machine CM2 und CM5 CC ++ - Erweiterung von C ++ um Funktionen zur Kommunikation und Steuerung der Parallelität - 6 grundlegende Abstraktionen: processor object, global pointer thread, sync variable, atomic function, transfer function Fortran 90 - Erweiterung von Fortran 77 um Datentypen und Operationen auf Vektoren und Feldern (SIMD) - dynamische Speichererweiterung - Einführung von Zeigern und Strukturen - "intrinsic functions" für Vektoren und Matrizen - "access functions" für Vektoren und Matrizen HPF-Fortran - Erweiterung von Fortran 77 zur Parallelverarbeitung Forall - Direktiven für die Anordnung (Aufteilung) von Daten Vorlesung Rechnerarchitektur 2 Seite 50 Programmierkonzepte "Message Passing" Programming Model + Message passing is the implementationally simplest, computationally most efficient programming model for distributed memory architectures. The difficulty with this model is that the programmer must explicitly program the communication and synchronization between the cooperating threads of his task. - Some communication constructs, e.g., blocking send, blocking receive, double as synchronization points. Thus, communication is intertwined with coordination. Constraining the totally asynchronous execution of the MIMD mode of operation, message passing programming may be facilitated. Such a restriction is the single program-multiple data (SPMD) model. SPMD solves data parallel problems by applying a replicated thread to different data sets. SPMD combines the global homogeneity with local autonomy of execution. Parallelization reduces to (??) the task of data distribution. Thread coordination is performed in the lock-step mode, thus replacing individual thread synchronization by a global barrier. W.K.Giloi Vorlesung Rechnerarchitektur 2 Seite 51 Programmierkonzepte MPI-Message Passing Interface (MPI 1.2) Library for Fortran, C or C++ for message passing de-facto message passing standard MPI is a complex system. It comprises 129 functions, many of which have numerous parameters or variants. In the MPI programming model a computation comprises one or more processes that communicate by calling library routines to send and receive messages to other processes. In most MPI implementations, a fixed set of processes is created at program initialization, and one process is created per processor. MPI is a message passing interface, not a complete programming environment. MPI does not allow dynamic process creation. ● MPMD - Multiple Program Multiple Data static process model, one-to-one mapping fixed number of processes point-to-point communication, collective communication easy heterogeneous implementation virtual communication channels efficient implementations for multithreaded environments MPI’s abillity to probe for messages supports asynchronous communication. The basic functions of MPI are: - MPI_INIT MPI_FINALIZE MPI_COMM_SIZE MPI_COMM_RANK MPI_SEND MPI_RECV Initiate an MPI computation Terminate a computation Determine the number of processes Determine my process identifier Send a message (6 types) Receive a message (2 types) MPI has three communication modes for the send function: standard, ready, and synchronous. Every mode can be combined with a blocking or non-blocking behaviour of the function. MPI provides support for general application topologies that are specified by graphs and it provides explicit support for n-dimensional Cartesian grids. MPI 2.0 provides extended functions: dynamic process creation, remote load and store, ... Vorlesung Rechnerarchitektur 2 Seite 52 Communication Prinzip von Gitterberechnungen Das meist zweidimensionale physikalische Problem wird auf ein entsprechendes Gitter abgebildet. Das Rechenproblem wird dann in mehrere Prozesse aufgeteilt. Die Prozesse enthalten: • lokale Rechenvorgänge • Kommunikation - Austausch von Daten mit anderen Prozessen Beispiel: Wäremeverteilung in Material Bezeichnung der Rechenstellen 0 1 2 3 4 5 6 7 Rechenstellen 0 Definition des Gitters 1 Randwerte 2 Mapping der Prozesse 3 4 5 5,6 6 7 punktförmige Einspeisung einer Wärmemenge Q • Aufstellen der Kommunikationspfade • Bestimmen der lokalen Rechenschritte • Bestimmen der zu transportierenden Datenwerte Die Berechnung des Temperaturverlaufes über der Zeit an den Orten im Material kann durch eine zweidimensionale Wärmetransportgleichung an jeder Rechenstelle durch die Verwendung der eigenen Temperatur und der Temperatur der nächsten Nachbarn angenähert werden. Für die Verwendung von Gittern gibt es z.B. in MPI Unterstützung durch spezielle Funktionsaufrufe ( MPI_Cart_Create, MPI_Cart_rank, MPI_Cart_coords ) Vorlesung Rechnerarchitektur 2 Seite 53 Communication Gitterberechnungen für reale Anwendungen Reale Gegenstände, wie z.B. Kühlkorper für integrierte Schaltungen, werden zur Berechnung der Temperaturverteilung und der Wärmeabgabe mit einem Gitternetz überzogen. In den meisten Fällen kann man das Gitternetz aus den mechanischen Daten durch halbautomatische Verfahren (z.B. Triangulierung) erzeugt werden. Finite-Elemente Gitter eines Kühlkörpers Besondere Probleme bei solchen Berechnungen bereiten die Randwerte an den Stellen der Übergänge zwischen dem Festkörper und der Luft. Vorlesung Rechnerarchitektur 2 Seite 54 Rechnerkonfiguration zu den Übungen in Rechnerarchitektur 2 Alle Workstations laufen unter Solaris. Die WS lassen sich zu einem distributed Memory System über das Ethernet verknüpfen. Im file machines.solaris steht, welche Rechner für MPI verwendet werden. Der Compute Server quattro ist ein Shared Memory System mit 4 Prozessoren für die Programmierung mit Threads. machine name Distributed Memory SUN - Cluster with switched Ethernet TP-Ethernet (100Mbit) homer WS WS ULTRA 10 Solaris 5.7 burns WS WS ULTRA 10 WS VN Switch Solaris 5.7 12 x 10/100Mbit WS bart WS ULTRA 10 Solaris 5.7 smithers WS WS ULTRA 10 Solaris 5.7 barny Server WS ULTRA moe 60 2x 60 Solaris 2.7 Solaris 2.7 Shared Memory SUN - Compute Server 4 x CPU quattro Processor Processor I/O bridges Memory a x n data crossbar System controller & Address crossbar Processor Processor Server WS ULTRA Vorlesung Rechnerarchitektur 2 Seite 55 Verbindungsnetzwerke Einleitung In den vergangenen Abschnitten wurden die Verbindungsnetzwerke (VN) als eine geschlossene Funktionseinheit (‘black box’) betrachtet. Sie sind aber eine der wesentlichen Hardwareressourcen von Parallelrechnern und sollen deshalb nachfolgend ausführlicher behandelt werden. VN dienen zum Transport von Botschaften und Daten sowohl zwischen Prozessoren als auch innerhalb eines Prozessors zwischen verschiedenen Modulen. Innerhalb eines SIMD-Prozessors findet man Verbindungsnetzwerke zur Ankopplung von Speichern und zur Konfiguration von Mehrfachpipelines. Zwischen Prozessoren in MIMD-Rechnern dienen sie zur Kommunikation zwischen Prozessen auf diesen Prozessoren. Die Kommunikation kann über einen gemeinsamen Speicher (‘shared memory’) oder nur über ein Verbindungsnetzwerk (‘message passing’) ablaufen. Systematik Die Einteilung der Verbindungsnetzwerke kann nach folgenden Kriterien vorgenommen werden [FEN81]: • • • • (1) Topologie (2) Verbindungsart (3) Steuerung des Verbindungsaufbaus (4) Arbeitsweise Die Topologie spielt dabei die herausragende Rolle, da sie die Eigenschaften, wie z.B. die Skalierbarkeit eines Parallelrechners wesentlich mitbestimmt. Die Auswahl der geeigneten Verbindungsnetzwerke und die optimale Implementierung trägt wesentlich mit zur Leistungssteigerung der Rechnerarchitektur bei, da bei Prallelrechnerarchitekturen grundsätzlich die obere Leistungsgrenze letztlich immer durch die erzielbare Speicherbandbreite bzw. Kommunikationsbandbreite begrenzt ist. Vorlesung Rechnerarchitektur 2 Seite 56 Verbindungsnetzwerke Topologie irregulär regulär direct statisch 1dim 2dim vollst. Vernetzung dynamisch 3dim einstufig Hypercube Bus mehrstufig Crossbar Verbindungsart Leitungsvermittlung indirect Banyan ... Delta Verbindungsaufbau Paketvermittlung verteilt zentral Arbeitsweise synchron gemischt asynchron Systematik der Kriterien Die Verbindungsarten Bei der Verbindungsart von dynamischen VN unterscheidet man Leitungsvermittlung und Paketvermittlung. Bei der Leitungsvermittlung wird eine physikalische Verbindung (Leitung) für die gesamte Dauer der Datenübertragung zwischen den Teilnehmern hergestellt. Sie eignet sich im besonderen zur schnellen Übertragung vieler Nachrichten zwischen den selben Teilnehmern. Der Nachteil der Leitungsvermittlung ist die Blockierung der benutzten Verbindungsleitungen und Schaltstellen für die gesamte Zeit der bestehenden Verbindung. Bei der Paketvermittlung dagegen wird nicht erst eine physikalische Verbindung aufgebaut, sondern es wird ein größerer Datenblock (Paket) an das Verbindungsnetzwerk abgegeben. Dieses transportiert das Paket über Zwischenstationen mit Hilfe der Adreßinformation (‘routing’) zu dem Zielteilnehmer. Es wird damit eine logische Verbindung zwischen den Teilnehmern hergestellt. Die Leitungen zwischen den Vermittlungsstationen können kurz nacheinander von mehreren verschiedenen Datenpaketen mit unterschiedlichen Zielen benutzt werden. Vorlesung Rechnerarchitektur 2 Seite 57 Verbindungsnetzwerke Übertragungsstrategien Bei der Paketvermittlung unterscheidet man zwei wesentliche Übertragungsstrategien, die ‘store-and-forward’-Strategie und die ‘worm-hole’-Strategie. Bei der ‘store-and-forward’-Strategie werden die Pakete in jeder Vermittlungsstation vollständig zwischengespeichert. Die Adreßinformation wird interpretiert und wenn der erforderliche Leitungsweg zur Verfügung steht, wird das Paket zur nächsten Vermittlungsstation weitergereicht. Die Vermittlung ist völlig dezentral und eine Flußkontrolle wird erst erforderlich, wenn die Speicherkapazität der Vermittlungsstellen nicht mehr ausreicht. ‘store-and-forward’ Vermittlungsstelle Paketspeicher Verbindungskanal routing Adressfeld Vermittlungsstrategien bei der Paketvermittlung ’cut-through routing’ Nachrichtenpaket Vorlesung Rechnerarchitektur 2 Seite 58 Verbindungsnetzwerke Bei der ‘worm-hole’-Strategie wird das Paket vom Sender in das VN eingespeist und sucht sich wie ein "Wurm" den Weg durch die Vermittlungsstationen. In den Vermittlungsstellen ist nur ein minimaler Speicher vorhanden, der gerade ausreicht um den Kopf einer Nachricht aufzunehmen und die dort gespeicherte Adreßinformation zu interpretieren. Der Rest der Nachricht liegt dann in den davor benutzten Vermittlungsstellen und wird durch die automatische Flußkontrolle beim Weiterschalten des Kopfes hinterhergezogen. Am Ende des Pakets befindet sich eine Endemarkierung, die den Weg für weitere Pakete wieder freigibt. Die Vorteile dieser Strategie, nämlich die geringe Speicherkapazität in den Vermittlungsstellen und der schnelle Weitertransport (Pipelining) durch das Netzwerk, machen diese zu einer sehr häufig benutzten. ‘worm-hole’ paket Nachrichtenende Nachrichtenkopf routing Vermittlungsstelle Nachrichten- Verbindungskanal ’Link’ Vermittlungsstrategien bei der Paketvermittlung Vorlesung Rechnerarchitektur 2 Seite 59 Verbindungsnetzwerke Deadlocks Bei der ‘worm-hole’-Strategie belgt das Paket auf seinem Weg vom Sender zum Empfänger je nach Paketlänge unterschiedlich viele VN-Resourcen. Besonders kritisch sind dabei die Resourcen, die von mehreren Paketen gemeinsam (und auch gleichzeitig!) genutzt werden müssten, wie z.B. die Links oder auch die Schaltfunktionen innerhalb einer Vermittlungsstelle. Die Belegung einer Resource kann unter Umständen dazu führen, dass kein weiterer Fortschritt bei der Weiterleitung der Nachrichten möglich ist. Eine solche Situation nennt man Deadlock. Er kann sich nicht von alleine wieder auflösen. ocupied Link non-possible routing paket Nachrichtenkopf cycle Vermittlungsstelle Verbindungskanal 4 Nachrichtenpakete deadlock Der deadlock entsteht, wenn Nachrichtenpakete zyklisch Resourcen anfordern und auch bekommen, eine (oder mehrere) Vermittlungsstellen später dann auf eine belegte Resource treffen, die bereits von einem beteiligten Paktet belegt ist. In der Abbildung findet man einen Deadlock, der durch vier Pakete verursacht wird und durch die nahezu gleichzeitige Belegung der jeweiligen Links ausgelöst wird. Danach liegen die Pakete im Netzwerk fest und die Flusskontrolle verhindert jeden weiteren Fortschritt. Deadlocks können verhindert werden, indem man die routing-Möglichkeiten einschränkt (z.B. ’dimension order routing’) oder zusätzliche Resourcen im VN einbaut (Virtual channels). Eine wichtige Voraussetzung ist immer erforderlich: Empfangen auf dem Zielknoten muss immer eine höhere Priorität haben als Senden (sonst verstopft man das Netzwerk). Vorlesung Rechnerarchitektur 2 Seite 60 Verbindungsnetzwerke Verbindungsaufbau Die Steuerung des Verbindungsaufbaus ist nur bei dynamischen VN zu unterscheiden. Erfolgt die Einstellung des momentanen Verbindungswegs in jedem Schaltelement selbst, so spricht man von verteilter Steuerung. Gibt es eine konzentrierte Hardwareeinrichtung für die Einstellung, so handelt es sich um eine zentrale Steuerung. Taxonomy of routing algorithms routing algorithms Number of Destinations Routing Decisions unicast routing centralized routing Implementation Adaptivity Progressivness Minimality Number of Paths source routing table lookup deterministic routing multicast routing distributed routing multiphase routing finite-state machine adaptive routing progressive backtracking profitable misrouting complete partial Duato, Jose, Interconnection Networks an Engineering Approach, IEEE Computer Society Press Vorlesung Rechnerarchitektur 2 Seite 61 Verbindungsnetzwerke generic router model flit unit of flow control phit physical unit of transport introduction of VCs 8 Switch Output buffer vn0 LC LC vn1 Arb request LC Input buffer R grant Xbar buffer length = 2 x tpd/tclk tpd of link cable LC Input buffer LC Arb Routing and Arbitration Unit generic router model Link Controller Vorlesung Rechnerarchitektur 2 Seite 62 Verbindungsnetzwerke Arbeitsweise Bei der Arbeitsweise kann man die synchrone von der asynchronen Betriebsart unterscheiden. Im synchronen Mode wird das VN zu ganz bestimmten Zeiten von allen Teilnehmern zum Datenaustausch benutzt, während im asynchronen Fall jeder Teilnehmer zu jedem Zeitpunkt seinen Verbindungsaufbauwunsch an das VN abgeben kann. Eine gemischte Arbeitsweise ist ebenfalls möglich, wird aber selten genutzt. Topologie der Verbindungsnetzwerke Bei der Topologie, der räumlichen Anordnung des VN, unterscheidet man reguläre von irregulären Strukturen. Irreguläre VNs werden in Parallelrechnern selten eingesetzt. Reguläre VN haben den Vorteil, Prozessoren und damit auch Prozesse in regelmäßigen Strukturen anzuordnen, die auf die Problemstellung angepaßt sind. Je nach Anwendung unterscheidet man die statischen von den dynamischen VN. Statische VNs sind feste Punkt zu Punkt-Verbindungen zwischen den Prozessoren. Dynamische VNs enthalten Schaltelemente, die durch die Konfigurationsinformation in eine bestimmte Leitungsanordnung gebracht werden können. Die Anzahl der Stufen, die die Daten durchlaufen müssen, ergibt ein weiteres Unterscheidungsmerkmal. Auf die topologischen Eigenschaften wird anschließend noch ausführlicher eingegangen. Statische Verbindungsnetzwerke Statische VN werden hauptsächlich in massiven Parallelrechnern zur Kommunikation benutzt. Ihre Verbindungsstruktur ist festgeschaltet und besteht aus Punkt zu Punkt Verbindungen zwischen Verarbeitungsknoten (Prozessoren). Stellt man die Prozessoren als Knoten und die Verbindungen als Kanten dar, so kann man die statischen VNs als Graphen darstellen. Vorlesung Rechnerarchitektur 2 Seite 63 Verbindungsnetzwerke Kette 2D Torus Gitter Baum Stern Ring hexagonales Gitter vollst. Vernetzung 110 010 001 000 Würfel 3D Torus 4D Hyperwürfel Topologien statischer Verbindungsnetzwerke Von diesen VNs wird das Gitter (‘nearest neighbor mesh’, ‘grid’) häufig zur Lösung von zweidimensionalen Problemen eingesetzt [LuV86]. Der Vorteil ist die feste Anzahl von nur vier Verbindungskanälen (‘links’) bei beliebiger Größe des Gitters. Der Transputer mit seinen vier bit-seriellen Links [T800] ist ein VLSI-Prozessor, der direkt für eine solche Anordnung eingesetzt werden kann. Um die Kommunikation an den Rändern des Gitters nicht abbrechen zu lassen, kann das Gitter zum 2D-Torus ergänzt werden. Vorlesung Rechnerarchitektur 2 Seite 64 Verbindungsnetzwerke Das hexagonale Gitter wird oft bei systolischen Algorithmen [Kung88] verwendet und ist bei dem Signalprozessor TMS320C40 [TMSC40] bereits 6 fach als byte-breite Link auf dem Chip zu finden. Die byte-breite Verbindung ermöglicht eine 8 mal größere Verbindungsbandbreite als ein serieller Kanal (bei gleicher Taktfrequenz), benötigt aber auch die 8 fache Leitungsmenge. Das hexagonale Gitter kann auch im Raum dargestellt werden und ist dann der Graph des 3D-Torus. Da neben den ebenen auch viele dreidimensionale Problemstellungen existieren, kann hierbei die Anordnung der Verbindungen zwischen den Verarbeitungsknoten als dreidimensionales Gitter erfolgen. Die große Klasse der Mehrgitteralgorithmen [Trottenberg] läßt sich auf derartige Architekturen besonders gut und einfach abbilden. Die VN nach dem Prinzip des Hypercube [Seitz 85] haben ein paar, im folgenden beschriebene, interessante Eigenschaften. Sei die Dimension n des Hypercubes gegeben, so enthält er 2n Knoten, 2n*(n-1) Verbindungen und n Verbindungen pro Knoten. Eine wichtige Eigenschaft ist, daß die maximale Verbindungslänge zwischen zwei beliebigen Knoten nur n Stufen beträgt. Damit ist er dem Gitter weit überlegen, aber durch die von n abhängige Zahl der Verbindungskanäle schlecht skalierbar. Durch die geringe Anzahl der Verbindungsschritte (‘hops’) fand er in der Anfangszeit der MIMD-Parallelrechner eine sehr weite Verbreitung[IPSC/i860] [nCube]. Die vollständige Vernetzung (‘completely interconnected’) verbindet alle Knoten mit je einem Verbindungskanal (‘link’) untereinander und stellt damit die verbindungsreichste Topologie dar. Der Aufwand von N-1 Kommunikationskanälen pro Knoten und die hohe Anzahl von Verbindungen ist aber bereits für kleine Systeme nicht vertretbar. Aus diesem Grund wird die vollständige Vernetzung für Parallelrechner kaum verwendet, obwohl ihre Eigenschaften, nur einen Verbindungsschritt (‘hop’) zu benötigen und keinen Resourcenkonflikt aufzuweisen, ideal geeignet wären. Vorlesung Rechnerarchitektur 2 Seite 65 Verbindungsnetzwerke n der nachfolgenden Tabelle sind die wichtigsten Eigenschaften von statischen VN aufgeführt. Hierbei ist N die Anzahl der Knoten im VN. Die als maximale Entfernung in der Tabelle vermerkte Wert wird oft auch als Durchmesser (‘diameter’) des VN bezeichnet maximale Entfernung (‘diameter’) Anzahl der Verbindungskanäle pro Knoten Topologie Ring 2 Baum 3 2D-Gitter 4 Gesamtzahl der Verbindungskanäle 1 2 N N-1 N-1 2*(log2N-1) 2 . N 2*N N 3*N N 3*N 3 3D-Gitter 3 . 6 3 hexagon. Gitter 3 . 6 Hypercube vollst. Vernetzung log2N log2N N log2(N/2) N-1 1 N*(N-1)/2 Verbindungseigenschaften statischer VN Dynamische Verbindungsnetzwerke Die dynamischen VN enthalten konfigurierbare Schaltelemente und unterscheiden sich in der Stufenanzahl in ein- und mehrstufige. Zu den einstufigen, dynamischen VNs gehören das ‘shuffle’-Netzwerk, der Crossbar und der Bus. In der folgenden Abbildung sind die Prinzipschaltungen der drei einstufigen VN dargestellt. Die Kreise stellen die Schaltelemente dar, die von den Kontrollsignalen Qi entweder von I nach O durchgeschaltet werden oder hochohmig sind. I1 I1 I2 Q1 I3 Q2 Q11 Q3 I2 I1 I2 Q1 Q21 Q1 O1 O1 Q12 Q1 Q22 Q1 O2 O2 O1 Bus O1‘ 2 x 2 Crossbar Grundelemente dynamischer Verbindungsnetzwerke shuffle Vorlesung Rechnerarchitektur 2 Seite 66 Verbindungsnetzwerke Dynamische Verbindungsnetzwerke Der Crossbar oder Kreuzschienenverteiler ist das universellste dynamische VN. Er gestattet es in einer Stufe, jeweils beliebige Paare von Ein- und Ausgängen miteinander zu verbinden. Er besitzt durch die Schalter in einer Spalte auch die Möglichkeit, an alle Empfänger gleichzeitig eine Nachricht zu senden (‘broadcast’). Die Schalter einer Zeile (Q12, Q22) hingegen dürfen nicht gleichzeitig aktiviert werden, da sonst die Treiber gegeneinander arbeiten. Dieser Konfliktfall muß beim Crossbar zum Konfigurationszeitpunkt durch eine Arbitrierungseinheit gelöst werden. Die Komplexität der Schaltung mit n Eingängen und n Ausgängen ist O(n), so daß die technische Realisierbarkeit nur für kleine n gegeben ist. Sie ist im wesentlichen durch die verfügbare Anzahl von Anschlußstiften (‘pin limitation’) begrenzt, nicht aber durch die Anzahl der Schaltfunktionen, welche sich durch moderne VLSI-Schaltungen ohne Schwierigkeiten integrieren lassen. So sind heute Crossbar-Bausteine mit einer Wortbreite von 8 bit und 16 Ein- und 16 Ausgängen problemlos in einer integrierten Schaltung realisierbar [MannaVN]. Erklärung der Symbolik von tri-state Schaltern In Parallelrechnern ergeben sich für den Crossbar zwei Anwendungsbereiche, die leicht unterschiedliche Implementierungen erfordern. Bei der Anwendung als VN zwischen Prozessoren und Speichermoduln in einem Vorlesung Rechnerarchitektur 2 Seite 67 Verbindungsnetzwerke System mit physikalisch gemeinsamem Speicher wird eine große Wortbreite der Verbindungen mit möglichst geringer Durchlaufzeit benötigt. Die Anzahl der Worte pro vermitteltem Paket ist gering und beträgt selten mehr als eine Cache Zeile (typisch 4 oder 8 Worte). Die Anwahl der Ausgangskanäle erfolgt durch die Auswertung von einzelnen Adressbits der Speicheradresse (Selektion der Speichermoduln). Durch Hinzufügen von Eingangs- und Ausgangsregistern können die Schaltfunktionen des Crossbars in die Pipeline des Speicherzugriffs integriert werden, was zu einem sehr hohen Durchsatz mit kleiner Latenzzeit (2-3 Takte der Zykluszeit des Systems) führt. Durch die geringe Anzahl von Steuerleitungen ist auch eine Aufteilung der benötigten Wortbreite (‘slicing’) auf mehrere parallel und synchron arbeitende VLSI-Bausteine möglich. Solche Crossbar-Bausteine können auch zur Konfiguration von Verbindungswegen zwischen Verarbeitungseinheiten [configurable pipeline] [TEX86] dienen. Bei der Anwendung des Crossbars als VN zur Kommunikation in einem Parallelrechner wird eine hohe Anzahl von Ein/Ausgangskanälen mit angemessener Bandbreite benötigt, um damit die Verbindung zwischen möglichst vielen Knoten mit nur einem Verbindungsschritt (‘hop’) zu erreichen. Bei kleinen zu überbrückenden Entfernung innerhalb eines Kabinets kann die Wortbreite 8 bit oder sogar noch breiter sein, da hier die Verbindungskanäle in die Rückwandverdrahtung (‘backplane’) integriert werden können. Bei längeren Verbindungen ist die bitserielle Übetragung und Vermittlung (z.B. 1 bit, 32x32 Links) [Inmos C104] mit höheren Taktraten vorteilhafter, weil dadurch die Verbindungen durch Kabel einfacher sind. Wünschenswert sind für die größeren Datenpakete des Botschaftenaustauschs pro Kanal Pufferregister (‘fifo’) und eine Flußkontrolle, um bei blockiertem Ausgangskanal ein Paketverlust zu vermeiden. Die Vermittlung wird durch Interpretation des Nachrichtenkopfes vorgenommen, der den Nutzdaten der Nachricht vorangestellt sein muß. Zum Aufbau größerer VN sind verschiedene Anordnungen von mehreren Crossbars möglich. Eines der einfachsten und damit sehr verbreiteten VN ist der Bus. Der Bus ist ein Crossbar mit der Konfiguration m x 1, und ist damit eine Spalte dieses VNs. Er ist kostengünstig realisierbar und seine Schalterfunktionen sind physikalisch auf die Busmoduln verteilt. Seine wesentliche Begrenzung ist die Schaltgeschwindigkeit und die Anzahl der Busteilnehmer. Die Schaltgeschwindigkeit hängt von der Länge der Busleitungen, der Ankoppelkapazität und der verwendeten Signalpegel ab. Moderne Bussysteme, wie z.B. der VME-Bus [VITA], der PCI-Bus [PCI-Spec] oder der Futurebus+ erlauben Datenraten von 120Mbyte/s bis zu 1,2 Gbyte/s bei Bitbreiten von 32 - 256 bit. Sie werden hauptsächlich für kleinere Parallelrechnersysteme verwendet, da ihre Bandbreite nicht mit der Anzahl der Busteilnehmer ansteigt. Für die Ein/Ausgabe und den Anschluß von Peripheriegeräten finden Bussystem auch in größeren Parallelrechnern ihre Verwendung. Das shuffle-Netzwerk läßt sich ebenfalls aus der Crossbar-Struktur ableiten. Es ist ein 2 x 2 Crossbar mit eingeschränkter Ansteuerfunktion. Bei Q1 unwahr erfolgt die Verbindung von I1 nach O1 und von I2 nach O2. Ist Q1 wahr, so vertauscht sich die Zuordnung der Ausgänge. Vorlesung Rechnerarchitektur 2 Seite 68 Verbindungsnetzwerke Q1 = wahr Q1 = unwahr I1 O1 I1 O1 I2 O2 I2 O2 Grundschaltung Durchschaltung ‘forward’ Q1 Erweiterung um ‘broadcast’ Vertauschung ‘exchange’ B =0 Q1 B =0 I1 O1 I1 O1 I2 O2 I2 O2 ‘lower broadcast’ ‘upper broadcast’ Schaltfunktionen des shuffle-Netzwerkes Einige Realisierungen erweitern diese einfache Ansteuerung durch eine Duplizierungsfunktion von je einem Eingang auf beide Ausgänge. Diese Schaltfunktionen werden von einem zusätzlichen Kontrolleingang gesteuert und als ‘broadcast’ bezeichnet. Das shuffle-VN ist durch seine eingeschränkte 2 x 2 Grundstruktur nicht skalierbar, wird aber als Element für den Aufbau von mehrstufigen VN benutzt. Mehrstufige Verbindungsnetzwerke [Siegel89] sind aus mehreren Lagen der Grundschaltung des shuffle-Netzwerkes zusammengesetzt. Folgende Topologien gehören u.a. zu der Klasse der mehrstufigen VNs: • • • • • • • Banyan Baseline Cube Delta Flip Indirect Cube Omega Ein ausgewähltes mehrstufiges VN (Banyan) zeigt den prinzipiellen Aufbau. Vorlesung Rechnerarchitektur 2 Seite 69 Verbindungsnetzwerke I1 O1 I2 O2 I3 O3 I4 O4 I5 O5 I6 O6 I7 O7 I8 O8 Banyan Verbindungsnetzwerk Als Schaltelemente werden Shuffle-VN eingesetzt. Unterschiede gibt es nur in der Art der Leitungsführung zwischen den Schaltelementen. Sie benötigen bei N Ein- und Ausgängen zu ihrer Realisierung N/2 (log2N)-1 shuffle-Elemente und bestehen aus (log2N)-1 Ebenen. Die oben aufgezählten mehrstufigen VNs sind alle nicht blockierungsfrei. Bereits ein einziger Verbindungsweg für eine Anforderung zwischen einem Eingang und einem Ausgang, wie in Abb 1.7 schattiert eingezeichnet, läßt viele andere Anforderungen nicht mehr zu. Um das Blockierungsverhalten zu verbessern, kann man diese Netzwerke mit zusätzlichen Ebenen ausstatten, damit im Falle von Blockierungen die Verbindungswege umgeordnet werden können. Das Benes-Netzwerk ist ein Beispiel für eine solche Anordnung. Es gestattet die Schaltung aller Permutationen zwischen Ein- und Ausgängen. Wie in der folgenden Abbildung zu erkennen ist, besteht es aus der Hintereinanderschaltung von zwei Banyan-VN und besitzt 2*(log2n)-1 Ebenen. Vorlesung Rechnerarchitektur 2 Seite 70 Verbindungsnetzwerke I1 O1 I2 O2 I3 O3 I4 O4 I5 O5 I6 O6 I7 O7 I8 O8 Benes-Netzwerk Die Nachteile der hohen Blockierungsmöglichkeiten von mehrstufigen VN, bestehend aus shuffle-Elementen, werden durch die Verwendung von Crossbars anstelle der shuffle-Elemente vermieden. Diese, als CLOS-Netzwerke [CLOS] bezeichneten VN kombinieren die Vorteile des Crossbars mit der annehmbaren Komplexität der mehrstufigen VN. Sie bestehen aus mehreren Stufen (typisch drei) und die Crossbars jeder Sufe haben eine unterschiedliche Konfiguration. In der folgenden Abbildung ist eine allgemeine Form des CLOSNetzwerkes mit den Parametern n, m und r dargestellt. Wählt man aus Gründen der einfachen technischen Realisierung n=m=r und nimmt weiterhin einen 16 x 16 Crossbar als Grundelement an, so verbindet ein solches Netzwerk 256 Eingänge mit ebensovielen Ausgängen. Vorlesung Rechnerarchitektur 2 Seite 71 Verbindungsnetzwerke I1 I2 1 1 O1 I1 2 O2 I2 nxm In I1 I2 m 2 I1 I2 r Om Ir O1 I1 O2 I2 I1 2 O2 I2 m 2 Or Im O1 I1 O2 I2 Ir Or Im O1 I1 O1 I1 O2 I2 O2 I2 Ir O1 2 O2 m 2 On O1 O2 On r O1 O2 mxn rxr Om 1 mxn Om m 1 mxn rxr nxm In O1 rxr nxm In 1 1 Or Im On CLOS-Verbindungsnetzwerk Eine weitere Klasse von VN bilden die hierarchischen Verbindungsnetzwerke. Darunter versteht man die mehrfache Verwendung des gleichen VN oder unterschiedlicher VN zum Aufbau von VN mit höherer Verbindungskomplexität. Da hierbei auch die Vermischung von statischen und dynamischen VN möglich ist, ergibt sich eine Vielzahl von unterschiedlichen Strukturen, die hier nicht alle behandelt werden können. Einige Beispiele von hierarchischen VN sollen die Vielfältigkeit ihrer Realisierungen veranschaulichen. Ersetzt man die Verbindungsknoten in einem statischen VN wie dem binären Baum durch Schaltelemente und erhöht auf jeder Ebene die Anzahl der Verbindungen, so erhält man den Leisersonschen Baum [Leiserson] oder ‘fat tree’ in Abb 1.10. Er vermeidet durch die größere Anzahl von Leitungen zur Wurzel hin den beim binären Baum auftretenden Engpaß der Kommunikationsbandbreite in der Wurzel. Als Schaltelemente in den Verbindungsknoten kommen Crossbars mit unterschiedlichen Konfigurationen zum Einsatz. Vorlesung Rechnerarchitektur 2 Seite 72 Verbindungsnetzwerke 3x3 Crossbar 4x3 Baum 2x2 Rechenknoten Leisersonscher Baum ‘fat tree’ fat tree’ mit Crossbar-Schaltern Die rekursive Verwendung von gleichen Crossbarkonfigurationen ergibt Hierarchien von Crossbars, die zu den unterschiedlichsten sehr kompakten Realisierungen von VN führen [MON89] [GIL93]. Bei der Crossbarhierarchie führt die Verbindung von zwei Knoten über maximal 2h+1 Vermittlungsstufen, wenn h die Höhe der Hierarchie ist. Da ein solches hierarchisches Crossbar-Netzwerk bereits bei einer geringen Höhe h viele Knotenrechner mit sehr wenigen Vermittlungsschritten verbinden kann, wird es in Zukunft in vielen Parallelrechnern zu finden sein. Vorlesung Rechnerarchitektur 2 Seite 73 Examples of Interconnection Networks General remarks Interconnection network (IN): A network is composed of links and switches. It is used to transfer information from any source node to any desired destination node. The actual taken path through the network ist the route. The message injection at the network interface (NI) is performed by the network interface controller (NIC). link: A link is a bundle of wires (or fibers) that carries the signals. The physical layer protocol defines the kind of signals, coding (characters, phit - physical unit of information), methods, etc. used for transmission. • Links may be unidirectional or bidirectional switch: The switch is the dynamic switching function within the IN and consists of input buffer, arbiter, multiplexer, output driver and required control logic. route: A route is the path through the IN for the message. There are different path finding algorithms possible. • Inportant: "deadlock" avoidance! message: A message contains the information (payload) to be transmitted over the IN. This information is encapsulated by the message frame (header, payload, trailer). Header and trailer are overhead but required for the pysical transport layer. Most message protocols support variable length data as payload. header idle SOF R0 R1 idle routing info SOF R1 source path routing: cut-through routing R3 R4 SOF D0 ... trailer CRC EOM switch level 0 X header R2 payload stripping R2 R3 R4 SOF D0 ... CRC EOM Vorlesung Rechnerarchitektur 2 Seite 74 Examples of Interconnection Networks General remarks flow control: The flow control mechanism determines, when a message, or portions of it, moves along its route. Flow control is necessary, because of limited buffer space within the switches or the receiving node. Discarding messages due to buffer overflow is no design space alternative, because it requires retransmissions requested from higher protocol levels. reverse flow control backpressure flit - flow control unit sampling points serial data transmission eye diagram to be extended ... phase jitter amplitude noise Vorlesung Rechnerarchitektur 2 Seite 75 Interconnection Networks Examples of Systems Digital Crossbar Switch AS8840 • 16 groups mit 4 bits (nibble) • tpd Din --> Dout 20us • input: registered or non-registered • output: central controlled, no arbitration, OE for every port two configurations selectable with control line • case: PGA ca. 109 signal pins + GND + VCC • bipolar AS technology Top Level Diagram Digital Crossbar Switch AS8840 4 4 4 4 4 4 4 4 In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX In REG In REG Out MUX Out MUX Control Data Distribution Bus 4 4 4 4 4 4 4 4 Vorlesung Rechnerarchitektur 2 Seite 76 Interconnection Networks Examples of Systems Digital Crossbar Switch AS8840 Block Diagram Digital Crossbar Switch AS8840 CRCLK SELDLS LSCLK D3-D0 OED0 D7-D4 SELDMS MSCLK data path MUX LOGIC NIBBLE 0 64 64 4 CONTROL IN CONTROL OUT MUX LOGIC NIBBLE 8 4 64 4 D35-D32 OED8 4 MUX LOGIC NIBBLE 1 MUX LOGIC NIBBLE 9 D39-D36 OED1 D11-D8 OED9 MUX LOGIC NIBBLE 2 MUX LOGIC NIBBLE 10 D43-D40 OED2 D15-D12 OED10 MUX LOGIC NIBBLE 3 MUX LOGIC NIBBLE 11 D47-D44 OED3 D19-D16 OED11 MUX LOGIC NIBBLE 4 MUX LOGIC NIBBLE 12 D51-D48 OED12 OED4 D23-D20 MUX LOGIC NIBBLE 5 MUX LOGIC NIBBLE 13 D55-D52 OED5 D27-D24 OED13 MUX LOGIC NIBBLE 6 MUX LOGIC NIBBLE 14 D59-D56 OED6 D31-D28 OED14 MUX LOGIC NIBBLE 7 OED6 32 32 64 data path control READ MUX LOGIC NIBBLE 15 32 D63-D60 OED15 32 64 LOAD 2 OEC CONTROL IN/OUT 2 LOGIC CNTR 15- CNTR 11CNTR 12 CNTR 8 CNTR 7CNTR 4 CNTR 3CNTR 0 configuration control CRSEL 1CRSEL 0 CRADR 1CRADR 0 CRSRCE CRWRITE CRREAD WE Vorlesung Rechnerarchitektur 2 Seite 77 Interconnection Networks Examples of Systems SELDS or SELDMS LSCLK or MSCLK 4 Input Multiplexer Data Nibble Multiplexer Logic 4 Nibble to Data Bus Data input register registered path 4 asynch. path 4 4 OED X 4 4 (15 x 4) 60 16 : 1 MUX Data Bus 64 4 4 4 DXX-DXX 4 4 4 4 2 4:1 4 4 4 4 MSH/LSH Exchange Readback CFXX1 4 CFXX2 CLRK CFN Nibble from Data Bus 4 4 control flip-flop nibble input 4 control nibble output to logic Vorlesung Rechnerarchitektur 2 Seite 78 Interconnection Networks Examples of Systems Crossbar: Einsatzmöglichkeiten des Crossbars von TI Problem: Laden der Konfiguration 1. Möglichkeit über control port 2. Möglichkeit über Datenport 64 bit 16 x 4 bit Konfig. CF1 Data Path CF2 2. 16 x 4 4 x 4 bit 0-3 4-7 8 - 11 Port control bits 12 - 15 1. 1. Laden der Konfiguration mit 64 bit 2. Benutzen der Datenpfade Kontrolleingänge für Konfiguration 4 Takte pro Konfiguration! Typische Anwendung: 1 Takt pro Konfiguration Multiplexen der Daten mit Konfigurationsinformation konfigurierbare Pipeline A: = ((B + C) / (D - E) * (F + B) XBar C D B + E F B + * A B C D E F + - + - + - Registerfile := / A * VN Funktionseinheiten Ankopplung von parallelen Speichermodulen an arithmetische Funktionseinheiten für Vektorverarbeitung Vorlesung Rechnerarchitektur 2 Seite 79 Interconnection Networks Examples of Systems AMRD Network • • • • • • 2-Dim. Netzwerk: IC von AMETEK AUS 2010 System Serie AMRD: Automatic Message Routing Device input: byte wide + control 5 x (N, S, E, W, P) handshake control, fully asynchronous output: byte wide + control 5 x (N, S, E, W, P) o case: 132 pin PGA, CMOS VLSI custom chip 1.6 µm AMRD Network P (-1,1) P P (1,1) (0,1) P P P + x N W (-1,0) E + (1,0) y S P (-1,-1) • • • • P P (0,-1) (dx, dy) (1,-1) high speed 2-D network component for message passing automatic routing between channels through relative x-y addressing in packet header data rate 20 MByte/s per channel, 5 channels one byte buffer Vorlesung Rechnerarchitektur 2 Seite 80 Interconnection Networks Examples of Systems: AMRD Network North 8 8 request acknowledge tail 3 x control 3 Si No Data handshake end of message x y 3 West Eo Ei 8 8 8 Wo East 8 Wi Po Pi So Ni RESET 8 8 8 8 South Eo Ni Ei Pi No x-Router Pt Wi y-Router Po So W o Si Vorlesung Rechnerarchitektur 2 Seite 81 Interconnection Networks Examples of Systems 2-Dim.-Netzwerk: Ametek • Paket Format: n Bytes maximal 256 data bytes B0: dx B0 [D7] = sign B0 [D5:D0] = Entfernung B1: dy B2: data 0 B3: data 1 : : Bn: data m-1 letztes Byte wird durch tail bit angezeigt message length n = m + 2 Channel Handshake Reg Ein-Flanken-Synchronisierung Daten-bytes werden von IC zu IC per handshake weitergegeben. Ack Data Routing strategy: M --> Pi Ei Pi Wi : Eingang dx = "+" dx - 1 dx - 1 dx - 1 -> Eo -> Eo -> Wo dx = "0" strip dx strip dx strip dx -> Pt -> Pt -> Pt dx = "-" dx + 1 dx + 1 dx + 1 -> Eo -> Wo -> Wo ------------------------------------------ than dy Ni Pt Si : Eingang dy = "+" dy - 1 dy - 1 dy - 1 -> No -> No -> So dy = "0" strip dy strip dy strip dy -> Po -> Po -> Po dy = "-" dy + 1 dy + 1 dy + 1 -> No -> So -> So first dx until dx = 0 strip dx until dy = 0 M -> Po Vorlesung Rechnerarchitektur 2 Seite 82 Interconnection Networks Examples of Systems 2dim Netzwerk: Ametek Zur Veranschaulichung der Routing Pfade innerhalb des ICs soll folgendes Bild dienen: Ei Pi Wi =0 =0 = + - X Ni =0 X Pt =0 =0 =0 Eo = Po + = Wo dx Si - X X No = So X-Router dy X kommt nicht vor Y-Router Pt ist der Überkoppelpunkt von x- nach y- Richtung. Er wird immer für die gesamte Länge eines Pakets arbitriert. Nach dem Ende (tail bit gesetzt) eines Pakets werden die weiteren requests nach dem "round robin"-Verfahren behandelt, um eine gleichberechtigte Benutzung von Pt sicherzustellen. Ebenso erfolgt die Arbitrierung von Eo, Wo, No und So. Vorlesung Rechnerarchitektur 2 Seite 83 Interconnection Networks Examples: ATOLL Architecture Overview The ATOLL Chip completely integrates switch, network ports and network interfaces on a single chip. It mainly consists of a self-routing 8x8 crossbar switch where four ports are used as link ports connecting to the interconnection network and four network ports connecting to the host ports. The four host ports are completely replicated devices to directly support more than one process or more than one processor. This feature fits well to the upcoming SMP dual and four processor nodes. PCI PCI-X Interface Interface Host Port 0 Network Network Port0 Port Host Port 1 Network Network Port1 Port Host Port 2 Network Network Port2 Port 64 Host Port 3 Network Network Port3 Port 64 8+1 8+1 8x8 Crossbar Link Link Port0 Port Link Link Port1 Port Link Link Port2 Port Link Link Port3 Port PCI-X-Bus or PCI66 The host ports can be mapped into the user’s address space to give the user direct access to the communication device (user level communication). User level communication does not involve the operating system for each send/receive operation and thus significantly reduces communication latency. As a connection to the host system the standard PCI-X interface is used. The PCI-X core connects the four host ports to the PCI-X bus providing a maximum bandwidth to the host of 1GBytes/s (133MHz x 8 Bytes). Slower bus specifications are also supported, e.g. PCI-X 100, PCI-X 66 and PCI 66/33 with a data width of 64 or 32 bits. Vorlesung Rechnerarchitektur 2 Seite 84 Interconnection Networks Examples: ATOLL The network port converts the 64bit data stream to and from the host port to a byte wide stream for the interconnect system. The link port adds the link level protocol to the message and controls the transmission from link port to link port through the link cable. One link cable houses a sending and a receiving data channel each 9bit wide, providing a bidirectional interconnect between two nodes. The bandwidth is directly related to the ATOLL onchip clock and thus results in 250MBytes/s for each direction on one link, summing up to an aggregate bandwidth of 2GBytes/s for all four links. The typical cluster to be constructed using four links will be a grid or torus as depicted in the following figure. Link Node Port 0 Link Node Port 1 Link Node Port 2 Link Node Port 3 Link Node Port 4 Link Node Port 5 Link Node Port 6 Link Node Port 7 Link Node Port 8 Link Node Port 9 Link Node Port 10 Link Node Port 11 Link Node Port 12 Link Node Port 13 Link Node Port 14 Link Node Port 15 The bisection bandwidth of this 16 node configuration is 8 x 500MBytes/s = 40GBytes/s and the longest path is 4 hops. Each hop adds merely 27 clock ticks to the pipelined message transport time. This interconnect structure is scalable to a high number of nodes (8 x 8 = 256 or more), because adding nodes also add crossbar switches for interconnectivity. The limits of the torus will be reached, if long messages block a lot of intermediate crossbar stages. FIFO Input buffer in each channel in front of the crossbar minimize this effect and provides a smooth transition from wormhole routing to store-and-forward in case of a heavy loaded interconnect. Vorlesung Rechnerarchitektur 2 Seite 85 Interconnection Networks Examples: ATOLL Link Protocol A 9bit data value forms a flit (flow unit) and is the basic data item which is send over a link. The ninth bit distinguishes between normal data and special control bytes. The control flits are used to implement a link protocol with reverse flow control (stop transmission in the case of blocking, etc.) and retransmission of corrupted data. The bidirectional interconnection allows a simple implementation of the reverse flow control mechanisms without the introduction of a special signal line running in the reverse direction. The reverse flow control flits are injected into the opposite link channel and extracted by the other side from the flit stream Since there is no special data_valid line, an IDLE control flit is transmitted on each active clock edge, if no message data is available. The IDLE can be inserted anywhere in the data stream over the link and is extracted by the InChannel of a Link Port. Link Port Link Port OutChannel InChannel cntl data data data cntl data data cntl recieved send bidirectional physical link cntl cntl data data cntl data data data cntl cntl OutChannel InChannel The following figure shows the typical structure of a message. The routing frame is assumed to be shorter than 64 bytes. The header and the data frame are assumed to be longer than 64 bytes and are therefore partitioned into several LPs. Message Routing frame SOF R R Routing R EOP SOF H Header frame ... H CRC EOP Header H H Data frame SOF D D D ... CRC EOP Data first ... Header cont. CRC EOP D D D ... CRC EOP Data cont. D D Data last D ... CRC EOM Vorlesung Rechnerarchitektur 2 Seite 86 Interconnection Networks Examples: ATOLL LPs are acknowledged by the InChannel of a Link Port by sending POSACK (CRC ok, no parity errors) or NEGACK (CRC failure, parity error) flits in the reverse direction. To hide the acknowledge delay, a second LP is transmittted while waiting for the acknowledge of the first one. Only two acknowledges can be outstanding and in the case of a retransmission, both LPs are retransmitted, since the InChannel stops reception of LPs after detecting an error. A RETRANS control character preceeds the retransmitted LP and restarts the transmission. Link Port OutChannel EOP CRC D D IDLE IDLE SOF InChannel Flit Fifo IDLE EOP CRC IDLE D OutChannel InChannel next LP EOP CRC frees buffer D D SOF D D CRC check ok POSACK IDLE D SOF OutChannel InChannel Flit Fifo IDLE IDLE D EOP D to Xbar InChannel Two LP buffers to Xbar from Xbar Link Port CRC OutChannel Acknowledgement of Link Packets STOP and CONT are two control flits, which are used to stop and restart data transmission in the case of bocking. If the fifo inside the InChannel is more than half full, a STOP is send. When the fifo water mark reaches the 25% barrier, a CONT is send to signal enough space for more data. clk Data X x D0 x D1 D2 x valid no data avail. stop blocking blocking data data latched latched Data Transfer Protocol data latched Vorlesung Rechnerarchitektur 2 Seite 87 Leistungsmessung in Parallelrechnern Laufzeitbestimmung Beobachtung des dynamischen Ablaufgeschehens, um die Interagierenden Aktivitäten des parallelen Programms zu verstehen. • Reihenfolge • Dauer • zeitliche Überlappung • Wechselwirkungen Beobachtung des Systems = "Monitoring" Einbringen der Meßstellen in ein Programm = "Instrumentierung" Methoden des Monitorings • Hardwaremessung • Softwaremessung • Hybridmessung } Erzeugung eines Traces (spur) Visualisierung Hardwaremessung In der Hardware eingebaute Schaltungen erfassen, zählen, wichten Ereignisse (’events’) und speichern die Daten. + die Messungen erfolgen ohne Eingriffe in die Software und den zeitlichen Ablauf. - die Hardware-Monitore haben eine eingeschränkte Flexibilität, sie sind fest eingebaut, eventuell konfigurierbar für unterschiedliche events. - Rechnerabhängig => nicht portabel Softwaremessung Ein zusätzliches Meßprogramm, der Software-Monitor, beobachtet die Zustände im Objektrechner und der dort ablaufenden Programme und speichert die ’events’ in den ’trace’-Dateien. Meßstellen in der Anwendung oder im Betriebssystem. + keine zusätzliche Meßhardware erforderlich => portabel, plattformunabhängig. + direkter Bezug zwischen Anwendung und Meßstelle. - erhebliche Verzögerung der zu beobachtenden Software. Eventuell auch qualitative Veränderung der Abläufe in der Anwendung. Vorlesung Rechnerarchitektur 2 Seite 88 Leistungsmessung in Parallelrechnern Hybridmessung Die Erkennung interessierender Zustände und Ereignisse erfolgt per Software, ihre Erfassung und Aufzeichnung aber per Hardware. Software-Meßpunkte im Objektsystem senden Ereigniskennungen an eine Meßschnittstelle, wo sie ein Hardware-Monitor abgreift und aufzeichnet. + geringe Verzögerung der Anwendung + problemorientierter Bezug - zusätzlicher Hardware-Aufwand fur Monitor und E/A Schnittstelle - Portabilität abhängig von Hardware-Monitor Methode und Vorgehensweise The most important question to be answered before attempting to monitor a machine are what to measure and why the measurement should be taken. "choose a monitor -> perform some measurement -> wonder what to do with the data" The purpose of measurement is insight, not numbers. Zeitgesteuerte Ereignisgesteuerte Messungen Zu extern gewählten Beobachtungszeitpunkten wird der Zustand des Objektsystems erfaßt Durch vom Meßobjekt gesteuerte Messungen werden "Ereignisse" (’events’) erfaßt. ereignisgesteuerte Messung: Aufzeichnung von Kennung und Zeitpunkt eines Ereignisses. potentielles Ereignis: ist ein Beobachtungsstützpunkt im Programm. Ereignis: ist das Durchlaufen durch einen Beobachtungsstützpunkt im Programm, sowie ein Zustandswechsel im System, der per Hardware erkannt wird. Aktivitäten: sind zeitlich andauernde Zustände oder Rechenprozesse endlicher Länge. Vorlesung Rechnerarchitektur 2 Seite 89 Leistungsmessung in Parallelrechnern Ereignisse dienen dazu, Anfang und Ende der Aktivität mit einem Zeitstempel zu versehen. Daraus läßt sich die Dauer der Aktivität bestimmen. double time1, time2, deltatime; time1 = MPI_Wtime(); processing //Activity time2 = MPI_Wtime(); . . . deltatime = time2-time1; printf("tag %f",deltatime); Man unterscheidet logische und physikalische Zeitstempel, wobei logische nur die Reihenfolge der Ereignisse angeben, während physikalische Zeitstempel die Echtzeit des jeweiligen Knotenrechners als Zeit verwenden. Diese Zeiten können entweder über das Verbindungsnetzwerk abgeglichen werden (sie haben damit eine Ungenauigkeit von ca. der Kommunikationszeit) oder über eine zentrale Uhr an alle Knotenrechner verteilt werden. Globale Uhren in Parallelen Systemen Clock Generator Clock Distribution Clock Distribution Cable with equal length P0 Timer global Reset P1 Timer P2 Timer P3 Timer Vorlesung Rechnerarchitektur 2 Seite 90 Taktverteilung in Parallelrechnern PLL (Phase Locked Loop) Phasenregelschleife f Mittelung von ∆ϕ U Phase Comparator fin Integrator Voltage Controlled Oszillator Lowpass Filter Amplifier ϕ VCO fout fcmp Divider /2 fout = 2 * fin equal length fin fcmp ∆ϕ fout Vorlesung Rechnerarchitektur 2 Seite 91 Multithread Programming Threads versus Processes Processes execute in separate address spaces (schwergewichtige Prozesse) Thread execute in a common address space (leichtgewichtige Prozesse) communicate via shared memory (global shared variables) The thread model takes a process and divides it into two parts: - One contains resources used across the whole program (processwide information) such as programm instructions and global data. This part is still referred as process! - The other contains information related to the execution state, such as the program conter, a stack and local data. This part is referred to as a thread. Implementations ● PThreads POSIX threads IEEE Standard POSIX Section 1003.1 c ❍ Mach Threads Based on the functions supplied by the MACH Kernel ❍ Windows NT specific NT Threads ... further specific thread implementations ● PThreads language extension by library C-Language + thread function library + headerfile ● programming types ● function calls ✙ platform independend goal: exploiting potential parallelism ✙ overlapping I/O latencies ✙ handle asynchronous events ✙ real-time scheduling Vorlesung Rechnerarchitektur 2 Seite 92 Multithread Programming Why use threads? Creating a new process (fork and exec under UNIX) can be expensive and time consuming. A call into the operating system must be performed, which involves context switching rescheduling and a lot more activities. The entire process must be replicated (a new address space!). The communication and synchronization must be performed over address space boundaries and thus involves the operating system kernel. Every synchronization and communication is a very expensive trap into the OS. Threads can be created without replicating an entire process. Only the execution state must be created. Creating a thread is done in the user space (same address space) rather than in kernel space. Communication is done via shared variables and also synchronization stays within the user address space by using synchronization variables and mutual exclusion. Using threads is much more efficient than processes. Threads can be implemented at the operating system level or at the user level. Thread at user level are realized by a thread library which handles threads whichout the involvement of the operating system, e.g. the thread scheduling is performed as a user thread within the user process. Thread switching is thus much faster than a process switch. Execution Models ● The boss/worker model A single thread, the boss, accepts input for the entire program. Based on that input, the boss passes off specific tasks to one or more worker threads. ● The peer model In the peer (’Gleichberechtigte’) model, also known as the workcrew model, one thread must create all the other peer threads when the program starts. This thread subsequently acts as just another peer thread that work attracts, or suspends itself waiting for the other peers to finish. ● The pipeline model In the pipeline mode, each threads works at a different stage in the processing chain. All the pipeline assumptions must be met (s.a. RA1). Vorlesung Rechnerarchitektur 2 Seite 93 Multithread Programming Example program as a process with multiple threads Virtual Address Space Registers Registers Thread 1 SP PC GPR0 GPR1 ... Stack do_one_thing() i j x Thread 2 SP PC GPR0 GPR1 ... Stack do_another_thing() i j x Text Thread main Identity Resources PID UID GID GPR1 ... main() ... do_one_thing() ... do_another_thing() ... Open Files Locks Sockets ... r1 r2 Data Heap ... Vorlesung Rechnerarchitektur 2 Seite 94 Multithread Programming Example Program (sequential version) #include <stdio.h> void do_one_thing(int *); void do_another_thing(int *); void do_wrap_up(int, int); int r1 = 0, r2 = 0; main() { do_one_thing( &r1 ); do_another_thing( &r2 ); do_wrap_up(r1, r2); } void do_one_thing(int *pnum_times) { int i, j, x; for (i=0; i<4; i++) { printf("doing one thing\n"); for (j=0; j<10000; j++) x += i; (*pnum_times)++; } // wait some time } void do_another_thing(int *pnum_times) { int i, j, x; for (i=0; i<4; i++) { printf("doing another thing\n"); for (j=0; j<10000; j++) x += i; // wait some time (*pnum_times)++; } } void do_wrap_up(int one_times, int another_times) { int total; total = one_times + another_times; printf("wrap up: one thing %d, another %d, total %d\n", one_times, another_times, total); } Vorlesung Rechnerarchitektur 2 Seite 95 Multithread Programming Example program with threads Creating a new thread: pthread_create #include <stdio.h> #include <pthread.h> void do_one_thing(int *); void do_another_thing(int *); void do_wrap_up(int, int); int r1 = 0, r2 = 0; main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, (void *) do_one_thing, (void *) &r1); // // // // pthread_create(&thread2, NULL, (void *) do_another_thing, (void *) &r2); pthread_join(thread1, NULL); pthread_join(thread2, NULL); do_wrap_up(r1 , r2); } // functions from last example 1 2 3 4 parameter parameter parameter parameter Vorlesung Rechnerarchitektur 2 Page 96 Einführung in die Thread-Programmierung Posix-Threads (1) ~ sind unabhängige Befehlssequenzen innerhalb eines Prozesses ~ teilen sich alle Resourcen (Speicher, Filedeskriptoren,...) eines Prozesses Vorteile: - erhöhter Durchsatz, - Ausnutzung von Shared-Memory-Systemen mit mehreren Prozessoren, - vermeiden von Deadlocks ... Deklarationen in pthread.h! Erzeugen eines Threads Deklaration; Bekanntgabe von Namen und Typen Definition; Reservierung des Speicherplatzes int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_fkt)(void *), void *arg); thread liefert die Thread-ID des gestarteten Threads, attr enthält Attribute des Threads (wenn NULL, werden Default-Werte angenommen) Beenden eines Threads void pthread_exit(void *status) status kann von einen wartenden Thread verarbeitet werden Ein return aus der Startroutine beendet Threads ebenso Warten auf die Beendigung eines Threads: int pthread_join(pthread_t thread, void **status); Weitere Funktionen: pthread_t pthread_self(); // liefert eigene ID int pthread_equal(pthread_t t1,pthread_t t2); // vergleicht zwei Threads Vorlesung Rechnerarchitektur 2 Page 97 Einführung in die Thread-Programmierung Posix-Threads (2) The Producer/Consumer Example The Producer and Consumer in the following example share data through a common data object. If neither the Producer nor the Consumer makes any effort whatsoever to ensure that the Consumer is getting each value produced once and only once (whithout while loop). However, let’s assume for a moment that these two threads make no arrangements for synchronization and talk about the potential problems that might arise in that situation. One problem arises when the Producer is quicker than the Consumer and generates two numbers before the Consumer has a chance to consume the first one. Thus the Consumer would skip a number because it is overwritten before it could be consumed. Another problem that might arise is when the Consumer is quicker than the Producer and consumes the same value twice. Producer Consumer void producer(int *arg) { int i, n = *arg; for (i=1; i<=n; i++) { ; while (count == 1) { ; } data = i; count = 1; void consumer(int *arg) { int i = 0, n = *arg; while (1) { ; while (count == 0) { ; } i = data; count = 0; produced++; consumed++; if (i == n) return; } } } } i = data data = i write data read = 1 = 0 count Problem (‘weakly ordered’ Speicherzugriffe): Laufen die Threads Consumer und Producer nebenläufig, so kann es passieren, dass der Consumer einen bereits geänderten count Wert sieht, aber noch die alten Daten verwenden würde --> Synchronisation durch eine Speicherbarriere notwendig (PowerPC620 special instruction sync to force all issued store instruction to complete) Vorlesung Rechnerarchitektur 2 Page 98 Einführung in die Thread-Programmierung Posix-Threads (3) Bsp. Producer/Consumer: Erweiterung der Speicherzelle zur Datenweitergabe in einen Ringpuffer. #define next(x) (( (x) + 1) % BUF_SIZE) data buf[BUF_SIZE]; int rdptr = 0, wrptr = 0; Queue rdptr + buffer size wrptr test rdptr Producer Consumer while (work_to_do) { buf[wrptr] = produce(); while (next(wrptr)==rdptr) (); wrptr = next(wrptr); } while (work_to_do) { while (wrptr == rdptr) (); consume(buf[rdptr]); rdptr = next(rdptr); } write value incr rdptr (wrptr == rdptr) empty ring buffer queue (next(wrptr)==rdptr) full ring buffer queue. Es existiert immer ein leerer buffer, in den geschreiben werden kann! Problem Sobald mehr als ein Producer oder auch mehr als ein Consumer eingesetzt wird, funktioniert das Programm nicht mehr, da das Lesen und Ändern des wrptr oder des rdptr nicht atomar erfolgen. Lösung: Synchronisation Zugriff auf knappe Resourcen, atomare Operationen, gegenseitiger Ausschluß Informationen und Beispiele zu Producer Consumer [The JavaTM Tutorial] In Java: http://java.sun.com/docs/books/tutorial/essential/threads/synchronization.html Mit gcc: http://www.bagley.org/~doug/shootout/bench/prodcons/prodcons.gcc Vorlesung Rechnerarchitektur 2 Page 99 Einführung in die Thread-Programmierung Posix-Threads (4) Mutex - garantiert die exclusive Ausführung kritischer Code-Sequenzen int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); //EBUSY if locked DESCRIPTION The mutex object referenced by mutex is locked by calling pthread_mutex_lock(). If the mutex is already locked, the calling thread blocks until the mutex becomes available. pthread_mutex_t lock; Initialisierung: int pthread_mutex_init(pthread_mutex_t *mp, // mp mutex pointer const pthread_mutexattr_t *attr); oder statisch: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; Löschen eines Mutex: int pthread_mutex_destroy(pthread_mutex_t *mp); Lock/Unlock: int pthread_mutex_trylock(pthread_mutex_t *mp); int pthread_mutex_lock(pthread_mutex_t *mp); int pthread_mutex_unlock(pthread_mutex_t *mp); Ein Thread, welcher einen Mutex lockt, ist sein Besitzer. Nur der Besitzer kann einen Mutex "unlocken". Bsp. Consumer/Producer mit Mutex: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER Producer Consumer while (work_to_do) { pthread_mutex_lock(&mutex); buf[wrptr] = produce(); while (next(wrptr)==rdptr) ; wrptr = next(wrptr); pthread_mutex_unlock(&mutex); } while (work_to_do) { pthread_mutex_lock(&mutex); while (wrptr == rdptr) ; consume(buf[rdptr]); rdptr = next(rdptr); pthread_mutex_unlock(&mutex); } Problem! das Beispiel funktioniert dann nicht, wenn der Consumer auf eine leere Queue testet, oder der Producer auf eine volle Queue trift. Die Semaphore-Variable wird dann nicht mehr freigegeben. Vorlesung Rechnerarchitektur 2 Page 100 Einführung in die Thread-Programmierung Posix-Threads (5) Vorsicht bei der Verwendung automatischer Variablen als Argumente bzw. Ergebnisse von Threads: pthread_t t; void *g(int *i) { int res; // Speicherplatz im Stack !!! /* berechnet irgendwas, benutzt dabei *i, Eregebnis in res */ return &res; // das geht nicht gut! Warum? } void f() { int a = 7; pthread_create(&t, NULL, g, &a); } // auch das geht nicht gut! Warum? // queueing von create; a evtl. nicht mehr bekannt Vorlesung Rechnerarchitektur 2 Page 101 Einführung in die Thread-Programmierung Posix-Threads (6) Condition Variable - warten auf Ereignisse pthread_cond_t cond; Initialisierung: int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); oder statisch: pthread_cond_t cond = PTHREAD_COND_INITIALIZER; löschen einer Condition-Variable: int pthread_cond_destroy(pthread_cond_t *cond); Warten auf ein Ereignis: int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); blockiert den aufrufenden Thread bis ein anderer Thread das Eintreten des Ereignisses cond signalisiert. Der Mutex mutex wird unlocked bei Aufruf von pthread_cond_wait und wieder gelockt, bevor die Funktion beendet wird. int pthread_cond_signal(pthread_cond_t *cond); Condition-Variablen vermeiden ein busy-wait: for(;;) { pthread_mutex_lock(mutex); if (cond) break; pthread_mutex_unlock(mutex); } <hier ist die Bedingung erfüllt> pthread_mutex_unlock(mutex); Nachteile: verbraucht sehr viel Resourcen, verlangt Programmierdisziplin Version mit Condition-Variablen: pthread_mutex_lock(mutex); pthread_cond_wait(cond,mutex); <hier ist die Bedingung erfüllt> pthread_mutex_unlock(mutex); Es ist möglich, daß ein pthread_cond_signal mehr als einen Thread aufweckt, ebenso kann ein pthread_cond_wait scheitern. Daher sollte nach dem Aufruf von pthread_cond_wait getestet werden, ob die Bedingung auch wirklich erfüllt ist (siehe Bsp. zwei Seiten weiter!!) Vorlesung Rechnerarchitektur 2 Page 102 Einführung in die Thread-Programmierung Posix-Threads (7) Beispiel: FIFO-Queue für Datenpointer. Es soll für beliebig viele Thread möglich sein, Pointer in das FIFO einzufügen bzw. zu entnehmen. #include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define QSIZE 10 typedef struct { pthread_mutex_t buf_lock; int start_idx; int num_full; pthread_cond_t notfull; pthread_cond_t notempty; void *data[QSIZE]; } circ_buf_t; /* number of pointers in the queue */ /* /* /* /* /* /* lock the structure */ start of valid data */ # of full locations */ full -> not full condition */ empty -> notempty condition */ Circular buffer of pointers */ circ_buf_t *new_cb() { circ_buf_t *cbp; cbp = (circ_buf_t *) malloc(sizeof (circ_buf_t)); if (cbp == NULL) return (NULL); pthread_mutex_init(&cbp->buf_lock, NULL); pthread_cond_init(&cbp->notfull, NULL); pthread_cond_init(&cbp->notempty, NULL); cbp->start_idx = 0; cbp->num_full = 0; return (cbp); } void delete_cb(circ_buf_t *cbp) { pthread_mutex_destroy(&cbp->buf_lock); pthread_cond_destroy(&cbp->notfull); pthread_cond_destroy(&cbp->notempty); free(cbp); } new_cd legt einen neuen Puffer an und initialisiert den Mutex buf_lock und die Condition-Variables notfull und notempty. delete_cb löscht den Mutex und die Condition-Variables und anschließend den Puffer. Vorlesung Rechnerarchitektur 2 Page 103 Einführung in die Thread-Programmierung Posix-Threads (8) void put_cb_data(circ_buf_t *cbp, void *data) { pthread_mutex_lock(&cbp->buf_lock); /* wait while the buffer is full */ while (cbp->num_full == QSIZE) pthread_cond_wait(&cbp->notfull, &cbp->buf_lock); cbp->data[(cbp->start_idx + cbp->num_full) % QSIZE] = data; cbp->num_full += 1; pthread_cond_signal(&cbp->notempty); pthread_mutex_unlock(&cbp->buf_lock); } void *get_cb_data(circ_buf_t *cbp) { void *data; pthread_mutex_lock(&cbp->buf_lock); /* wait while there's nothing in the buffer */ while (cbp->num_full == 0) pthread_cond_wait(&cbp->notempty, &cbp->buf_lock); data = cbp->data[cbp->start_idx]; cbp->start_idx = (cbp->start_idx + 1) % QSIZE; cbp->num_full -= 1; pthread_cond_signal(&cbp->notfull); pthread_mutex_unlock(&cbp->buf_lock); return (data); } put_cb_data fügt einen Datenpointer data in den Puffer cbp ein. Dazu wird wie folgt vorgegangen: Zuerst wird der Puffer gelockt. Dann wird gewartet, bis Platz im Puffer ist. Anschließend wird das Datum in den Puffer eingefügt, evtl. wartenden Threads signalisiert, daß der Puffer jetzt nicht leer ist, und schließlich wird der Lock auf den Puffer wieder freigegeben. get_cb_data liefert das älteste Datum im Puffer. Dazu wird zuerst der Puffer gelockt. Dann wird gewartet, bis der Puffer nicht leer ist. Anschließend wird das Datum dem Puffer entnommen, evtl. wartenden Threads signalisiert, daß der Puffer jetzt nicht voll ist, und zuletzt wird der Puffer freigegeben und das Datum zurückgeliefert. Vorlesung Rechnerarchitektur 2 Seite 104 Latency Tolerance Introduction The processor-memory gap and the processor-I/O gap increases by more than a factor of five per decade. Thus, the latency of memory accesses and I/O-accesses are increasing over time. In distributed memory systems, the latency of the network, network interface, and the endpoint processing is added to that of accessing the local memory of the node. Latency usually grows with the size of the machine since more nodes implies more communication relative to computation, more hops in the network for general communication, and likely more contention. One goal of the communication protocols, the programming model, and the application algorithms is to reduce the frequency of long-latency events. A major part of parallel programming consists of structuring the application in a way to reduce the frequency of highlatency accesses. The remaining events can be handled in two ways: ● latency minimization ● latency hiding Parallel Architecture can be classified by these to methods (s.a. Introduction). Latency minimization is the first goal to achieve. It can be done by optimizing the memory hierarchy for load and store, optimize the communication operations performed by the NIC, and provide support for synchronization. Nevertheless, there is a remaining latency which cannot be minimized any further without massively increase hardware costs. The approach is to tolerate the remaining latency; that is, hide the latency from the processor’s critical path by overlapping it with computation or other high latency operations. It is important to recognize that this latency hiding requires independent work as mentioned in our analysis of parallelism. The Latency of a memory access or communication operation includes all components of the time that elapses from issue by the processor until completion. For communication, this includes processor overhead, assist occupancy (NIC), transit delay, bandwidth-related costs, and contention. The latency may be for a one-way transfer or a two-way (roung-trip) transfer. Vorlesung Rechnerarchitektur 2 Seite 105 Multithread Architectures (MTA) Mehrfädige Architekturen Das Operationsprinzip der mehrfädigen Architekturen (‘multithread architektures’ MTA) basiert auf der Kontrollstruktur des sequentiellen Kontrollablaufs und der Informationsstruktur von konventionellen von Neumann Variablen und zum Teil auf Variablen mit zukünftigem Wert (‘futures’) [futures]. Sie enthalten von dem als Faden (‘thread’) bezeichneten sequentiellen Kontrollfluß gleichzeitig mehrere aktive Fäden, deren aktuelle Instruktionen zur Ausführung bereit stehen. Die Verwendung mehrerer Fäden dient im wesentlichen dazu, vorhandene Verarbeitungseinheiten besser auszunutzen. Wartezeiten von Verarbeitungseinheiten, die durch Abhängigkeiten innerhalb eines Fadens zwischen Einheiten entstehen, sollen durch die Fortführung der Aktivität eines anderen Fadens versteckt werden. Mehrfädige Architekturen sind speziell dafür entworfen, solche Latenzzeiten zu verstecken (‘latency hiding’). Dazu müssen sie in der Lage sein, den Kontrollfaden sehr schnell zu wechseln. Diese Eigenschaft macht sie als Knotenrechner von parallelen Systemen besonders interessant, da sie sowohl die Kommunikationslatenz als auch die Speicherzugriffslatenz verstecken können. entry thread B thread A shared data access to shared data data partitioning exit Thread (Kontrollfaden) or lightweight process is a strictly sequential thread of control (program code). It consists of a part of the program code and has: • one entry • one exit - local data - internal state The strictly sequential order within a thread is often deemphasized, so that also loops and jumps back are allowed, but no jump directly into or out of the thread. Threads share data! They use a common address space. Vorlesung Rechnerarchitektur 2 Seite 106 Multithread Architectures (MTA) Mehrfädige Architekturen Die Strategie, wann ein Fadenwechsel vorzunehmen ist, ist abhängig von den Operationen, deren Latenzzeiten versteckt werden sollen. Die folgenden Operationen mit fester oder variabler Latenzzeit können zu einem Fadenwechsel benutzt werden: (1) Instruktionen (2) Blöcke von Instruktionen (3) nicht erfolgreiche Cachezugriffe (4) entfernte Speicherzugriffe Vorlesung Rechnerarchitektur 2 Seite 107 Multithread Architectures (MTA) Mehrfädige Architekturen (1) Diese Strategie verschränkt die Verarbeitung von einzelnen Instruktionen aus mehreren Fäden und nutzt die Verarbeitungspipeline eines Prozessors sehr gut aus. Werden alle Instruktionen dieser Fadenwechselstrategie unterworfen, so können alle vorkommenden Latenzzeiten versteckt werden. Die aufeinanderfolgenden Instruktionen können in der Pipeline nicht zu einem Konflikt führen, da sie aus nterschiedlichen Fäden stammen und damit datenunabhängig sind. Die Kosten eines Fadenwechsels müssen bei solch feiner Granularität extrem gering sein, um bei deren großen Häufigkeit nicht zu einer Verringerung der Verarbeitungsleistung zu führen. Der Prozessor muß also Hardwareeinrichtungen zur Verarbeitung einer genügenden Anzahl von Fäden besitzen und auch deren Kontexte ständig für die Verarbeitungspipeline bereit halten. (2) Blöcke von Instruktionen bewirken eine gröbere Granularität und reduzieren dadurch die Häufigkeit der Fadenwechsel. Die Kosten des Wechsels können durch das seltenere Auftreten höher sein und die erforderliche Hardwareunterstützung für mehrere Fäden kann einfacher ausfallen. Optimierungen der Länge der Blöcke können vom Compiler nach einer Datenabhängikkeitsanalyse vorgenommen werden, und die Lokalität bei der Verarbeitung eines Fadens wird besser ausgenutzt. Bei welcher Instruktion der Wechsel erfolgen soll, kann je nach Prozessortyp unterschiedlich sein. (3) Wird ein MTA-Prozessor mit einem Cache ausgestattet, so sind erfolgreiche Cachezugriffe latenzarm (ein oder zwei Takte) und werden normalerweise von der Verarbeitungspipeline toleriert. Ist der Zugriff nicht erfolgreich (‘cache miss’), so kann das Nachladen der Cachezeile aus dem lokalen Speicher oder aber auch aus einem entfernten Speicher (‘remote memory access’) eines gemeinsamen Adreßraums erfolgen, was unter Umständen zu erheblichen und auch nicht vorhersagbaren Latenzzeiten führen kann. In einem solchen Fall wird der Faden gewechselt, um die Latenzzeit des lokalen oder des entfernten Speicherzugriffs zu verstecken. (4) Kann der Compiler die entfernten Zugriffe bereits markieren, so können die Fäden auch nur bei solchen, mit sehr hoher und variabler Latenzzeit behafteten Instruktionen, gewechselt werden. Diese Variante ist von der Granularität schon so grob, daß die Hardwareunterstützung des Multithreading gering ausfallen kann, oder sogar ein Standardprozessor mit schnellem programmierten Kontextwechsel benutzt werden kann. Bei allen diesen Strategien wird angenommen, daß weitere Fäden zur Verarbeitung bereit stehen. Ist das der Fall, so kann der Prozessor die Arbeit an einem anderen Faden fortsetzen, was die Ausnutzung verbessert. Vorlesung Rechnerarchitektur 2 Seite 108 Multithread Architectures (MTA) Cost Evaluation Bewertet man in einer Rechnerarchitektur die Kosten der verschiedenen Funktionseinheiten (‘functional units’ FU), so sollten die Einheiten mit den höchsten Kosten auch am besten ausgenutzt werden, d.h. sie sollten während des Auftretens von Blockierungen zur Verarbeitung weiterer aktiver Instruktionen anderer Fäden benutzt werden. Die Kostenfunktion ist natürlich abhängig von der verwendeten Technologie und der Komplexität der FU. Steht die Ausnutzung der arithmetischen Ausführungspipeline im Vordergrund, so können zur Vermeidung von Pipelineabhängigkeiten der Reihe nach Instruktionen von verschieden Fäden (‘instruction interleaving’) benutzt werden, da diese per Definition datenunabhängig sind. Sind mindestens soviele verschieden Fäden verfügbar, wie die Pipeline Stufen besitzt, so kann sogar auf eine Datenabhängigkeitserkennung und -steuerung der Pipeline verzichtet werden. The overall goal is to implement a chosen program execution model in a way that offers high performance for the least cost. When do I get the highest performance? • at the maximum utilization of all resources When do I have the lowest costs? • using the cheapest technology and system design Example calculation for FP Unit cost PowerPC 620 1600,- DM/die 311 mm2 14 * 15 = 210 relative die size of PowerPC 620 measured values of ’die’ photo 210 = 311 mm2 5,5 * 5 = 27,5 311 210 1,48 factor for conversion to mm2 relative die size of FP Unit 27,5 * 1,48 = 40,7 mm2 die size of FP Unit 40,7 mm2 area fraction of FP Unit = 0,13 311 mm2 0,13 * 1600,- = 209,-DM cost of FP Unit Vorlesung Rechnerarchitektur 2 Seite 109 Multithread Architectures (MTA) Mehrfädige Architekturen Eine der ersten MTA mit einer solchen Pipelinestruktur war der Heterogenous Element Processor (HEP) [Burton Smith]. Die folgende ausführliche Beschreibung seiner Architektur dient dem Zweck, die Strategien (1) und (4) mit ihren erforderlichen Hardwareeinrichtungen aufzuzeigen. Der HEP kann gleichzeitig 16 Tasks mit jeweils 128 aktiven Kontrollfäden verwalten und besitzt spezielle Hardware zur Kontrollfadenerzeugung und Terminierung. Der Prozessor bildet die Ausführungseinheit (‘process execution module’ PEM) des HEPParallelrechner. Das Parallelrechnersystem ist als eine Architektur mit gemeinsamem Speicher konzipiert. Um die Zugriffslatenzen zu diesem gemeinsamen Speicher zu verstecken, werden die Lade- und Speicherbefehle vom Scheduler einer Speicherzugriffseinheit (‘storage function unit’ SFU) übergeben, die ebenfalls mehrere Instruktionen unterschiedlicher Fäden gleichzeitig verwalten kann. Ist die Speicheroperation erfolgt, so wird der Prozeßbezeichner PT dieses Kontrollfadens wieder zurück an die Kontrollschleife gesendet und kann damit fortgesetzt werden. Für dieses Verfahren, die Latenzzeit des Speicherzugriffs zu verstecken, wurde die Bezeichnung ‘split-phase transaction’ geprägt. Jede Task hat ihre eigenen geschützten Program-, Daten- und Registerbereiche, die durch das Task-Statusword (‘task status word’ TSW) beschrieben werden. Die TSW für diese 16 schwergewichtigen Prozesse werden ständig im Prozessor gehalten und bei jeder Ausführung einer Instruktion zur Berechnung der aktuellen Adressen von Datenobjekten herangezogen. Die 16 Task-Queues enthalten die jeweils einer Task zugeordneten 64 möglichen Einträge von Kontrollfädenbezeichnern (‘process tag’ PT) . Die 7 bit des PT zeigen auf 128 mögliche Prozeßstatusworte (‘process status word’ PSW), die die leichtgewichtigen Prozesse (‘threads’) beschreiben. Das PSW beschreibt den aktuellen Zustand eines Kontrollfadens und enthält den Instruktionszeiger, einen 4 bit Taskidentifizierer und die Offsets für die Adressierung der Registersätze. PEM PEM VN PEM PEM MEM MEM 3-Wege-Schalter bidirektional MEM MEM PEM Prozessing Element Modul MEM Speichermodul VN Verbindungsnetzwerk I/O Abb. 1.11 Architektur des HEP-Parallelrechners mit 4 Prozessoren Vorlesung Rechnerarchitektur 2 Seite 110 Multithread Architectures (MTA) Multithread Architectures (MTA) Die Struktur eines Prozessors (‘processing element module’ PEM) ist in der folgenden Abbildung vereinfacht dargestellt. Program 0 15 63 0 PT Data Loop Memory Instruction Processing Unit Register Memory Instruction Scheduler Instruction Fetch Unit PT PT PT PT Execution Pipeline Operand Fetch Unit Store Result Snapshot Register Control Loop 0 TSW 0 15 SFU Instruction Routing TSW TSW TSW TSW 15 Storage Function Unit Queues Storage Access Unit to Shared Memory Paket Switched Interconnection Network PT Storage Loop PT PT PT PT SFU Snapshot Register Struktur der Ausführungseinheit des PEM In der Kontrollschleife (‘control loop’) zirkulieren die PT, so daß eine erneute Ausführung desselben Fadens erst nach 8 Takten der Ausführungspipeline erfolgen kann. Das PT-Register entnimmt jeweils 16 PT aus den Task-Warteschlangen und gibt sie sequentiell an die Verarbeitungseinheit weiter. Dadurch wird die Verarbeitungseinheit den Tasks immer fair zugeteilt und die Instruktionen der Tasks verschachtelt (‘instruction interleaving’). In der Datenschleife werden die vom PSW-Offset und der Instruktion adressierten Operanden aus dem Registerspeicher gelesen, verarbeitet und zurückgespeichert (innerhalb von 8 Takten). Vorlesung Rechnerarchitektur 2 Seite 111 Multithread Architectures (MTA) Multithread Architectures (MTA) Der Registerspeicher enthält die Kontexte (Registersätze) aller im Prozessor geladenen Fäden. Für die externen Speicherzugriffe wurde ebenfalls eine Task-Warteschlage verwendet (‘storage loop’). Der PT für einen Speicherzugriff wird in die Speicher-Task-Warteschlage eingereiht und nach Beendigung der Speicheroperation wieder zurück in die Kontrollschleife gegeben. Solange der PT in der Speicher-Task-Warteschlage ist, ist dieser Faden von der Ausführung suspendiert. Mit der Architektur des HEP-Rechner wurde versucht, die zu dem Zeitpunkt seiner Realisierung recht teure arithmetische Verarbeitungspipeline so effizient wie möglich zu nutzen und die externen Speicherzugriffe zu verstecken. Der wesentliche Nachteil des HEP war die starke Leistungsreduzierung, wenn nur ein Faden zur Verfügung steht, denn dann sinkt die Leistung des Prozessors auf 1/8 (nur jeder 8.Takt der Verarbeitungseinheit kann von selben Faden benutzt werden. Eine Neuentwicklung, die auf ähnlichen Mechanismen des Multithreading beruht, ist das TERA-System, welches in [Tera] näher beschrieben ist. Der APRIL-Prozessor [Aga90] des ALEWIFE-Systems ist ebenfalls eine mehrfädige Architektur, nutzt aber die Strategie (2) zum Fadenwechsel. Er basiert auf einer geringfügigen Modifikation des SPARC-Prozessors, dessen überlappendes Registerfile durch Softwarekontrolle zu mehreren festen Registersätzen für 4 Kontrollfäden umstrukturiert wurde. Für jeden Faden sind zwei Registersätze bestimmt, einer für den Benutzer und einer für die schnelle Ausnahmebehandlung (‘trap’). Ein Fadenwechsel zwischen diesen vier geladenen Fäden (‘loaded threads’) erfordert nur das Retten des Programmzählers und des Prozessorstatusregisters in den faden-eigenen Ausnahmeregistersatz und kostet damit nur ca. 4 bis 10 Takte. Für den Wechsel sind keine externen Speicherzugriffe erforderlich. Da nur vier Fadenkontexte im Prozessor geladen sein können, werden die anderen nicht geladenen Fäden mittles einer Warteschlange im Hauptspeicher gehalten. Sind alle vier geladenen Fäden nicht ausführungsbereit, so muß ein geladener Faden mit einem im Speicher liegenden, ausführungsbereiten Faden gewechselt werden. Erst bei dieser Operation erfolgt die Auslagerung des Kontextes eines Fadens in den Hauptspeicher. Im MANNA-Parallelrechnersystem [Manna] werden zwei Fäden gleichzeitig durch zwei vollständige superskalare Prozessoren im Knoten realisiert. Sollte ein Faden blockieren, so kann dieser Prozessor während dieser auftretenden Latenzzeit einfach ungenutzt bleiben, da die Prozessoren innerhalb eines Knotens sehr kostengünstig repliziert werden können. Zukünftige Knotenarchitekturen werden von diesem einfachen und kostengünstigen Ansatz verstärkt Gebrauch machen, um die Vorteile der mehrfädigen Verarbeitung nutzen zu können. Die Vorteile von MTA bestehen allgemein in der guten Ausnutzung der Verarbeitungsleistung und der Toleranz bezüglich der verschiedenen Latenzzeiten eines Parallelrechnersystems. Vorlesung Rechnerarchitektur 2 Seite 112 Multithread Architectures (MTA) Multithread Architectures (MTA) Single thread vs. multiple threads Design space questions: Which functions are the most expensive ones? What kind of latency shall be hidden? Which unit is underutilized due to latency? dividing a task into threads thread wechsel acitvity rload latency hiding ? enabled rload ? latenzbehaftete Ops Latenzzeit nicht vorhersagbar! running Goal: increase of HW (Processor) Utilization Vorlesung Rechnerarchitektur 2 Seite 113 Multithread Architectures (MTA) Multithread Architectures (MTA) Multiple Context Processors - latency hiding by fast switch to next thread within one processor - latency hiding using node with multiple CPUs (Context) switch policies thread • switch on every instruction HEP interleaving of instructions from different threads on a cycle by cycle basis • switch on every load interleaving threads to hide memory access latency better: switch on a cache miss! APRIL • switch on a block of instructions interleaving of blocks from different threads remote load synchronizing load thread a P1 rload pA rloadsync P2 tag pA b pA tag tag vA state pA ? reply vA syncreply vA unpredictable complete time scheduling vA producing vA synchronization at full/empty Vorlesung Rechnerarchitektur 2 Seite 114 Multithread Architectures (MTA) Multithread Architectures (MTA) control loop thread id PC IF RFR WB FU 000 memory fetch memory loop Vorlesung Rechnerarchitektur 2 Seite 115 SCI (Scalable Coherent Interface) Introduction SCI is the modern equivalent of a Processor-Memory-I/O bus and a Local Area Network, combined and made parallel to support distributed multiprocessing with very high bandwidth, very low latency, and a scalable architecture that allows building large systems out of many inexpensive massproduced building blocks. SCI reduces the delay of interprocessor communication by an enormous factor compared to even the newest and best interconnect technologies that are based on the previous generation of networking and I/O channel protocols (FibreChannel and ATM), because SCI eliminates the need for run-time layers of software protocol-paradigm translation. A remote communication in SCI takes place as just a part of a simple load or store opcode execution in a processor. Typically the remote address results in a cache miss, which causes the cache controller to address remote memory via SCI to get the data, and within on the order of a microsecond the remote data are fetched to cache and the processor continues execution. The old approach, moving data through I/O-channel or network-style paths, requires assembling an appropriate communication packet in software, pointing the interface hardware at it, and initiating the I/O operation, usually by calling a subroutine. When the data arrive at the destination, hardware stores them in a memory buffer and alerts the processor by an interrupt when a packet is complete or the buffers are full. Software then moves the data to a waiting user buffer (sometimes this move can be avoided, in the latest systems), and finally the user application examines the packet to find the desired data. Typically this process results in latencies that are tens to thousands of times slower than SCI. These latencies are the main limitation on the performance of Clusters or Networks of Workstations. "Active Messages" promise to reduce these overheads considerably, but still will be much slower than SCI. To make program porting easy, the old protocols can be layered on top of SCI transparently. Of course, such an implementation only gains SCI's raw speed factor: to get SCI's full potential speedup, applications will need to eliminate the protocol overheads by using global shared memory directly. Vorlesung Rechnerarchitektur 2 Seite 116 SCI (Scalable Coherent Interface) Basic Features The SCI interface standard defines a point to point communication between neighbour nodes reducing the non-ideal transmission line problems of bus-based systems. It is designed to scale well as the number of attached processors increases. The transfer rate is 1 GByte/s point-to-point. SCI allows up to 64K nodes to be connected to an interconnect. Memory may be shared by all processors. The addressing scheme uses a 64bit Fixed Addressing Model. It uses 48 bit as a node offset address and 16 bit for the node addressing. SCI defines an interface standard that enables the use of many different interconnect configurations ranging from simple rings to complex multistage switching networks. The SCI-Protocols define a set of packet based bus transactions. They can very effectively be used in clustered systems because they have been designed for distributed processing and are based on an underlying multiprocessor architecture. The protocol use small packets (16-288 bytes including header) to carry data and commands between nodes with low latency. Packets can be pipelined to achieve high overall transfer rate. The basic features are: - shared memory programming model directory based cache coherence protocol distributed directory scheme 64K addressable nodes; 16 bit node identifier Split phase transaction protocol support for non-switched and switched topologies Packet switching network; ring or crossbar physical level logical level C language model of protocols 1 GByte/s 16bit parallel; 1Gbit/s serial SCI was completed in 1991, and became an approved ANSI/IEEE standard in 1992. It is currently being designed into at least half a dozen commercial computers, and is already shipping inside the Hewlett-Packard/Convex Exemplar global-shared-memory PA/RISC-based multiprocessor supercomputer. [www.dolphinics.com] Vorlesung Rechnerarchitektur 2 Seite 117 SCI (Scalable Coherent Interface) SCI Transaction Formats Request Respond Block Read: Head Block Write: Head Selected Read: Head Selected Write: Head 16 bytes Head Head 16 bytes Head 16 bytes Cache Updates: Head 16 bytes Head 0, 64 or 256 bytes Block Moves: Head 16, 64 or 256 bytes Head (16 bytes or less) Selected Locks: Head 64 or 256 bytes 64 or 256 bytes Head Head 16 bytes (semaphores) (dumping of video memory; without acknowledge) no respond Requester Responder Request Echo Respond Echo Vorlesung Rechnerarchitektur 2 Seite 118 SCI (Scalable Coherent Interface) SCI Transactions and Protocols Communication among nodes is accommodated by a set of SCI transactions and protocols that include support for: - data read/write cache coherence synchronization primitives message passing All transactions are sent as SCI packets between soure and destination nodes. Protocols are provided to handle flow control, error recovery, and deadlock prevention. The transaction format definition is independent of the network topology. SCI uses a distributed directory-based cache coherence protocol. Each shared line of memory is associated with a distributed list of processors sharing that line. All nodes with cached copies participate in the update of this list. The shared cache lines of the processors are linked together by a doubly linked list distributed over the involved processors’ memories. The coherence list pointers are the nodes addresses of the sharing nodes. The typical cache line size is 64 bytes. The cache coherence transaction manipulate a linked-list structure used to maintain a coherent memory image. Head Processor A Processor B Processor C Processor D next pointer back pointer next pointer back pointer next pointer back pointer next pointer back pointer Cache Cache Shared Mem. Cache Cache Vorlesung Rechnerarchitektur 2 Seite 119 SCI (Scalable Coherent Interface) SCI Synchronization Primitives SCI supports two types of lock primitives, cached and non-cached. Cached locks are implemented by temporarily locking a cache-line in the only_dirty (exclusive modified) state while these instruction sequences are executed. Non-cached lock transactions (e.g. swap, swap-and-compare) are provided for accessing non-cached shared data. An important feature of SCI is the ability to interface to other busses. A bus converter can simply translate the SCI commands to native bus cycles because they are very similar. Two cases are handled with special care, bus locking and cache coherence. Most backplane busses have a atomic read-modify-write operation to manipulate semaphores and other critical data. Since SCI is a four phase transaction protocol with no guaranteed delivery in order, the lock is defined as a single SCI command. SCI supports message passing as defined by IEEE Std. 1212. A stsandard non-coherent write64 transaction is used to send short messages to a specified control and status register (CSR) within the target node. A typical application for such transaction is accessing control registers of an I/O bridge. Passing of interrupts between CPU nodes and/or I/O bridges is supported by a standard SCI write transaction to a CSR register. Vorlesung Rechnerarchitektur 2 Seite 120 SCI (Scalable Coherent Interface) SCI physical level Signaling SCI uses a narrow 16-bit data path (plus clock and one flag bit) at 2ns/word (250MHz clock, both edges active), to controll the interface chip pin-count problem and make switch elements more practical. The signals are transfered using differential ECL voltage levels. One unidirectional SCI connection requires 36 signal wires. The complete bidirectional SCI link sums up to 72 signal wires. Packets A packet consists of three main sections: • header section • address and data section • error check symbol The first word of the paket contains the ID code of the final receiving node, the target. By looking at the first word of the packet, a node or switch can quickly determine where to route this packet. 250 MHz CLK FLAG DATA IDLE (16bit) CMD & TARGET FLOW SOURCE CONTROL ADDR CONTROL ADDR HEADER CMD & TARGET FLOW SOURCE CONTROL CONTROL Echo Packet FLAG DATA DATA CRC IDLE error check Request or Response Packet IDLE ADDR CRC error check IDLE Vorlesung Rechnerarchitektur 2 Seite 121 SCI (Scalable Coherent Interface) SCI physical level Header Format 0 15 Target Id Source Id Busy Flow Control Sequence Number Priority Command Header Format The control word of the header controls packet flow and network access. Priority arbitration is supported with round robin arbitration on each level. The command word of the header contains the transaction command and a sequence number. The sequence number is a tag to identify a packet. A node may send many requests (up to 256; 64 ?) before a response is received. This transaction pipeline can cause responses to returned out-of-order, and therefore a sequence number is needed to identify a response with the corresponding request. The command field contains the command a receiver must execute. Vorlesung Rechnerarchitektur 2 Seite 122 SCI (Scalable Coherent Interface) SCI Networks The ring IN is the simplest structure. There, nodes pass packets to their neighbour. In such a structure are no active components except the nodes. The nodes have to control the arbitration, priority and forward progress schemes. Processor SCI high-speed serial fiber 1Gbit/s Node SCI high-speed parallel copper: 1GByte/s Switch Interconnect Node Ring Interconnect Node SCI Switch Node Node Node Switch Interface Queue Memory Memory Bus Adapter Node Standard Bus Modular Switch for System Area Networks from Dolphin - Scalable switch (standard = 4 nodes) supports clusters with up to 16 nodes 6.4 Gigabit/sec links (bidirectional) provide high data throughput Ultra-low port-to-port packet routing latencies High availability clusters supported by hot-pluggable ports, port fencing, and redundant links - ANSI/IEEE 1596-1992 Scalable Coherent Interface (SCI) compliant - Non-blocking, Cut-through routing Vorlesung Rechnerarchitektur 2 Seite 123 SCI (Scalable Coherent Interface) SCI Node Interface CPU/Cache SCI-Registers Rety Screen PACKET MANAGER request response response Input Queues: In Fifo Data In request Output Queues: Out Fifo Bypass Fifo Out Mux Data Out 16bits, Flag, Clk An SCI node receives a steady stream of data and transmit another stream of data. These streams consists of SCI packets and IDLE symbols. A node that is granted interconnect access and that has an empty bypass fifo is allowed to transmit a packet. Contention is solved either by buffering in the IN or by filling the bypass fifo of the next node. SCI uses idles, packet headers, and echoes to selectively grant interconnect access under heavy system loading. Vorlesung Rechnerarchitektur 2 Seite 124 SCI (Scalable Coherent Interface) SCI Address Map The PCI-SCI card translates a a 32-bit PCI address into a 64-bit SCI address and vice versa. The outgoing translation is based on address translation tables residing in PCI memory. Address translation table entries are cached in the PSB address translation cache. For incoming SCI requests, address protection can be used to disable access to the node or certain PCI memory regions. In order for a processor to directly access far memory through load/store instructions, the far memory must be addressed through an SCI address. A 64-bit SCI address is used to select nodes and address data within a node. The 64-bit SCI address is split into a 16-bit node id that is used to select the target node. The remaining 48 bits are used within a node to address data and CSR registers. The address translation is implemented using an address translation page table. The page table consists of 8K entries of 32-bits each. The page size is 512 KBytes. The primary information contained in a page table entry is the node id and the node offset address but also transfer attributes are included: - Valid: Shows if the current entry is valid - Atomic (Lock bit): An access will generate an atomic operation (FETCH_ADD+1) - Ordering: Enforces write before read ordering. physical address space SCI address space 64bit virtual address space physical address space virtual address space Adapter Address Range I/O Address Space ATC ADDR Protection During system configuration, driver software on each of the nodes will agree upon (using messages) the desired mappings and set up the contents of the page tables. Each node has a page table that allows that nodes map memory from one or more other nodes. Once the page tables have been configured, the processor can access far memory through load/store instructions. Vorlesung Rechnerarchitektur 2 Seite 125 SCI (Scalable Coherent Interface) 17 SRP SCI Root Pointer SPT Add r= {SRP, 15’0} 32 bit Lookup Address: {SRP, PPA, 00} SCI Page Table, SPT 8 K entries in PCI memory space SPD PPA TAM 31 SBA SCI Page Descriptor 19 PCI Address SBB ADDRESS MAPPER GIU_CONF UPPER_TARGET_ID 64 bit SCI address 16 bit Node ID 48 bit address offset 0 Vorlesung Rechnerarchitektur 2 Seite 126 Network Interfaces Myrinet Overview Übertragungsrate: 160 MB/s (80 MB/s) (15 m) Netzwerktopologie: beliebig, Kombination aus Interfacekarten und Switches! Switches mit 4 x 4 XBAR Transport: beliebig lange Pakete, Flusskontrolle auf Link-Ebene Wegwahl: Wormhole-Routing, Source-Routing Latenzzeit: ca. 100 ns pro Switch Bitfehlerrate: << 1 pro Tag Einsatzgebiet: SAN (System Area Network): Im Rack LAN (Local Area Network <25m): Inhouse Interfacekarten und Kabel Netztyp: SAN- und LAN-Boards (unterschiedliche Kabel) basierend auf dem LanAI 4.1 Prozessor Bustyp: PCI (PC, DEC, SUN, ...): 66/33 MHz, 64/32 bit 512 KByte 1, 2 oder 4MByte SAN-Kabel: 1.28 GBit/s bis 3 m LAN-Kabel: 1.28 GBit/s bis 10 m, 640 MBit/s bis 25 m LWL-Kabel: in Vorbereitung (bis 500 m) SANPort NetzwerkInterface PaketDMA 512KB1 MB SRAM 32-Bit RISC HostDMA E/A-Bus (PCI) Speicher: PCI-Interface PCI-mezzanine: 33 MHz, 32 bit, 66 64 SRAM LanAI 4.1 RISC Prozessor PCI-Bus Interface SAN-Port more information at: www.myri.com Vorlesung Rechnerarchitektur 2 Seite 127 Network Interfaces Myrinet NIC (Network Interface Card) LANai communication processor: LANai 7 RISC operating at up to 66MHz (1x or 2x the PCI clock, depending on the PCI-bus frequency) 3 (receive,send,host) DMA engines PCI DMA chip (bridge+DMA cntrl.) 2-4 MB SRAM 2x1.28 Gb/s 160 MHz 9bit par. link Vorlesung Rechnerarchitektur 2 Seite 128 Network Interfaces Myrinet-Switches • Je nach Kabeltyp LAN-, SAN- oder LAN/SAN-Kombi-Switches • Realisierung als Kreuzschienenverteiler (CROSSBAR) • Switch-Varianten: 4 x 4: 5.12 GBit/s Durchsatz, bis zu 4 Knoten anschließbar 8 x 8: 10.24 GBit/s Durchsatz, bis zu 8 Knoten anschließbar 16 x 16: 20.48 GBit/s Durchsatz, bis zu 16 Knoten anschließbar Dual 8 x 8: bis zu 14 Knoten anschließbar Oktal 8 x 8: bis zu 32 Knoten anschließbar Myrinet Pakettransport Paketformat: Gap Route Header Data (beliebige Länge) CRC & Tail Source-Route wird von den Switches byteweise „verbraucht“ Headerkennung ermöglicht Multiprotokollumgebung Es können (fast) beliebig große Pakete verarbeitet werden Paket wird durch Prüfsumme und Endekennung abgeschlossen Vorlesung Rechnerarchitektur 2 Seite 129 Network Interfaces Myrinet Software Applikation Betriebssystem TCP UDP Myrinet-API IP Ethernet mmap Myrinet Ethernet Eigenentwicklungen Myrinet System-Software (Treiber und TCP/IP) erhältlich für: Intel PC’s: Linux, Solaris, BSDI, NetBSD, FreeBSD DEC-Alpa: Digtal Unix, Linux SUN-Sparc: Solaris, Sun-OS, Linux HP: HPUX PowerPC: VxWorks SGI: Irix (UNI-Bonn, PARNASS-Projekt) Was macht Myrinet interessant? Technik: Leistung, beliebige Topologie Schnittstellen: sowohl TCP/IP (standardisiert, direkt einsetzbar) als auch eigenes API (hohe Leistung) vorhanden. EIGENENTWICKLUNGEN sind möglich!!! Offene Software: alle Komponenten im Source-Code erhältlich Offene Hardware: Entwicklungsumgebung für LanAI erhältlich Genau hier setzen die meisten Anwender an! Slide infos taken from: T. Warschko, SC99 Mannheim Vorlesung Rechnerarchitektur 2 Seite 130 Shared Memory with Caching Bus-based Cache Protocols • Write-invalidate policy Using the write-invalidate protocol, the processor P1 modifying a shared cache entry sends an invalidation to all other processors in order to invalidate all other copies of this cache line. By snooping this bus transactions, all copies are invalidated and only P1 can modify this cache line (single writer). This modified cache line is marked as modified and has to be written back to main memory before other processors can access the data for reading or writing (copy back cache). The implementation is simple and therefore commonly used. • Write-update policy The write-update protocol demands a new cache line content be broadcasted to all other caches containing a copy of this line. The update of the memory can be performed at the same time or later. The write-update policy keeps the cache copies in the actual state while the write-invalidate policy destroys the cache copies. A write-invalidate protocol may lead to heavy bus traffic caused by read-misses, resulting from the processor updating a variable and other processors trying to read the same variable. On the other hand, the write-update protocol may update data items in remote caches which will never be used by other processors. These problems pose additional limitations in using busses to build large multiprocessors [Hwang 93]. These cache protocols are bus based and cannot be scaled to larger configurations. The broadcast of consistency transactions is very expensive for other interconnection networks than a bus. The introduction of directory-based protocols solve the broadcast problem because the directory contains the pointers to processors holding copies of a cache block. Now, for an invalidation (| update) it is sufficent to inform only these caches which contains copies of the referenced data object. Every memory access to shared objects must be checked in the directory locating the actual data object. Vorlesung Rechnerarchitektur 2 Seite 131 Directory Based Cache Coherence Basics Systems for Directory Based Cache Coherence (DBCC) combine distributed-memory architectures with scalable cache coherence mechanisms. Problem with scalable cache coherence: • bus based protocols (MESI) does not scale! full hardware support for cache coherence -> DBCC shared address space model + coherent replication There are trade-offs between HW and SW implementation of the coherent replication: - storing replications in main memory storing replications in caches provide coherence under software control using alternative cache consistency models Processor Cache Directory Memory State Memory Block ... ... Communication Assist Scalable Interconnection Network Directory: Explicit place to store the state of a memory block The size of a memory block is implementation dependent (result of design trade-offs). It may be a cache line or larger blocks. Vorlesung Rechnerarchitektur 2 Seite 132 Directories Directory Stuctures • central (cache) directory • distributed (cache) directories In a distributed-directory scheme, each memory module maintains a separate directory which records the state and presence information for each memory block. The state information is local, but the presence information indicates which caches have a copy of the block. Memory 1 Memory 2 Memory 3 Directory 1 Directory 2 Directory 3 1. read miss 4. supply of data Interconnection Network 2. req to copy 3. copy back Cache 1 Cache 2 Cache 3 Processor 1 Processor 2 Processor 3 • types of distributed directories - full-map directories - limited directories - chained directories Vorlesung Rechnerarchitektur 2 Seite 133 Directories Full-map Directory bit position 0 X: E . 1 . Shared Memory . Cache X: . n . Data Cache X: . Cache X: . . Processor 0 Processor 1 Processor n Read X Read X Read X 0 X: 1 Shared Memory C . Cache X: n . Data Cache X: Data Processor 0 Data Processor 1 X: Data Processor n Shared Memory D . . . Cache X: inv Processor 0 . Cache X: inv Processor 1 The read operations of three processors lead to three copies of the data item in the processor caches and a "pointer bit" entry in the corresponding directory place. The entry is tagged with C (copied). Multiple readers are allowed. Cache Write X X: Every bit position of the entry refers to a copy in the corresponding processor cache. In the beginning, no data item is copied into caches. The directory entries are empty and the tag shows E (empty). Data Cache X: newData The write request of one processor leads to the invalidation of all copies in the processor caches and the corresponding pointers in the directory except the data item in the write requesting node. There is only one writer allowed. The new data value is stored in the cache of the ’owning’ processor and the directory entry is marked as D (dirty) Processor n Using a bit vector to keep track of all clusters caching a memory block does not scale well. Adding processors to the system requires longer bit vectors. Optimizations led to two possible solutions: - Limited Directory - Chained Directory Vorlesung Rechnerarchitektur 2 Seite 134 Directories Limited Directory A memory block is typically cached only by a small number of nodes. Consequently, it is possible to replace the bit-vector by a small number of pointers which restricts the number of simultaneously cached copies. The pointer overflow is handled by software and the invalidations use a limited broadcast. The following example shows the effect of a limited number of pointers (here 2) Shared Memory X: C P0 P1 Cache X: Data Cache X: Data Processor 0 Cache X: Data Processor 1 . Processor n Read X Shared Memory X: C P0 Pn Cache X: Data Processor 0 Data Cache X: inv Processor 1 Cache X: Data Processor n some more explanations ... ? [s.a. Hwang] The directory entry contains two pointers to the processors holding copies in their caches (assuming previous reads by P0 and P1). If Pn wants another copy of this data value, one of the two pointers must be changed and the cached data value of the corresponding processor must be invalidated. Vorlesung Rechnerarchitektur 2 Seite 135 Directories Chained Directory Chained directories realize the scalability of limited directories without restricting the number of shared copies. If there is only one data block pointer in a directory entry, further data copies can be provided by chaining directory entries by pointers. The scheme can use singly or doubly linked lists. Shared Memory X: C P0 Data Cache X: Data Cache X: CT Processor 0 Cache X: . Processor 1 Read X . Processor n CT chain termination pointer Shared Memory X: C P1 Data Cache X: Data Processor 0 Cache CT X: Data Cache CN Processor 1 X: . Processor n CN chain next pointer Another possibility for reduction of directory size: Most memory blocks will not be present in a node cache, and thus there is no need to provide a dedicated directory for every memory block. This leads to a directory cache where entries must be searched assoziatively. Vorlesung Rechnerarchitektur 2 Seite 136 Example for a DBCC-System DASH Directory Architecture for Shared Memory The DASH-architecture is a cache coherent, NUMA multiprocessor system. Developed at CSL-Stanford -- John Hennessy, Daniel Lenoski, Monica Lam, Anoop Gupta ... - scalable high-performance MIMD System - single address space - coherent caches • caching of shared data - distributed shared memory Prototyp with 64 processors (MIPS R3000) Methodes for achieving scalability: distributed directories hierachical cluster configuration cache coherence protocol efficient synchronization Processor 4x Cache Processor Cluster Cache Directory Memory MESI Remote Access Cache 16x Processor 4x Cache Processor Cache Cluster Directory Memory MESI Remote Access Cache General Architecture of DASH Interconnection Network • • • • Vorlesung Rechnerarchitektur 2 Seite 137 Example for a DBCC-System DASH Block diagram of 2 x 2 DASH system Request VN Reply VN L1 Cache Processor L1 Cache L1 Cache L2 Cache L2 Cache L2 Cache L2 Cache VME Interface L1 Cache Processor L1 Cache L1 Cache L2 Cache L2 Cache L2 Cache L2 Cache VME Interface • • • • • Directory Directory Controller Controller Main Memory Directory Directory Controller Controller Main Memory L1 Cache Processor L1 Cache L1 Cache L2 Cache L2 Cache L2 Cache L2 Cache VME Interface L1 Cache Processor L1 Cache L1 Cache L2 Cache L2 Cache L2 Cache L2 Cache VME Interface Directory Directory Controller Controller Main Memory Directory Directory Controller Controller Main Memory based on Silicon Graphics Power Station 4D/240 (R3000) 4 processor per node, shared bus with MESI synchronous pipelined memory bus, no split transactions long latency transactions are retried and arbitrated only on a completed transfer addition of a directory controller board Vorlesung Rechnerarchitektur 2 Seite 138 Example for a DBCC-System DASH Reply Network Directory board block diagram Request Network Mesh Routing Chip Mesh Routing Chip Directory Controller (DC) Reply Controller (RC) Pseudo CPU (PCPU) Remote Access Cache (RAC) stores state of pending memory requests Forward remote CPU request to local MPBUS RAC snoops on bus Issue cache line invalidations and lock grants Arbitration Masks MPBUS request Directory DRAM Forward local requests to remotes Reply to remote requests Respond to MPBUS with directory information Storage of locks and lock queues Remote Cache Status Bus Retry MPBUS Address/Control MPBUS Data There is one directory entry for each memory block. Each directory entry contains a bit vector, each bit representing the state (cache copy) of the corresponding processor cache. Another bit declares the memory block as dirty. Every of the N nodes of the system keeps a list with N enties in its directory. A major scalability concern unique to Dash-like machines is the amount of directory memory required. If the physical memory of the machine grows proportional with the number of nodes, then using a bit vector to keep track of all clusters caching a memory block does not scale well [Dash 92]. The total amount of directory memory is N2 * M/L where M is the megabits of node memory and L is the cache line size in bits. Vorlesung Rechnerarchitektur 2 Seite 139 VSM Virtual Shared Memory Basic Concepts Virtual shared memory (VSM) was first developed in a Ph.D. thesis ky Kai Li (1986). The idea is to implement a coherent shared memory on a network of processors without physically shared memory. The system uses virtual addresses for memory references. The VSM address space is organized in pages which can be accessed by any node in the system. A memory-mapping manager on each node views its local memory as a large cache of pages for its associated processor. Pages that are marked read-only can have copies in the physical memory of other nodes. A page currently written may reside in only one local memory. The page fault mechanism of the MMU is used to handle the access and an VSM manager called by the MMU trap can perform the consistency protocal and the copy of pages. • page based access control • page fault handler Read access in a MIMD-Architecture with distributed memory Node # i Translation Cache 1. read Paged Memory 4. enter new address vaddr. fault copy 3. store copy Page Table Node # j vaddr. addr Translation Cache 2. read request vaddr. Paged Memory primary page Page Table 1. access to variable by a read => page fault 2. find the appropriate primary page (Node #j) and send a read request to this node vaddr. 3. copy the page to the requester 4. enter new address into page table and restart page access Functions of the page fault handler: - finding the source of state information by using a directory; a page has a "home" determined by (a part of) the virtual address - finding the appropriate copies - communicating with the copies and copy the page to the requester; setting page access rights Vorlesung Rechnerarchitektur 2 Seite 140 VSM Virtual Shared Memory Basic Concepts The write access in a virtual shared memory (VSM) is much more complicated than a read. The single writer coherency scheme requires the invalidation of all copies handed out for read only and the move of the page to the write requester. 4. store primary page Write access in a MIMD-Architecture with distributed memory Node # j Translation Cache vaddr.n Paged Memory object access Page Table primary page 1. write Paged Memory vaddr.m fault addr object 3. new owner 6. enter new address Translation Cache 5. invalidate Node # i addr.n access Page Table 2. find the appropriate primary page (Node #j) and send a write request to this node 3. messages to all nodes with read copies to enter new single write owner 4. store primary page to write requester 5. invalidate all copies 6. enter new address into page table and restart page access Node # k Translation Cache 3. new owner 1. access to variable by a write => page fault 5. invalidate vaddr.m 2. request page vaddr.o Paged Memory object copy of page Page Table vaddr.o Vorlesung Rechnerarchitektur 2 Seite 141 VSM Virtual Shared Memory Example of a Coherency Protocol for VSM INVALID remote write request read miss remote write request write miss define local write hit SHARED OWNED remote read request define global define local LOCAL Methode for unification of partly changed copies sequential consitency original replicate replicate copy copy difference set difference set update update define local Vorlesung Rechnerarchitektur 2 Seite 142 Interconnection Networks Examples of Systems Intel Scientific: Paragon XP/S MIMD-System ● scalable up to 1000 processors (256 nodes) ● 2D mesh interconnect ● one node: 2 (3)(4) x i860XP, 100 MFLOPS ● 16 (64) MBytes memory per node ● distributed memory + communication processor ● 2 x 200 MBytes/s interconnect transfer rate per node ● 16 bit wide data pathes, hardware latency of 25µs ● computing nodes, I/O-nodes, service nodes I/O Partition SCSI Node Compute Partition Compute Node Compute Node Compute Node Compute Node Service Partition I/O Partition Service Node SCSI Node VME Subsystem HIPPI Node Compute Node Compute Node Compute Node Compute Node Service Node VME Node Custom I/O FDDI Ethernet 16 x SCSI Node Compute Node Compute Node Compute Node Compute Node Paragon System Architecture Service Node SCSI Node Vorlesung Rechnerarchitektur 2 Seite 143 Interconnection Networks Examples of Systems Intel Scientific: Paragon XP/S i860XP i860XP i860XP Local Bus North Message I/O External I/O East Communication Channels Structure of the node South North to or from local node IC FB FB Flit Buffer IC Input Controller IC FB West Mesh Router on backplane Local Memory Crossbar Switch (5 x 5) IC West FB East IC FB FB IC South Structure of the mesh-connected router Vorlesung Rechnerarchitektur 2 Seite 144 Interconnection Networks Examples of Systems Meiko: CS-2 (Computing Surface-2) ● from 8 to 256 nodes ● multi stage switch interconnect with crossbars ● paket switched, two links per node ● SPARC + 2 x VP (40MHz) vector node, 200 MFLOPS ● only SPARC as scalar node, 40 MFLOPS ● distributed memory + communication processor ● remote memory access using virtual address ●hardware supported broadcast Processoing Node 4 x 4 Crossbar, bidirectional 4x4x4 = 64 Structure of the multi-stage interconnection network Vorlesung Rechnerarchitektur 2 Seite 145 Interconnection Networks Examples of Systems Meiko: CS-2 (Computing Surface-2) ● Custom RISC processor as communication P. ● 32-512 MByte, 3 ports, 16 banks of memory ● two links per node, bytewide, (2) x 2 x 50MBytes/s ● SBus Interface for local I/O SPARC Module Communication Module 2x Link Channels S Bus M Bus S Bus S Bus 2x8 VP 1 Module VP 2 Module 32-512 MByte, 3 ports, 16 banks Control Memory Structure of the Node with two Vector Processing Elements Vorlesung Rechnerarchitektur 2 Seite 146 Interconnection Networks Examples of Systems Meiko: CS-2 (Computing Surface-2) DIV ADD MUL 64 64/32 64/32 Mask Scalar Register Vector Register Load/ Store Instruction Buffer Instruction Decoder Fujitsu Vector Processor 64 32 Address ECC Unit ECC Unit 40 40 Data Data Structure of the Vector Processor VP Module Vorlesung Rechnerarchitektur 2 Seite 147 Interconnection Networks Examples of Systems IBM: SP2 MIMD-System ● scalable from 16 up to n x 16 nodes ● 8 x 8 Crossbar interconnect Vulcan Switch ● one node: RS/6000, workstation board, 125 MFLOPS ● 16 (64) MBytes memory per node ● distributed memory + message passing comm. ● 2 x 40 MBytes/s interconnect transfer rate per node ● 8 bit wide data pathes, hardware latency of 25µs ● DMA support for messages 2x8 Link Channels Processor Switch 16 x Switch Chip Chip Switch Switch Chip Chip Switch Switch Chip Chip Switch Switch Chip Chip Processor HPS-Board Switch Board of High Performance Switch (HPS) with 16 Processors Vorlesung Rechnerarchitektur 2 Seite 148 Interconnection Networks Examples of Systems IBM: SP2 ● HPS board, 2 x 16 bidirectional channels ● basic building block is 8 x 8 Crossbar ● 8 crossbars used per HPS Switch ● 40 MBytes/s per channel, 125 ns latency 31 bytes Serializer Flow Control 8 Transmitter Deserializer Receiver 64 Flow Control Fifo 8 Central Queue Fifo CRC Check 7 bytes Route Control Receiver Arbiter Bypass Arbiter Transmitter Arbiter CRC Gen RAM 128 x 64 8x 8x 8 8x8 8 8x Transmitter 8x Crossbar Serializer Flow Control Deserializer Receiver Flow Control Fifo 8 Fifo CRC Check Route Control Bypass Arbiter CRC Gen Switch Chip for High Performance Switch (HPS) • head of queue blocking • variable packet size <= 255 bytes, 31 byte FIFO per input, 7 bytes per output • packet switched, cut-through routing, no virtual channel, source path routing Vorlesung Rechnerarchitektur 2 Seite 149 Interconnection Networks Examples of Systems IBM: SP2 ● Multi-rack Configurations ● Larger Configurations with HPS board ● 8 crossbars (8 x 8 Crossbar) per board ● 16 x 16 bidirectional Crossbar 16 16 8 Processors Processors 8 8 48 Processor System 16 Processors 16 Processors 64 Processor System 4 4 6 16 16 6 Processors Processors 4 16 Processors 4 Vorlesung Rechnerarchitektur 2 Seite 150 Interconnection Networks IBM: Switch3 Description to be added Vorlesung Rechnerarchitektur 2 Seite 151 Interconnection Networks Cray: CRAY T3D MIMD-System ● from 16 to 2048 processors in the T3D ● 3-D torus interconnect ● DEC Alpha superscalar processor (150MHz) ● 2048 processors 300 GFLOPS (dp) ● globally addressable, physically distributed ● high speed switches ( ECL) for remote memory access ● Cray Y/MP fontend processor Processor Element 0 Processor Element 1 Block Transfer Engine Network Interface -Z +Y Network Router -X -Y +X +Z Node with Interconnection Network Interface