Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen

Slides:



Advertisements
Ähnliche Präsentationen
Matrixmultiplikation
Advertisements

CPI Der einzelne Befehl braucht immer noch 5 Zyklen (stimmt nicht ganz, einige brauchen weniger!) Was verbessert wird, ist der Durchsatz = #Befehle /
Leistung.
KA – Rechnerarchitektur I ____________________________________________________________________________________________ ____________________________________________________________________________________________.
Constantin Timm Informatik 12 TU Dortmund
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
Software-Engineering II Eingebettete Systeme, Softwarequalität, Projektmanagement Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt.
PC-Cluster.
Kapitel 7 Vektorrechner und Höchstleistungsrechner
2.5 Vektorrechner & Multimedia-Erweiterungen
Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2009/01/17 Graphics:
Fakultät für informatik informatik 12 technische universität dortmund Die Speicherhierarchie - Hauptspeicher - Peter Marwedel Informatik 12 TU Dortmund.
1 Energiebewusste Compilierung für digitale Signalprozessoren Markus Lorenz Peter Marwedel Universität Dortmund Lehrstuhl Informatik XII Projekt Prozessorarchitekturen.
0 Energieeffiziente Compilierung für Digitale Signalprozessoren Markus Lorenz Peter Marwedel Rainer Leupers Projekt Prozessorarchitekturen und Compilertechniken.
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Zentraleinheit CPU, Motherbord, RAM
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
WS 2009/10 1 Systeme 1 Kapitel 1 Aufbau von Rechnern.
W. Oberschelp G. Vossen Kapitel 7.
OpenMP Präsentation im Rahmen des Seminars
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 8.1.
Studiengang Informatik FHDW
2.5. Mikrocontroller-Komponenten
Vorlesung 2 Rechnerarchitektur Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 5: Interrupts Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin Wintersemester.
Vorlesung 2 Rechnerarchitektur Peter B. Ladkin Wintersemester 2001/2002 Universität Bielefeld Technische Fakultät.
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Einführung.
4. Mikrocontroller-Komponenten
HPC Architekturen und Anwendungen: Anforderungen und Notwendigkeiten
EPIC, IA-64 und Itanium Eine Kurzpräsentation von Jan Hübbers bei Prof. Dr.-Ing. Risse im Fach Labor Rechnerstrukturen an der Hochschule Bremen
Inhalt Der Cell Prozessor Aufbau des Cells Platine Block Diagramm
Random Heightmap on GPU
Matrix Multiplication on CUDA
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Beschleunigung Virtueller Privater Netze durch Netzwerkprozessoren
Rechneraufbau & Rechnerstrukturen, Folie 13.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 13.
So arbeitet ein PC.
Duo- und Quad Prozessor-Architektur
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
F.Ladstätter und R.Elsässer VP Wissenschaftliches Arbeiten und Präsentation 13. Dezember 2001.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Aufbau eines von-Neumann- Rechners Marcel Waldvogel.
INTEL Pentium 4 Prozessor
DW-Architektur: Row Store vs Column Store
Chair of Informatics III: Database Systems Multi-Core-Algorithmik für Datenbankanwendungen Alfons Kemper, Thomas Neumann, Florian Funke, Henrik Mühe,
Service Computing   Prof. Dr. Ramin Yahyapour IT & Medien Centrum 19. Januar 2010.
3.4 CPU-Chips und Busse CPU-Chips
Ein Vortrag von Simon Bayer
Vorlesung Datenbanksysteme vom Physische Datenorganisation
Multiprozessoren: Herausforderung für die Software
Rechnersysteme: Halbzeit Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2 Daten und Information.
Systemsoftware und Betriebssysteme
Rechnerarchitekturen
Verarbeitung und Computerinneres
JOMP
Parallelisierung für Multiprozessor-Maschinen
Arbeitsberatung der ITG Fachgruppe Matthias Fiedler, Gunter Scheller 13. Juni 2003 Fakultät für Elektrotechnik und Informationstechnik Fachbereich.
Gaming-Computer-Aufbau
Central Processing Unit (Zentraleinheit)
Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.
Der Prozessor Von Stephan Blum.
Prozessoren (CPU) Ahmet Aktas, HWI I.
Dr. Klaus Ruhlig Technology & Product Consulting Sun Microsystems, München Skalierbare Rechnerarchitekturen für ein DWH: Eine vergleichende Analyse.
Grundlagen der Rechnerarchitektur [CS ]
© 2009 Morgan Kaufmann.. © 2009 Morgan Kaufmann.
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen Anton Peißinger Fakultät für Informatik Technische Universität München

