Programmtransformationen: Vom PRAM Algorithmus zum MPI Programm
|
|
|
- Friedrich Hochberg
- vor 8 Jahren
- Abrufe
Transkript
1 Programmtransformationen: Vom PRAM Algorithmus Dr. Victor Pankratius David J. Meder IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
2 Modell und Realität Das PRAM Modell geht von N logischen Prozessoren aus. Das Rechnerbündel hat aber lediglich P < N physikalische Prozessoren Prozessvirtualisierung notwig. Das PRAM Modell geht von gemeinsamem Adressraum aus. Das Rechnerbündel verfügt jedoch über einen verteilten Speicher Datenverteilung notwig. 2
3 Datenverteilung (1) Problem: Wie verteilt man (globale) Daten auf die Speichermodule der einzelnen Prozessoren? PRAM Ansatz: bei einem N-elementigen Vektor V[0 N- 1] hält jeder Prozessor i das Datenelement V[i]. Prozessor V 3
4 Datenverteilung (2) Was tun bei P < N Prozessoren? (1) Zyklische Datenverteilung Prozessor V (2) Blockweise Datenverteilung Prozessor V
5 Datenverteilung (3) Zyklische Datenverteilung: Jeder Prozessor j bekommt alle Datenelemente i, für die gilt (i mod P) = j. Blockweise Datenverteilung: Jeder Prozessor j bekommt die Datenelemente in Segmenten der Länge N/P (bis evtl. auf den letzten): V[j* N/P (j+1)* N/P -1] 5
6 Datenverteilung (4) Gibt es weitere Verteilungsstrategien? Ja, nämlich die zufällige Verteilung (Random) und die blockzyklische Verteilung (Bcycle(k)), bei der jeweils Datenblöcke der Länge k zyklisch über die vorhanden Prozessoren verteilt werden. V Prozessor ,1 2,3 4,5 6,7 8,9 10,11 12,13 14,15 6
7 Datenverteilung (5) Bcycle(k) ist die allgemeine Verteilungsstrategie, da Zyklisch = Bcycle(1) Block = Bcycle(N/P) Frage: Was tun bei mehrdimensionalen Feldern? Je eine Bcycle(k) Verteilung pro Dimension 7
8 Datenverteilung (6) 2D Spaltenweise: Bcycle(N)/Bcycle(1) (64 Elemente auf 4 Prozessoren) oder Bcycle(N)/Bcycle(2). 8
9 Datenverteilung (7) 2D Zeilenweise Bcycle(1)/Bcycle(N) (64 Elemente auf 4 Prozessoren) oder Bcycle(2)/Bcycle(N). 9
10 Datenverteilung (8) 2D Quadrantenweise (Bcycle(N/SQRT(P))/Bcycle(N/SQRT(P))) (64 Elemente auf 4 Prozessoren) oder Bcycle(2)/Bcycle(2). 10
11 Datenverteilung (9) Bcycle(1)/Bcycle(4) (64 Elemente auf 4 Prozessoren) oder Bcycle(2)/Bcycle(1). 11
12 Daten- und Prozessverteilung Wir wissen jetzt, welche Daten auf welchen Prozessoren liegen (Datenverteilung). Jetzt müssen die N Prozesse auf die P Prozessoren verteilt werden (Prozessverteilung). 12
13 Prozessverteilung (1) Rückblick: einfaches PRAM Programm: FORALL i [0.. N-1] IN PARALLEL DO A[i] := B[i] + C[i] END Jeder gedachte Prozess/Prozessor i ist für die Berechnung des i-ten Datenelements zuständig oder: Datenelement i wird von Prozess/Prozessor i berechnet. 13
14 Prozessverteilung (2) Aus der Datenverteilung kennen wir den physikalischen Prozessor j, der Datenelement i hält. Owner-Computes-Regel (aus Übersetzerbau für parallele Programmiersprachen). Idee: Lege gedachten Prozess/Prozessor i ebenfalls auf physikalischen Prozessor j (denn dort liegen ja die benötigten Daten) Bei gegebener Datenverteilung unter Zuhilfenahme der Owner-Computes-Regel, kann man die Prozessverteilung analog zur Datenverteilung berechnen 14
15 Programmtransformation Systematik: Festlegen der Datenverteilung. Emulation von V = N/P virtuellen Prozessoren auf je einem physikalischen Prozessor (sog. Virtualisierung) Umwandeln von nichtlokalen Datenzugriffen in S / Receive Operationen. 15
16 Virtualisierung (1) Emulation von N virtuellen Prozessoren auf P realen Prozessoren. Beispiel: FORALL i : [0.. N-1] A[i] := B[i] + C[i] wird zu FORALL i : [0.. P-1] FOR v : [i*(n/p)..(i+1)*(n/p)-1] A'[v] := B'[v] + C'[v] 1*N/P N 2*N/P N/P 16
17 Virtualisierung (2) Original PRAM Programm (8 Prozessoren) Programm nach Virtualisierung (4 Prozessoren) Prozessor Prozessor A + B = C A + B = C A, B und C sind die verteilten Felder A, B und C 17
18 Virtualisierung (3) Frage: Ist die Emulation mittels einer (FOR-) Schleife zulässig? Antwort: Ja Bei asynchroner Ausführung: Die ursprünglichen Prozessoren der PRAM arbeiten vollkommen unabhängig voneinander. Diese Eigenschaft überträgt sich auf die Virtualisierungsschleife, deren einzelne Iterationen ebenfalls unabhängig sind. 18
19 Virtualisierung und Kommunikation (1) Bisher haben wir Datenverteilung bei der Virtualisierung nicht betrachtet. Wie erfolgt beim folgen Beispiel die blockweise bzw. zyklische Datenverteilung? FORALL i : [0.. N-1] IN SYNC A[i] := A[(i+1)mod N] Prozessor A A
20 Virtualisierung und Kommunikation (2a) Blockweise Datenverteilung: forall i : [0.. P-1] in parallel v := (N/P); ziel := (i-1) mod P; quelle:=(i+1) mod P; // lokale Indizierung tmp := A[0]; //merke altes A[0] for j : [0.. v-2] // verschiebe alle lokalen Werte, bis auf den letzten A[j] = A[j+1]; //se altes A[0] zum Nachbarn SEND(tmp, ziel); //rechtes Element in letzte Pos. holen A[v-1] = RECEIVE(quelle); // Synchronisation durch // SEND und RECEIVE 20
21 Virtualisierung und Kommunikation (2b) Blockweise Datenverteilung: forall i : [0.. P-1] in parallel v := (N/P); ziel := (i-1) mod P; quelle:=(i+1) mod P; // lokale Indizierung tmp := A[0]; //merke altes A[0] for j : [0.. v-2] // verschiebe alle lokalen Werte, bis auf den letzten A[j] = A[j+1]; //se altes A[0] zum Nachbarn SEND(tmp, ziel); //rechtes Element in letzte Pos. holen A[v-1] = RECEIVE(quelle); Beispiel: i=0, N=8, P=4, v=n/p=2 P0: Ziel=3, Quelle=1, snd( 0,3), A[1]=rcv(1) P1: Ziel=0, Quelle=2, snd( 2,0), A[1]=rcv(2) P2: Ziel=1, Quelle=3, snd( 4,1), A[1]=rcv(3) P3: Ziel=2, Quelle=0, snd( 6,2), A[1]=rcv(0) Prozessor A // Synchronisation durch // SEND und RECEIVE A
22 Virtualisierung und Kommunikation (3a) Zyklische Datenverteilung: forall i : [0.. P-1] in parallel v := (N/P); ziel := (i-1) mod P; quelle := (i+1) mod P; for j : [0.. v-1] // Se Wert an Nachbarn SEND(A[j], ziel); //empfange Nachbarwerte in temp. T T[j] := RECEIVE(quelle); //aktualisiere A for j : [0.. v] A[j] := T[j]; 22
23 Virtualisierung und Kommunikation (3b) Zyklische Datenverteilung: forall i : [0.. P-1] in parallel v := (N/P); ziel := (i-1) mod P; quelle := (i+1) mod P; for j : [0.. v-1] // Se Wert an Nachbarn SEND(A[j], ziel); //empfange Nachbarwerte in temp. T T[j] := RECEIVE(quelle); //aktualisiere A for j : [0.. v] A[j] := T[j]; Beispiel: i=0, N=8, P=4, v=n/p=2 P0: Ziel=3, Quelle=1; P1: Ziel=0, Quelle=2 P2: Ziel=1, Quelle=3; P3: Ziel=2, Quelle=0 j=0 P0: snd( 0,3), A[0]=rcv(1) P1: snd( 1,0), A[0]=rcv(2) P2: snd( 2,1), A[0]=rcv(3) P3: snd( 3,2), A[0]=rcv(0) Prozessor A A
24 Virtualisierung und Kommunikation (3b) Zyklische Datenverteilung: forall i : [0.. P-1] in parallel v := (N/P); ziel := (i-1) mod P; quelle := (i+1) mod P; for j : [0.. v-1] // Se Wert an Nachbarn SEND(A[j], ziel); //empfange Nachbarwerte in temp. T T[j] := RECEIVE(quelle); //aktualisiere A for j : [0.. v] A[j] := T[j]; Beispiel: j =1 P0: snd( 4,3), A[1]=rcv(1) P1: snd( 5,0), A[1]=rcv(2) P2: snd( 6,1), A[1]=rcv(3) P3: snd( 7,2), A[1]=rcv(0) Letzte Schleife: Temp. Werte in A kopieren Prozessor A A
25 Virtualisierung und Kommunikation (4) Komplexität des Programms sowie Anzahl und Art der Kommunikationsoperationen hängt direkt von der Datenverteilung ab. Vgl. Beispiel mit Blöcken: Weniger Kommunikation wg. lokaler Rotation des Arrays eine gute Datenverteilung ist ein entscheides Kriterium für die Verständlichkeit des resultieren Programms. Deswegen: VORHER über die Datenverteilung nachdenken Insbesondere wichtig: Indextransformationen, Unterscheidung zw. lokalen und nichtlokalen Zugriffen, Umwandlung von synchroner Ausführung in asynchrone mit Hilfsvariablen und Synchronisation durch Kommunikation. 25
26 Virtualisierung und Kommunikation (5) Beispiel: Reduktions-, Präfix- und Postfixoperationen Frage: Welche Datenverteilung verursacht im unteren Beispiel weniger Kommunikation? Block oder Zyklisch? 26
27 Virtualisierung und Kommunikation (6) Reduktionsoperation (Summe): Idee Bilde lokale Summe Empfange Teilergebnis anderer Prozesse, addiere auf lokale Summe auf Se Teilergebnis an entspreche Prozesse Anm.: Jedes Rechteck ist selbst ein lokaler Vektor 27
28 Virtualisierung und Kommunikation (6) Reduktionsoperation (Summe): forall i: [0.. P-1] in parallel int summe := 0; // lokale Deklaration! //lokale Summe bilden for j : [0.. (N/P)-1] summe := summe + V[j]; int spanne := 1; while (spanne < P) DO if (i MOD (2 * Spanne) = 0) // Empfänger summe := summe + RECEIVE(i + spanne); if (i MOD (2 * Spanne) = Spanne) // Ser SEND(summe, i - spanne)); Spanne := Spanne * 2; // Synchronisation implizit durch // Kommunikation Anm.: Jedes Rechteck ist selbst ein lokaler Vektor der Größe N/P (mit Grenzen 0..(N/P)-1) 28
29 Virtualisierung und Kommunikation (6) Reduktionsoperation (Summe): forall i: [0.. P-1] in parallel int summe := 0; // lokale Deklaration! //lokale Summe bilden for j : [0.. (N/P)-1] summe := summe + V[j]; int spanne := 1; while (spanne < P) DO if (i MOD (2 * Spanne) = 0) // Empfänger summe := summe + RECEIVE(i + spanne); if (i MOD (2 * Spanne) = Spanne) // Ser SEND(summe, i - spanne)); Spanne := Spanne * 2; // Synchronisation implizit durch // Kommunikation Lokale Summen bereits vorhanden Anm.: Jedes Rechteck ist selbst ein lokaler Vektor s s s s r r r r 29
30 Virtualisierung und Kommunikation (6) Reduktionsoperation (Summe): forall i: [0.. P-1] in parallel int summe := 0; // lokale Deklaration! //lokale Summe bilden for j : [0.. (N/P)-1] summe := summe + V[j]; int spanne := 1; while (spanne < P) DO if (i MOD (2 * Spanne) = 0) // Empfänger summe := summe + RECEIVE(i + spanne); if (i MOD (2 * Spanne) = Spanne) // Ser SEND(summe, i - spanne)); Spanne := Spanne * 2; // Synchronisation implizit durch // Kommunikation Lokale Summen bereits vorhanden Anm.: Jedes Rechteck ist selbst ein lokaler Vektor r s r s 30
31 Virtualisierung und Kommunikation (6) Reduktionsoperation (Summe): forall i: [0.. P-1] in parallel int summe := 0; // lokale Deklaration! //lokale Summe bilden for j : [0.. (N/P)-1] summe := summe + V[j]; int spanne := 1; while (spanne < P) DO if (i MOD (2 * Spanne) = 0) // Empfänger summe := summe + RECEIVE(i + spanne); if (i MOD (2 * Spanne) = Spanne) // Ser SEND(summe, i - spanne)); Spanne := Spanne * 2; // Synchronisation implizit durch // Kommunikation Lokale Summen bereits vorhanden Anm.: Jedes Rechteck ist selbst ein lokaler Vektor r s 31
32 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke einzelner Prozessoren: lokalesum 0 Idee: Bilde zunächst parallel lokale Summen der einzelnen Prozessoren lokalesum i Reduktion und Austausch blockweise, addiere Teilsummen auf sum i Schreibe korrekten Postfix-Wert in das letzte Element eines jeden lokalen Arrays Postfix-Werte für Arrays lokal berechnen 32
33 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall Anm: Jedes Rechteck ist selbst ein Vektor 33
34 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall Aufaddieren auf lokale Summen Anm: Jedes Rechteck ist selbst ein Vektor s s s s s s s r r r r r r r 34
35 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall Anm: Jedes Rechteck ist selbst ein Vektor s s s s s s r r r r r r 35
36 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall Anm: Jedes Rechteck ist selbst ein Vektor [7..0] [7..1] [7..2] [7..3] [7..4] [7..5] [7..6] [7] Lokale summe über Teil-Arrays 36
37 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall Berechne in jedem P letztes lokales Element Anm: Jedes Rechteck ist selbst ein Vektor [7..0] [7..1] [7..2] [7..3] [7..4] [7..5] [7..6] [7] Sum 0 =Sum i der Prozessoren Addiere Sum 0 auf letztes Element, aber ziehe korrigier lokalesum ab 37
38 Virtualisierung und Kommunikation (7) Postfixoperation (Summe) über Zahlenblöcke der einzelnen Prozessoren: forall i: [0.. P-1] in parallel spanne := 1; sum := 0; lokalesum :=0; for j : [0.. (N/P)-1] lokalesum := lokalesum + V[j]; sum := lokalesum; while (spanne < N) DO if (i >= spanne) // Ser SEND(sum, i - spanne); if (i + spanne < P) // Empfänger sum := sum + RECEIVE(i + spanne); spanne := spanne * 2; //while V[(N/P)-1] := V[(N/P)-1] + sum - lokalesum; SUM for j : [(N/P)-2.. 0] Step -1 V[j] := V[j] + V[j+1]; //for //forall lokalesum V[(N/P)-1] Berechne in jedem P letztes lokales Element Anm: Jedes Rechteck ist selbst ein Vektor [7..0] [7..1] [7..2] [7..3] [7..4] [7..5] [7..6] [7] Sum 0 =Sum i der Prozessoren Addiere Sum 0 auf letztes Element, aber ziehe korrigier lokalesum ab 38
39 Mehrdimensionale Kommunikation (1) Bei mehrdimensionalen Feldern verkompliziert sich die Kommunikationsberechnung, da zusätzlich eine Abbildung der 2D-Datentopologie auf die eindimensionale Nummerierung der Prozessoren stattfinden muss. Vereinfachung: Verwe virtuelle Topologien in MPI. Dann ist Kommunikation rechts, links, unten, oben möglich. 39
40 Mehrdimensionale Kommunikation (2) Datenverteilung ist im mehrdimensionalen Fall extrem wichtig, da sich in der Regel sogenannte Oberflächeneffekte ausnutzen lassen. Beispiel: 2D Block Verteilung (Kantenlänge k) k 2 Berechnungen, aber bei geeigneter Datenverteilung lediglich 4*k Kommunikationen 40
41 Beispiel Jacobi-Iteration (1) In einem N*N Feld wird folge Iteration gerechnet, bis die Änderungen kleiner als eine vorgegebene Schranke sind: forall i: [1.. N-2] in sync forall j: [1.. N-2] in sync A[i, j] += theta/4 * (A[i, j+1] + A[i, j-1] + A[i-1, j] + A[i+1, j]); i,j-1 i-1,j i,j i+1,j i,j+1 (Feldindizes jeweils 0..N-1; N² Prozessoren) 41
42 Beispiel Jacobi-Iteration (2) Idee: Feld in Blöcke aufteilen, mit Rändern für die Nachbarschaft (Überlappungsbereich). Rechenbereich Überlappung 42
43 Beispiel Jacobi-Iteration (3) Damit besteht eine Iteration aus: 1. Ränder austauschen 2. Iteration auf dem lokalen Block 3. größte Änderung pro Block bestimmen 4. Maximum-Reduktion, um Konvergenz zu bestimmen (oder Vergleich mit Schranke mit folger Oder-Reduktion des booleschen Ergebnisses). Optimierung: nicht Einzelelemente sen, sondern jeden Rand als Block. Kommunikationen:4k pro k x k Block. Rechenoperationen: k 2 pro Block. 43
p max = 4 T = 8 Work = 28 3 I = Work / T = 3,5 2 Cost = p max * T = 32 U = I / p max = 87,5% 1
Massivparallele Modelle und Architekturen Wintersemester 2010/2011 Lösungsvorschlag 1. Übung 1. Aufgabe: Leistungsbewertung paralleler Systeme Betrachtet werden soll der Odd-Even-Sort-Algorithmus mit n
OpenMP am Beispiel der Matrizenmultiplikation
OpenMP am Beispiel der Matrizenmultiplikation David J. Meder, Dr. Victor Pankratius IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe
Kommunikationsmodelle
Kommunikationsmodelle Dr. Victor Pankratius David J. Meder IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Grundlegende
Präfix-Summe. Das Schweizer Offiziersmesser der Parallelen Algorithmen. Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen
Präfix-Summe Das Schweizer Offiziersmesser der Parallelen Algorithmen Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen Parallele Rechenmodelle Beispiel: Summieren von Zahlen Verlauf des Rechenprozesses:
Peg-Solitaire. Florian Ehmke. 29. März / 28
Peg-Solitaire Florian Ehmke 29. März 2011 1 / 28 Gliederung Einleitung Aufgabenstellung Design und Implementierung Ergebnisse Probleme / Todo 2 / 28 Einleitung Das Spiel - Fakten Peg-33 33 Löcher, 32 Steine
Konzepte der parallelen Programmierung
Fakultät Informatik, Institut für Technische Informatik, Professur Rechnerarchitektur Konzepte der parallelen Programmierung Parallele Programmiermodelle Nöthnitzer Straße 46 Raum 1029 Tel. +49 351-463
Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08
Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Die Datenstruktur der Reihungen verstehen: mathematisch und im Speicher Grundlegende
Einführung in die Programmiersprache Julia Vorlesung Computerphysik Sommersemester 2018 Ralf Bulla Universität zu Köln
Einführung in die Programmiersprache Julia Vorlesung Computerphysik Sommersemester 2018 Ralf Bulla Universität zu Köln 1 Einstieg Das erste Programm: a = 1 println(a) Ein Programm ist eine Abfolge von
Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III
Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III Text: Hinnerk van Bruinehsen - Grafiken: Jens Fischer powered by SDS.mint SoSe 2011 1 Teil
Vorlesung "Verteilte Systeme" Sommersemester 1999. Verteilte Systeme. Adreßraum. Rechner. Verteilte Systeme, Sommersemester 1999 Folie 19.
Verteilte Systeme 19. Distributed Shared Memory Sharing!! No Sharing! Sharing? Evolution der Berechnungsmodelle Vergangenheit Gemeinsamer Speicher Einzelrechner Gegenwart Nachrichtenkommunikation Verteilte
Paralleler Programmentwurf nach Foster
Paralleler Programmentwurf nach Foster Die PCAM-Methode Partitionierung - ermittle maximale Parallelität Communication - ermittle Datenabhängigkeiten Agglomeration - erhöhe die Granularität der Aufgaben
Programmierung. Rückblick. VWA - Programmierung Winter Algorithmus. Programmiersprache. Variable. Zuweisung. Bedingung.
Programmierung 1 Rückblick Algorithmus Programmiersprache Variable Zuweisung Bedingung Schleife (c) Peter Sturm, University of Trier 1 3 Aufgabe: Viele, viele bunte Smarties Rechengeschwindigkeit CPU 5
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren Teilnehmerkreis und Voraussetzungen Studiengänge
Effiziente Algorithmen 2
Effiziente Algorithmen 2 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen
Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Parallele Algorithmen in der Bildverarbeitung
Seminar über Algorithmen - SoSe 2009 Parallele Algorithmen in der Bildverarbeitung von Christopher Keiner 1 Allgemeines 1.1 Einleitung Parallele Algorithmen gewinnen immer stärker an Bedeutung. Es existieren
Algorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Rechnerarchitektur. Lösungsvorschlag 6. Übung. Sommersemester Aufgabe: Zyklische Verschiebung
Rechnerarchitektur Lösungsvorschlag 6. Übung Sommersemester 2010 Fachgebiet Rechnerarchitektur Prof. R. Hoffmann Patrick Ediger 1. Aufgabe: Zyklische Verschiebung Gegeben sei eine Folge von n Variablen
Computergrafik Universität Osnabrück, Henning Wenke,
Computergrafik Universität Osnabrück, Henning Wenke, 2012-05-14 Kapitel V: Modeling Transformation & Vertex Shader 5.1 Vertex Definitionen: Vertex Vertex Computergrafik Mathematischer Punkt auf einer Oberfläche
Kapitel 1 Parallele Modelle Wie rechnet man parallel?
PRAM- PRAM- DAG- R UND R Coles und Kapitel 1 Wie rechnet man parallel? Vorlesung Theorie Paralleler und Verteilter Systeme vom 11. April 2008 der Das DAG- Das PRAM- Das werkmodell Institut für Theoretische
Kombinatorische Optimierung
Juniorprof. Dr. Henning Meyerhenke 1 Henning Meyerhenke: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Vorlesung 16 Programm: Einführung
Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
Automatische Parallelisierung
MPI und OpenMP in HPC Anwendungen findet man immer häufiger auch den gemeinsamen Einsatz von MPI und OpenMP: OpenMP wird zur thread-parallelen Implementierung des Codes auf einem einzelnen Rechenknoten
Wertebereich und Genauigkeit der Zahlendarstellung
Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden
Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
Algorithmische Geometrie: Arrangements und
Algorithmische Geometrie: Arrangements und Dualität Nico Düvelmeyer WS 2009/2010, 19.1.2010 Überblick 1 Strahlenverfolgung und Diskrepanz 2 Dualität Dualitäts-Abbildung Transformation des Problems zur
Zentralübung Grundlagen der Programmierung
Zentralübung Grundlagen der Programmierung Bastian Cramer Standardbelegungen für Variablen lokale Variablen müssen initialisiert werden! Ansonsten gilt: 2 Aufgabe 1: while Schleife Quersumme einer beliebigen
Parallele und verteilte Programmierung
Thomas Rauber Gudula Rünger Parallele und verteilte Programmierung Mit 165 Abbildungen und 17 Tabellen Jp Springer Inhaltsverzeichnis 1. Einleitung 1 Teil I. Architektur 2. Architektur von Parallelrechnern
OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer
OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell
Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
Tag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)
Schleifen Datenfelder (Arrays) Verzweigungen
Schleifen Datenfelder (Arrays) Verzweigungen Vektoren, Matrizen, Tabellen for, while, foreach, if-else und switch-case Dr. Beatrice Amrhein Überblick Schleifen o for, while, foreach Eindimensionale Arrays
Grundbegriffe der Informatik
Grundbegriffe der Informatik Übung Simon Wacker Karlsruher Institut für Technologie Wintersemester 2015/2016 GBI Grundbegriffe der Informatik Karlsruher Institut für Technologie 1 / 13 Programmiersprachen
Crashkurs: MATLAB (Teil II)
Crashkurs: MATLAB (Teil II) Übungsaufgaben Im Rahmen des Mentorings (SoSe 209) 0.04.209 Funktionen, Kontrollstrukturen, Abbildungen Hinweis. Schreiben Sie jede der folgen Aufgaben in eine eigene Skript-Datei
Lösen der Matrizengleichung
Lösen der Matrizengleichung Oliver Deussen Lösungsverfahren K 1 letztes Kapitel: Berechnung der Formfaktoren F außerdem: B: zu berechnende Strahlung, E: gegebenes Eigenleuchten nun: Wie löst man K B =
Programmieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn
Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn 26. Oktober 2015 Programme und Algorithmen Programmiersprache = Kunstsprache mit genau definierter Syntax (was ist ein zulässiger
Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik
Programmieren I Arrays Heusch 7.2 Ratz 5.1 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Arrays: Definition Arrays (dt. Felder) dienen zum Speichern mehrerer gleichartiger Daten
7. Sortieren Lernziele. 7. Sortieren
7. Sortieren Lernziele 7. Sortieren Lernziele: Die wichtigsten Sortierverfahren kennen und einsetzen können, Aufwand und weitere Eigenschaften der Sortierverfahren kennen, das Problemlösungsparadigma Teile-und-herrsche
Der folgende Vortrag basiert auf dem Text A Polynomial Time Algorithm for the N-Queens Problem von Rok Sosic und Jun Gu aus dem Jahre 1990.
Ein polynomieller Algorithmus für das N-Damen Problem 1 Einführung Der folgende Vortrag basiert auf dem Text A Polynomial Time Algorithm for the N-Queens Problem von Rok Sosic und Jun Gu aus dem Jahre
Tag 3 Repetitorium Informatik (Java)
Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Typkonvertierung
Kapitel 5 Deklaration und Sichtbarkeitsbereich
Kapitel 5 Deklaration und Sichtbarkeitsbereich Korbinian Molitorisz IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Deklarationen:
8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)
Stand der Vorlesung: Datenstruktur Heap: fast vollständiger Binärbaum MaxHeap: sortierter Heap, größtes Element an Wurzel Sortierverfahren: HeapSort: Sortieren eines Feldes A[1.. n] Idee: in place: Feld
Übung 04 Mehrkörper Keplerproblem
Übung 04 Mehrkörper Keplerproblem 1 1 Lösung 1.1 Skizzieren des Algorithmus Aufgabe 1 1. Erstellen Sie skizzenhaft eine Möglichkeit der Berechnung aller Kräfte einer beliebigen Anzahl von Himmelskörpern.
Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download
Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches
Rechnernetze Übung 10. Frank Weinhold Professur VSR Fakultät für Informatik TU Chemnitz Juni 2011
Rechnernetze Übung 10 rank Weinhold Professur VSR akultät für Informatik TU hemnitz Juni 2011 Das Weiterleiten (Routing) erfüllt die wichtige ufgabe, einzelne Teilstrecken des Kommunikationsnetzes so zu
Einführung in die Programmierung (MA8003)
Theorie 2.2: Schleifen, Vektorisierung, bedingte Ausführung Dr. Lorenz John Technische Universität München Fakultät Mathematik, Lehrstuhl für Numerische Mathematik M2 05.10.2016 Numerische Mathematik M2
Automatisches Parallelisieren
Automatisches Parallelisieren Vorlesung im Wintersemester 2010/11 Eberhard Zehendner FSU Jena Thema: Datenabhängigkeitsanalyse Eberhard Zehendner (FSU Jena) Automatisches Parallelisieren Datenabhängigkeitsanalyse
Control Beispiel. Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Control
Control Beispiel Store R1 4 Bit Register R1 SUB 4 Bit Register R2 Store R2 R2 Bit 0 Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Eingabe R2 Bit 0 Zero 0 0 Ausgabe
9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016
Repetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.
Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit
Zelluläre Automaten. Zelluläre Automaten sind einfache Simulationssysteme zur Untersuchung von komplexen Interaktionsmuster
Motivation sind einfache Simulationssysteme zur Untersuchung von komplexen Interaktionsmuster einfache Zellen räumlich angeordnet einfache Interaktionsmuster (Beziehungen zwischen benachbarten Zellen)
Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn
Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn November 2016 Algorithmen und Programme Algorithmus = Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man
Algorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Dynamisches Programmieren Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester.. Einleitung Diese Lerneinheit widmet sich einer
...imbeispiel: Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t). liefert die Konkatenation: name int + int.
Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t)....imbeispiel: E 0 E 1 + T 1 T 0 F 2 T 1 F 2 int F 1 int name liefert die Konkatenation: name int + int. 273 Die Grammatik
IT-Security. Teil 8b: Rechnen mit beliebiger Genauigkeit Algorithmen
IT-Security Teil 8b: Rechnen mit beliebiger Genauigkeit Algorithmen 06.06.17 1 Überblick Potenzieren Quadrieren Euklid'scher Algorithmus In den meisten Fällen wird nur mit positiven Werten gerechnet. Bei
Vorlesung Programmieren
Vorlesung Programmieren 6. Arrays 23.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
Elementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
Ideen und Konzepte der Informatik
Ideen und Konzepte der Informatik Programme und Algorithmen Antonios Antoniadis 23. Oktober 2017 Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert
Kapitel 3: Sortierverfahren Gliederung
Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen
Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren
Hanspeter Mössenböck Sprechen Sie Java? Eine Einführung in das systematische Programmieren 3., überarbeitete und erweiterte Auflage Tm\ dpunkt.verlag 1 Grundlagen 1 1.1 Daten und Befehle 2 1.2 Algorithmen
Kap 7. Funktionen und Arrays
Kap 7. Funktionen und Arrays Elementare Algorithmen Allgemein Mathematik Text Eingabe ٧ Skalarprodukt wie Allgemein Ausgabe ٧ Länge ersetzen Summation Winkel Laenge Maximum ٧ Polynome berechnen ausschneiden
Schriftliche Prüfung
OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Schriftliche Prüfung im Fach: Rechnersysteme Studiengang: Bachelor (PF CSE / IF; WPF CV / WIF) am: 30. Juli 2008 Bearbeitungszeit: 120 Minuten
Einführung in die objektorientierte Programmierung mit C++
Prof. Dr. Thomas Klinker FB Elektrotechnik und Informatik 08. 03. 2007 Projekt im 4. Semester Elektrotechnik: Einführung in die objektorientierte Programmierung mit C++ Aufgabe 1: Schreiben Sie ein Programm,
Programmierung mit Feldern OOPM, Ralf Lämmel
Übung: Deklarieren Sie ein entsprechendes Feld in Java! Programmierung mit Feldern OOPM, Ralf Lämmel Einführendes Beispiel Eingabe: ein Feld von int-werten public static int sum(int[] a) { int result =
Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn
Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man umgangssprachlich,
ÜBUNGS-BLOCK 7 LÖSUNGEN
ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
Grundlagen: Algorithmen und Datenstrukturen
Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und
