Rechnerarchitektur 2 (Computer Architecture 2)

Werbung
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
Herunterladen