Überblick Warum Optimierung Überblick über verschiedene Architekturen Sequentielle Rechner RISC Vektorrechner Parallele Rechner Multiprozessor Multicomputer Sequentielle Programmoptimierung Superskalarität Effiziente Ausnutzung des Cache Optimierung paralleler Programme Zusammenfassung, Ausblick

Warum Optimierung Ein einführendes Beispiel: Matrixmultiplikation 2 Matrizen mit jeweils 1048576 Elementen Ohne Optimierung: Dauer 481,95 sec  8 min Mit Optimierung (Blocking und Loop unrolling) Dauer 326,94 sec  5,5 min  Durch Ausnutzung der architekturspezifischen Besonderheiten Beschleunigung der Software Warum Optimierung? Prozessoren werden immer schneller, warum soll dann optimiert werden? Verdeutlichung am Beispiel Matrixmultiplikation Rechner: 166MHz Pentium unter Linux 2 Matrizen mit jeweils 1048576 Elementen (1024x1024) ohne Optimierung Dauer 481,95 sec  8 min mit Optimierung (Blocking und Loop unrolling) Dauer 326,94 sec  5,5 min mit Optimierung wird die gleiche Aufgabe in 2/3 der Zeit erledigt Vertrautmachen mit den Besonderheiten der verwendeten Rechnerarchitektur Ausnutzung dieser Besonderheiten zur Beschleunigung von Software

RISC Architektur Cache Mehrere funktionale Einheiten Pipelining  Ausführen mehrerer Befehle in einem Zyklus Cache: kleiner, schneller Speicher, der aktuelle Daten und Befehle enthält. Findet CPU benötigte Daten nicht im Cache, wird Cache- Fehlzugriff (Cache-miss) signalisiert und Daten werden aus dem Hauptspeicher geholt. CPU muß warten, bis Daten verfügbar sind. Mehrere funktionale Einheiten: -Prozessor kann mehrere Operationen in einem Zyklus ausführen; Zwei Fälle: -Prozessor kann mehrere Fließkommaeinheiten besitzen -Zusammenfassung zweier Operationen in einem Assemblerbefehl Bsp.: IBM RS/6000 POWER2 2 Fließkommaeinheiten; Ausführung von 4 Fließkommaoperationen pro Zyklus Pipelining: entspricht einer Art Fließband Jeder Schritt in der Pipeline vollendet einen Teil des Befehls Befehle treten an einem Ende ein, werden verarbeitet und treten am anderen Ende wieder aus In jedem Zyklus kann eine neue Operation gestartet werden Mehrere Befehle können in einem Zyklus ausgeführt werden; wichtig für die Optimierung

Vektorarchitektur Besteht aus Pipeline-Skalareinheit ergänzt um Vektoreinheit Speicherung der Daten in Form von Vektoren Vektoroperationen zwischen den Vektorregistern durchgeführt Performancegewinn nur durch Vektoroperationen Zusätzlich zur Skalareinheit sind Vektorregister vorhanden Dort können Daten in Form von Vektoren abgelegt werden Vektorfunktionseinheiten sind Pipelines; starten in jedem Zyklus eine neue Operation Performancegewinn nur durch Vektoroperationen Bei Speicherung der Daten in Form von Skalaren ist Vektorrechner eher langsamer entscheidend für die Optimierung

Multiprozessortechnologie Geringe Anzahl von Prozessoren Jeder Prozessor besitzt eigenen Cache Prozessoren teilen sich einen Speicher (shared memory) Bei Bedarf Synchronisation Geringe Anzahl von Prozessoren; jeder verfügt über eigenen Cache Prozessoren teilen sich einen Hauptspeicher Engpässe können auf dem Bus oder im Hauptspeicher auftreten, da alle Prozessoren über den selben Bus auf einen Hauptspeicher zugreifen Einzelne Prozessoren müssen synchronisiert werden, d. h. Warten, bis Parallelcode ausgeführt ist, dann Ausführen des Skalarcodes bis zum nächsten Parallelcodeabschnitt usw.

