Oswald Haan ohaan@gwdg.de GWDG – Kurs Parallelrechner-Programmierung mit MPI Grundlagen der Parallelverarbeitung Oswald Haan ohaan@gwdg.de
Parallelrechner-Programmierung mit MPI Übersicht Rechenleistung Parallelität Programmiermodelle Parallelrechner Parallelisierungseffizienz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Rechenleistung Leistung = Arbeitsmenge pro Zeiteinheit Leistung r eines Rechners: Anzahl von Fließkommaoperationen pro Sekunde Einheit : [flop/s, Kilo-, Mega-, Giga-, Tera-, Peta-flop/s] r ~ τ -1 (τ : Taktzeit der Schaltkreise) 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI (Not-)Moore’s Law Moore’s Law (Intel co-founder Gordon E. Moore, 1965) : The number of transistors on integrated circuits doubles approximately every two years (or every 18 months). Not--Moore’s Law is that clock rates do, too Moore’s Law holds (and will for a decade or so) Not--Moore’s Law held until ≈ 2003, then broke down 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Entwicklung der Schaltkreisgeschwindigkeit Hennessy/Patterson: Computer Architecture, 5. Auflage; © Elsevier Inc., 2011. All rights reserved 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Entwicklung der Rechenleistung Exaflop/s PetaFlop/s Teraflop/s Gigaflop/s Top500 Liste 6/2013 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Rechenleistung (2) r ~ τ -1 (τ : Taktzeit der Schaltkreise) r ~ n (n : Anzahl der Schaltkreise), wenn n Schaltkreise gleichzeitig an der Rechnung arbeiten können: Parallelverarbeitung 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Übersicht Rechenleistung Parallelität Programmiermodelle Parallelrechner Parallelisierungseffizienz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelität der Hardware Netzwerk Parallele Rechner (Rechencluster) R1 R2 R3 R4 Parallele Prozessoren (Multiprozessorsysteme) Speicher P1 P2 P3 P4 Parallele funktionale Einheiten (Superskalare Architektur) add 1 2 mult Parallele Segmente in Pipelines (Fließbandverarbeitung) Parallele Bitverarbeitung (64bit-Architektur) … … 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Nutzung von Parallelität Identifizierung von unabhängigen Arbeitsschritten Vektoraddition: c(i) = a(i) + b(i), i = 1 ,4 c(1) = a(1) + b(1) c(2) = a(2) + b(2) c(3) = a(3) + b(3) c(4) = a(4) + b(4) Summe der Vektorelemente s = a(1) + a(2) + a(3) + a(4) s1 = a(1)+a(2) s2 = a(3)+a(4) s = s1 + s2 Zufallszahlen z(i) = a*z(i-1) mod m, i = 1 , 4 z(1) = a*z(0) mod m z(2) = a*z(1) mod m z(3) = a*z(2) mod m z(4) = a*z(3) mod m 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Übersicht Rechenleistung Parallelität Programmiermodelle Parallelrechner Parallelisierungseffizienz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Nutzung von Parallelität Die parallele Hardware muss durch ein Programm gesteuert werden Programmiermodelle basieren auf einem funktionalen Modell der Hardware zwei unterschiedliche Programmiermodelle für Parallelrechner: Shared memory Message passing Als Vergleich das klassische Programmiermodell für sequentielle Rechner Von Neumann 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Programmiermodell: Sequentiell (von Neumann) Speicher Instruktionen Daten Objekte: Daten, Instruktionen, PZ Operationen: opcode op1, op2,...,re1,re2 Reihenfolge: sequentiell Programmzähler Verarbeitungseinheit (CPU) Instruktionseinheit Recheneinheit 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Programmiermodell: shared memory Mehrere Kontrollflüsse (threads) Objekte: Globale Daten, Instruktionen, Lokale PZs, thread-ID Operationen: opcode op1, op2,...,re1,re2 ununterbrechbare Ops. Reihenfolge: Sequentiell im einzelnen thread, CREW (concurrent read, exclusive write) Speicher Instruktionen Daten PZ0 PZ1 PZ3 VE0 VE1 VE2 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Programmiermodell: message passing Verbindungsnetz Verteilung von Daten und Instruktionen auf mehrere Prozessoren Objekte: Lokale Daten, Instruktionen, Lokale PZs, task-id Operationen: opcode op1, op2,...,re1,re2 send(ad,n,tid), recv(ad,n,tid) Reihenfolge: Synchronisation durch blockierendes recv Puffer Puffer Puffer Speicher Speicher Speicher I D I D I D PZ PZ PZ VE VE VE 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Übersicht Rechenleistung Parallelität Programmiermodelle Parallelrechner Parallelisierungseffizienz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI MIMD Parallelität MIMD = Multiple Instruction Stream -Multiple Data Stream Rechner mit gemeinsamem Speicher Rechner mit verteiltem Speicher Multi-Core CPUs Cluster mit Single-Core CPUs 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Hybrid-Systeme:Cluster von SMP-Knoten Cluster mit Multi-Core CPUs 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Kopplung in Systemen mit gemeinsamem Speicher Bus serialisierter Speicherzugriff nicht skalierbar geringe Latenz Schalter (Hypertransport, Quick Path) simultaner Speicherzugriff (bei günstiger Datenverteilung) skalierbar höhere Latenz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Kopplung in Systemen mit verteiltem Speicher Schalter Baum 2d Gitter 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Netzparameter Latenz Zeit bis zur Ankunft des ersten bits Bandbreite Datendurchsatz einer Verbindung effektive Bandbreite Bisektionsbreite Minimale Zahl von Verbindungen bei Schnitt durch das Netz - wichtig für Gesamtdurchsatz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parameter der Kommunikationsleistung Kommunikatiosnetz-Netz R1 R2 Rn Rechner R hat Rechenleistung Netz hat Latenz und Bandbreite Anzahl von Flops, die in der Latenzzeit ausgeführt werden könnten Anzahl von Flops, die in der Zeit ausgeführt werden könnten, die das Senden von 8 Bytes dauert 𝑟 𝑡𝑙𝑎𝑡 𝑐 𝑡𝑙𝑎𝑡∙𝑟 64∙𝑟/𝑐 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Kommunikationsleistung Latenzzeit Bandbreite Rechen-leistung SGI Altix Numa-Link 1,5 25,60 12,8 19 200 32 NEC Nehalem Infiniband QDR 2,5 40 81 202 500 130 Magny-Cours 48 cores: 422 1 002 000 675 Hypertransport 0,1 200 1 core: 8,8 880 2,8 CV-Cluster 1 16 cores: 166 166 000 265 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Übersicht Rechenleistung Parallelität Programmiermodelle Parallelrechner Parallelisierungseffizienz 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Leistungsfähigkeit von Parallelrechnern Maßeinheit [flop/s] floating point operations per second Maximal-Leistung 𝑟𝑚𝑎𝑥=𝑝∙𝑛𝑓𝑙∙𝜏-1 𝑝 Anzahl Prozessoren (=Cores) 𝑛𝑓𝑙 Anzahl paralleler Operationen pro Prozessor 𝜏 Zykluszeit für ein Segment der Pipelines 𝑠=𝜏−1 Taktrate des Prozessors ClusterVision MPI-Cluster der GWDG 𝑝=160∗16= 2560, 𝑛𝑓𝑙= 4, 𝑠= 2,4 GHz 𝑟𝑚𝑎𝑥= 24,5 Teraflop/s 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Leistungsfähigkeit bei realen Anwendungen Reduktion der parallelen Effizienz durch Sequentielle Anteile des Programms Ungleiche Lastverteilung Kommunikation von Daten Synchronisation Reduktion der Einzelprozessor-Effizienz durch Hauptspeicherzugriffe Pipeline-Unterbrechungen Nicht-Nutzung paralleler Pipelines 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Sequentielle Anteile - Amdahls Gesetz Jedes Programm hat sequentielle und parallelisierbare Operationen: 𝑁=𝑁𝑠+𝑁𝑝=𝑁∙ 𝜎+𝜋 Ausführungszeit auf p Prozessoren: 𝑇𝑝=𝜏∙ 𝑁𝑠+ 𝑁𝑝 𝑝 = 𝜏∙𝑁 𝜎+ 𝜋 𝑝 Speed Up: 𝑠= 𝑇1 𝑇𝑝 =𝑝∙ 1 1+(𝑝−1)∙𝜎 Effzienz : 𝑒= 𝑠 𝑝 = 1 1+(𝑝−1)∙𝜎 𝜎½: Sequentieller Anteil, der zu 50% Effizienz (e=0.5) führt 𝜎½= 1 𝑝−1 für 𝑝=2560 𝜎½≈0,0004 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Verallgemeinerung: Ungleiche Lastverteilung Prozessor 𝑖,𝑖=1,⋯,𝑝 hat die Last von 𝑁𝑖 Operationen, 𝑁= 𝑖=1 𝑝 𝑁𝑖 Mittlere Last pro Prozessor 𝑛𝑎𝑣= 𝑁 𝑝 Maximale Abweichung Δ= max 𝑖 𝑁𝑖−𝑛𝑎𝑣= 𝜗∙𝑁 Laufzeit 𝑇𝑝= 𝜏∙ max 𝑖 𝑁𝑖=𝜏∙ Δ+𝑛𝑎𝑣 =𝜏∙𝑁 1 𝑝 +𝛿 Effizienz 𝑒= 𝑇1 𝑝𝑇𝑝 = 1 1+𝑝∙𝛿 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Datenkommunikation Interprozessor-Kommunikation erzeugt Blindleistung 𝑁𝑘=𝜅∙𝑁 Anzahl zu kommunizierender bits Ausführungszeiten: 𝑇1= 𝑟 −1 ∙𝑁 𝑇𝑝=𝑁∙ 𝑟 −1 ∙ 𝜎+ 𝜋 𝑝 + 𝑐 −1 ∙𝜅 Effizienz: 𝑒= 𝑇1 𝑝𝑇𝑝 = 1 1+ 𝑝−1 ∙𝜎+𝑟/𝑐∙𝜅 𝑟 in [Gflop/s], 𝑐 in [Gbit/s] 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Parallelrechner-Programmierung mit MPI Synchronisation Abstimmung der Arbeit der Prozessoren: z. B. Warten auf die Beendigung von parallel ausgeführten Teilaufgaben Sequentielle Abstimmung 𝑡𝑠𝑦𝑛𝑐=𝑝∙𝑡𝑙𝑎𝑡 Kaskaden - Abstimmung 𝑡𝑠𝑦𝑛𝑐=ln(𝑝)∙𝑡𝑙𝑎𝑡 Parallelisierungs-Granularität ng : Anzahl parallelisierbarer Operationen zwischen zwei Synchronisationspunkten Voraussetzung für hohe Effizienz: 𝑟 −1 ∙ng/p ≫ 𝑡𝑠𝑦𝑛𝑐 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Matrix-Vektor-Multiplikation 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Matrix-Vektor-Multiplikation 𝑦=𝐴∙𝑥 𝑦 𝑖 = 𝑗 𝐴𝑖𝑗∙ 𝑥 𝑗 , 𝑖=1,⋯,𝑛 Daten- und Aufgabenverteilung: Jeder der p Prozessoren hat n/p Elemente von 𝑥 und n/p Zeilen von 𝐴, Jeder der p Prozessoren berechnet n/p Elemente von 𝑦 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Matrix-Vektor-Multiplikation Jeder Prozessor berechnet n/p Elemente von 𝑦, mit 2∙ 𝑛 2 /𝑝 Operationen Jeder Prozessor erhält von den 𝑝−1 anderen Prozessoren je 𝑛/𝑝 Elemente von 𝑥 𝑇𝑝= 𝑟 −1 ∙2∙ 𝑛 2 𝑝 + 𝑝−1 ∙ 𝑡𝑙𝑎𝑡+ 𝑐 −1 ∙𝑛/𝑝 𝑒= 𝑇1 𝑝∙𝑇𝑝 = 1 1+𝑝∙ 𝑝−1 2 𝑛 2 ∙𝑟∙𝑡𝑙𝑎𝑡+ 𝑝−1 𝑛 ∙𝑟/𝑐 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI
Matrix-Vektor-Multiplikation Bedingung für gute Effizienz 𝑝∙ 𝑝−1 2 𝑛 2 ∙𝑟∙𝑡𝑙𝑎𝑡<1 𝑝−1 𝑛 ∙ 𝑟 𝑐 <1 GWDG-Cluster: 𝑟∙𝑡𝑙𝑎𝑡=166000 ⟹ 𝑛 𝑝 > 288 𝑟 𝑐 =256 ⟹ 𝑛 𝑝 > 256 07. – 09. 04. 2014 Parallelrechner-Programmierung mit MPI