Multicomputerarchitektur Mikroprozessoren sind über Netzwerk miteinander verbunden Prozessoren besitzen eigenen Hauptspeicher Prozessoren führen sequentiellen Code aus Falls alle Prozessoren gleiches Programm ausführen, spricht man von Single Programm/Multiple Data Prozessoren können Informationen von anderen Prozessoren nur über das vorhandene Netzwerk erhalten entscheidender Punkt bei der Optimierung Zusammenfassung der Merkmale der Architekturen PE´s sind gewöhnliche Mikroprozessoren Jeder Prozessor führt sequentiellen Code aus Austausch von Informationen durch Nachrichten über Netzwerk

Superskalarität Ausnutzung mehrerer Fließkommaeinheiten des Prozessors Transformation, Veränderung von Schleifen Nutzung der Pipeline (Softwarepipelining) Prozessor besitzt mehrere Fließkommaeinheiten Um Geschwindigkeit zu steigern, sollten möglichst alle vorhandenen Einheiten benutzt werden Geschieht zum Beispiel durch Transformation von Schleifen (loop unrolling) Nutzung der Pipeline (Softwarepipelining) Ähnlich Hardwarepipeline, die Operationen auf Prozessorebene beschleunigt. Aufspaltung eines einzelnen kompletten Schleifendurchlaufs in mehrere Instruktionen und zwar so, daß alle funktionalen Einheiten beschäftigt sind.

Beispiel zur Superskalarität Addition zweier Vektoren do i=1, n y(i)=y(i)+a*x(i) enddo  zwei Fließkommaoperationen in 7 Zyklen do i=1, n-1, 2 y(i+0)=y(i+0)+a*x(i+0) y(i+1)=y(i+1)+a*x(i+1) do i=i, n  vier Fließkommaoperationen in 8 Zyklen R10000 RISC bis zu 4 Instruktionen pro Zyklus 1 pipelined load/store unit 2 pipelined 64 Bit int ALU 1 pipelined floatingpoint adder 1 pipelined floatingpoint multiplier Normale Vorgehensweise ohne Optimierung floatingpoint adder und floatingpoint multiplier werden gleichzeitig benützt aber Pipeline wird nicht ausgenützt 2 Fließkommaoperationen in 7 Zyklen Optimierte Version Beide Operationen werden nacheinander gestartet und durch Pipelining beschleunigt 4 Fließkommaoperationen in 8 Zyklen

Maschinencode zum Beispiel Ohne Optimierung Cycle 0: ld x x++ Cycle 1: ld y Cycle 2: Cycle 3: madd Cycle 4: Cycle 5: Cycle 6: st y br y++ Mit Optimierung Cycle 0: ld x Cycle 1: ld x1 Cycle 2: ld y0 x+=4 Cycle 3: ld y1 madd0 Cycle 4: madd1 Cycle 6: st y0 Cycle 7: st y1 y+=4 br Anschaulicher am Maschinencode: Ohne Optimierung: 2 Fließkommaoperationen in 7 Zyklen madd sind zwei Operationen Zyklus 2, 4, 5 ohne Operationen, da load (ld) und multiply-add(madd) gewisse Zeit brauchen, bis die Werte zur Verfügung stehen Mit Optimierung klar ersichtlich sind beide madd-Operationen madd werden nacheinander gestartet (Pipelining wird ausgenützt) einziger leerer Zyklus ist 5

Speicherproblematik Hauptspeicher zu langsam Beispiel: RISC CPU - bis zu vier Fließkommaoperationen pro Zyklus - Hauptspeicher: 0.2 Fließkommaoperanden pro Zyklus Latenzzeit größer als 60 Zyklen  effiziente Ausnutzung der Speicherhierarchie Hauptspeicher zu langsam für CPU, d. h. CPU verbringt meiste Zeit mit Warten, wenn Daten aus dem Hauptspeicher benötigt werden Bsp.: RISC-CPU CPU schafft bis zu 4 Fließkommaoperationen pro Zyklus aber Hauptspeicher liefert nur 0.2 Operanden pro Zyklus Latenzzeit (Zeit bis zur Reaktion) über 60 Zyklen Um Datenbeschaffung zu beschleunigen, muß die Speicherhierarchie des Computers effizient ausgenützt werden (zum Beispiel Verwendung des Cache) Bsp.: DEC PWS 600 A21164 (Folie 12)

Speicherhierarchie Beispiel: DEC PWS 600 A21164 Kapazität Bandbreite Latenzzeit 256 Byte 28800 MB/s 1.7 ns 8 KByte 19200 MB/s 1.7 ns 96 KByte 9600 MB/s 5.0 ns 2 MByte 970 MB/s 23.3 ns 1536 MByte 1070 MB/s 105.0 ns CPU Register 1. Level Cache 2. Level Cache 3. Level Cache Hauptspeicher Swap Space

Effiziente Ausnutzung des Cache Prefetching Reuse Blocking Beispiel Matrixmultiplikation: for i=1 to n do for j=1 to n do for k=1 to n do C[i,j]=C[i,j]+A[i,k]*B[k,j] endfor Prefetching Cache ist unterteilt in Cachelines Werden Daten benötigt, die nicht im Cache stehen, dann wird eine komplette Cacheline in den Cache geladen (auch Wörter, die in der Nähe des benötigten Wortes stehen) Falls auszuführendes Programm genügend Datenlokalität besitzt, stehen später benötigte Wörter bereits im schnellen Cache und nicht im langsamen Hauptspeicher Reuse Daten, die aus dem Cache gelesen werden, werden nicht sofort verworfen, sondern erst aus dem Cache gelöscht, wenn der Cache keinen Platz zur weiteren Aufnahme von Daten bietet Es können oft benötigte Daten so im schnellen Cache gehalten werden Blocking Aus den benötigten Daten werden Blöcke gebildet, die in den Cache passen und schnellen Datenzugriff sichern Beispiel Matrixmultiplikation: Vorüberlegungen: Eine Cacheline entspricht einer Matrixzeile; Matrix größer als Cache Gewöhnliche Code ohne Optimierung (ijk-Schleifenanordnung): Zeilen der Matrix werden als Cachelines abgelegt. Bei Matrix A stehen später benötigte Daten bereits im Cache (Prefetching), innerste Schleife arbeitet Zeile von A ab. Bei Matrix B arbeitet k-Schleife Spalte ab nur ein Element der Zeile Rest unnötig i i k =  k j j C A B

Beispiel Matrixmultiplikation Mit Cache-Optimierung: for i=1 to n do for k=1 to n do for j=1 to n do C[i,j]=C[i,j]+A[i,k]*B[k,j] endfor i j i k j Mit Optimierung: Voraussetzung : Cache kann gleichzeitig eine Zeile von C und B halten Umstellung der Schleifen (ikj) Innerste Schleife arbeitet bei Matrizen C und B jeweils eine Zeile ab Gegensatz zur nicht optimierten Version: Hier wird Matrix B zeilenweise abgearbeitet, nicht spaltenweise falls Cache gleichzeitig keine Zeile von C und B halten kann, Verwendung von Blocking, so daß Zeilen in den Cache passen  effiziente Cacheausnutzung durch Prefetching =  k C A B

Optimierung paralleler Programme Shared Memory: Engstelle ist Hauptspeicher, bzw. Bus  Cache-Optimierung, wie bei RISC Distributed Memory: Erweiterung der Speicherhierarchie Benötigte Daten befinden sich im direkt zugänglichen Speicher  Reduzierung der Netzwerkommunikation Neuberechnung oft schneller als Übermittlung (Beispiel IBM SP2) Shared Memory (Multiprozessor): Zugriffe auf Hauptspeicher so gering wie möglich halten Engstelle ist Hauptspeicher bzw. Bus Optimierung ähnlich RISC-Prozessoren Anwendung der Cacheoptimierung für jeden der Prozessoren Distributed Memory (Multicomputer): Erweiterung der Speicherhierarchie um Netzwerk; sehr langsam Ziel: Reduzierung der Netzwerkkommunikation ähnlich wie bei Cache-Optimierung sollen Daten im direkt zugänglichen Speicher stehen; Anforderung der Daten über Netzwerk entfällt somit Neuberechnung oft schneller: Bsp.: IBM SP2: Bandbreite des Netzwerks 32MB/s Taktfrequenz 66 MHz alle 8 Zyklen erhält Prozessor Fließkommazahl über Netzwerk aber: Neuberechnung dieser Zahl oft kürze als 8 Zyklen

Beispiel zur parallelen Optimierung Matrixmultiplikation: - Parallelisierung der innersten Schleife for i=1 to n do for k=1 to n do doall j=1 to n do C[i,j]=C[i,j]+A[i,k]*B[k,j] enddoall endfor Parallelisierung der innersten Schleife: Schleifen bereits zu ikj umgestellt Verteilung der Befehle in der innersten Schleife auf mehrere Prozessoren Bild zeigt die ersten 4 Iterationen der j-Schleife auf 4 Prozessoren parallel ausgeführt. Hoher Synchronisationsaufwand Für alle n2 Iterationen der äußeren beiden Schleifen (sequentieller Code) müssen die Tasks synchronisiert werden i i k =  k C A B

Beispiel zur parallelen Optimierung Matrixmultiplikation: - Parallelisierung der äußersten Schleife doall i=1 to n do for k=1 to n do for j=1 to n do C[i,j]=C[i,j]+A[i,k]*B[k,j] endfor enddoall Parallelisierung der äußeren Schleife: Schleifen bereits zu ikj umgestellt Jeder Prozessor führt hier längeren sequentiellen Code aus Bild zeigt ersten 4 Iterationen der äußeren Schleife auf 4 Prozessoren Datenlokalität für C und A ist sehr gut (Prefetching) Nachteil jeder Prozessor benötigt die komplette Matrix B, um eine Zeile zu berechnen =  C A B

„Grober“ Parallelismus „Feiner“ Parallelismus Prozessor längere Zeit beschäftigt aber: Datenlokalität nicht gesichert Feiner Parallelismus kurze Rechenzeiten der Prozessoren aber: Erhöhung der Kommunikation Grober Parallelismus: Jeder Prozessor führt längeren sequentiellen Code aus Datenlokalität nicht gesichert; Prozessoren benötigen viele Daten, die nicht im eigenen Speicher (z.B. Cache abgelegt werden können) Feiner Parallelismus: Jeder Prozessor hat nur wenige Anweisungen auszuführen Erhöhung der Kommunikation Daten können im Cache gehalten werden Synchronisation verstärkt erforderlich Feiner Parallelismus bei shared memory da Cache für zuviele Daten zu klein (Bsp.: Folie 16) Grober Parallelismus bei distributed memory weniger Kommunikation zwischen den Prozessoren (Bsp..: Folie 17)

Zusammenfassung, Ausblick Optimierung doch sinnvoll Besonderheiten der Rechnerarchitektur müssen bekannt sein Softwareentwickler müssen die meisten Optimierungen noch selbst durchführen Integration verschiedener Optimierungsmöglichkeiten in den Compiler wäre wünschenswert Zusammenfassung: Man sieht, daß Optimierung in dieser Hinsicht geschwindigkeitssteigernd ist Um Programme zu beschleunigen muß man die Architektur der Rechner kennen Die meisten Optimierungen müssen noch vom Entwickler selbst durchgeführt werden Es wäre wünschenswert, wenn Compilerentwickler Optimierungen integrieren würden, da Programmentwickler mit großer Wahrscheinlichkeit nicht alle möglichen Optimierungen verwenden

Literatur [1] Wm. A. Wulf and Sally A. McKee, Hitting the Memory Wall: Implications of the Obvious, Computer Science Report No. CS-94-48, University of Virginia, 1994 [2] S. Goedecker, Achieving high performance in numerical computations on RISC workstations and parallel systems, Max-Planck Institue for Solid State Research, Stuttgart, 1997 [3] John L. Hennessy, Computer Architecture. A quantitative Approach, Morgan Kaufmann Publishers, Inc., San Mateo, 1990