46
High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Embed Size (px)

Citation preview

Page 1: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

High Performance Fortran

Seminar Parallele Programmierung

von

Sebastian König und Stefan Seidel

Page 2: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 2 / 46

!HPF$ - Inhalt

• Einführung• Modell• Datenverteilung

– 2-Schichten-Mapping– Direktiven zur Datenverteilung

• Spracherweiterungen– Anweisungen zur parallelen Ausführung– Intrinsics / Library– Extrinsics

• Datenverteilung und Performance• Fallbeispiel: Gauss-Elimination• HPF im Vergleich• Fazit

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 3: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 3 / 46

!HPF$ - Einführung

• Erweiterung von Fortran 90

– Direktiven

– Spracherweiterungen

– Neue Funktionen

• Datenparallele Sprache

• Einsatz vor allem im wissenschaftlich-, technischen Bereich

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 4: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 4 / 46

!HPF$ - Einführung

• The IBM Mathematical FORmula TRANslation System, FORTRAN

• Viele Dialekte viele Standards

• Fortran 66, 77, 90, 95, 2000

• High Performance Fortran Forum (HPFF)

• HPF 1.0 im Mai 1993

• HPF 1.1 im November 1994

• HPF 2.0 Ende 1996

Historie EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 5: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 5 / 46

!HPF$ - Modell

• Datenparallelität

– Mehrere Prozessoren führen dasselbe Programm aus

– Die einzelnen Prozessoren arbeiten nur auf einem Teil der Daten

Welcher Prozessor auf welchen Daten arbeitet wird mit sog. Direktiven festgelegt

Datenparallelität EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 6: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 6 / 46

!HPF$ - Modell

• SPMD (single program multiple data)

– Das Programm folgt einem Kontrollfluss

– Globaler Adressraum

– Kommunikation tritt auf, greift ein Prozessor auf Daten zu, die nicht in seinem lokalen Speicher liegen

Organisationsprinzip EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 7: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 7 / 46

!HPF$ - Modell

• Der HPF-Compiler erzeugt zielarchitekturspezifischen, ausführbaren Code

Codegenerierung

Fortran 90

HPF

RISC- Code VektorisierterVektorcode

Paralleler SIMDCode

MIMD- Code(Naachrichtenaus

tausch)

HPF Spracherweiterungen

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 8: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 8 / 46

!HPF$ - ModellProgrammaufbau

Konzeptionelle Prozessoranordnung

Verteilung der Daten auf Prozessoren

Ausführung von (parallelen)Operationen

auf den Daten

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 9: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 9 / 46

!HPF$ - Modell

• Verteilung der Daten: 2-Schichten-Mapping

2-Schichten-Mapping

Konzeptionelle Prozessoranordnung

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufphyisikalische Prozessoren

Abgleich der Verteilung vonDatenobjekten

2-Schichten-Mapping

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 10: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 10 / 46

!HPF$ - Datenverteilung

• Definition einer abstrakten Anordnung von Prozessoren

• Nicht notwendigerweise Bezug zu den tatsächlich vorhandenen physikalischen Prozessoren

• Spezifiziert werden

– Name

– Rang (Anzahl der Dimensionen)

– Größe der Dimensionen

• Alle Prozessoranordnungen in einem Programm haben die gleiche Anzahl von abstrakten Prozessoren

Direktiven zur Datenverteilung - PROCESSORS

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 11: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 11 / 46

!HPF$ - Datenverteilung

Allgemein:

!HPF$ PROCESSORS anordnungName(anordnungDefinition)

Beispiele:

!HPF PROCESSORS Anordnung1(4)

!HPF PROCESSORS Anordnung2(2,2)

!HPF PROCESSORS Anordnung3(2,1,2)

!HPF PROCESSORS Anordnung4(NUMBER_OF_PROCESSORS())

!HPF$ PROCESSORS

Anordnung5(8,NUMBER_OF_PROCESSORS()/8)

Direktiven zur Datenverteilung - PROCESSORS EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 12: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 12 / 46

!HPF$ - Datenverteilung

• Ausrichtung eines Objektes auf ein anderes Objekt

• Die Datenobjekte werden im Speicher desselben Prozessors abgelegt

• Dadurch effizienter Zugriff ohne zusätzlichen Kommunikationsaufwand möglich

• Beipiel:

REAL, DIMENSION(10) :: A,B,T

!HPF$ ALIGN (:) WITH T(:) :: A,B

• Anders ausgedrückt:

!HPF ALIGN A(:) WITH T(:)

!HPF ALIGN B(:) WITH T(:)

Direktiven zur Datenverteilung - ALIGN EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 13: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 13 / 46

!HPF$ - Datenverteilung

• Beispiel:

• zwei Felder der Größe 16x16 und 14x14

• Die „inneren“ Elemente des 16x16-Feldes sollen mit den entsprechenden Elementen des 14x14-Feldes in Berechnungen verwendet werden

REAL X(16,16), Y(14,14)

!HPF$ ALIGN Y(I,J) WITH X(I+1,J+1)

Direktiven zur Datenverteilung - ALIGN EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 14: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 14 / 46

!HPF$ - Datenverteilung

• Felder, die als DYNAMIC deklariert werden, können mit REALIGN neu verteilt werden

REAL X(16,16), Y(14,14)!HPF DYNAMIC X,Y

!HPF$ ALIGN Y(I,J) WITH X(I+1,J+1)

.

.

.

!HPF$ REALIGN Y(I,J) WITH X(I+2,J+2)

Direktiven zur Datenverteilung - REALIGN EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 15: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 15 / 46

!HPF$ - Datenverteilung

• Definition von Vorlagen zur Datenverteilung

• Es muss kein einzelnes Feld deklariert werden, um den gesamten benötigten Bereich aufzuspannen

• Beispiel:

!HPF$ TEMPLATE, DISTRIBUTE(BLOCK, BLOCK) :: EARTH(N+1,N+1)

REAL, DIMENSION(N,N) :: NW, NE, SW, SE

!HPF$ ALIGN NW(I,J) WITH EARTH( I , J )

!HPF$ ALIGN NE(I,J) WITH EARTH( I ,J+1)

!HPF$ ALIGN SW(I,J) WITH EARTH(I+1, J )

!HPF$ ALIGN SE(I,J) WITH EARTH(I+1,J+1)

Direktiven zur Datenverteilung - TEMPLATE EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 16: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 16 / 46

• Verteilung der Daten auf eine Prozessoranordnung

• BLOCK-Distribution

– Aufteilung des Feldes in gleichgroße Blöcke

– Bei Verteilung von #A Elementen auf #P Prozessoren erhält jeder Prozessor maximal #A/#P Elemente

• CYCLIC-Distribution

– Arbeitet nach “Round Robin“-Prinzip

– Bei Verteilung von #A Elementen auf #P Prozessoren erhält jeder Prozessor maximal #A/#P Elemente

• Sowohl BLOCK-Distribution als auch CYCLIC-Distribution können mit einem Parameter für die Blockgröße aufgerufen werden

!HPF$ - DatenverteilungDirektiven zur Datenverteilung - DISTRIBUTE Einführung

ModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 17: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 17 / 46

!HPF$ - Datenverteilung

• Beispiel:

REAL Kartenspiel(52)

!HPF$ PROCESSORS A(4)

!HPF$ DISTRIBUTE Kartenspiel(CYCLIC)ONTO A

Direktiven zur Datenverteilung - DISTRIBUTE

1

49

45

41

37

33

29

25

17

13

9

5

3

51

47

43

39

35

31

27

23

15

7

2

50

46

42

38

34

30

26

22

18

14

6

4

52

48

44

40

36

32

28

24

20

16

12

8

10 11

19

21

P1 P2 P3 P4

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 18: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 18 / 46

!HPF$ - Datenverteilung

• Beispiel (fortgesetzt):

REAL Kartenspiel(52)

!HPF$ PROCESSORS A(4)

!HPF$ DISTRIBUTE Kartenspiel(CYCLIC(5))ONTO A

Direktiven zur Datenverteilung - DISTRIBUTE

1

43

42

41

25

24

23

22

5

4

3

2

11

-

52

51

35

34

33

32

31

14

12

6

48

47

46

30

29

28

27

26

10

9

7

16

-

-

-

40

39

38

37

36

20

19

18

17

8 13

15

21

P1 P2 P3 P4

45

44

50

49 -

-

-

-

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 19: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 19 / 46

!HPF$ - Datenverteilung

• Beispiel (fortgesetzt):

REAL Kartenspiel(52)

!HPF$ PROCESSORS A(4)

!HPF$ DISTRIBUTE Kartenspiel(BLOCK)

Direktiven zur Datenverteilung - DISTRIBUTE

1

13

12

11

10

9

8

7

5

4

3

2

27

39

38

37

36

35

34

33

32

30

28

14

26

25

24

23

22

21

20

19

18

17

15

40

52

51

50

49

48

47

46

45

44

43

41

41

16 29

31

6

P1 P2 P3 P4

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 20: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 20 / 46

!HPF$ - Datenverteilung

• Felder, die als DYNAMIC deklariert werden, können mit REDISTRIBUTE neu verteilt werden

• Felder, die auf das entsprechende Feld ausgerichtet sind, werden auch neu verteilt

Direktiven zur Datenverteilung - REDISTRIBUTE EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 21: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 21 / 46

!HPF$ - Datenverteilung

• Nicht notwendigerweise direkter Zusammenhang zwischen abstrakter Anordnung und tatsächlich physikalisch vorhandenen Prozessoren

• Elemente die auf einem abstrakten Prozessor liegen, liegen auch auf einem physikalischen Prozessor

• Abbildung compilerabhängig

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

KonzeptionelleProzessoranordnung

Abgleich der Verteilung von Datenobjekten

Verteilung der Daten auf Prozessoren

Abbildung abstrakter aufPhysikalische Prozessoren

Page 22: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 22 / 46

!HPF$ - Spracherweiterungen

• Keine automatische Erzeugung von Parallelität

• Alte Anweisungen (Fortran 90) weiterhin sequentiell

• Explizite Programmierung paralleler Ausführung

• Owner-computes-ruleje nach Compiler zur Optimierung umgangen

• Korrektheit durch Programmierer zu gewährleisten

Einführung EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 23: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 23 / 46

!HPF$ - Spracherweiterungen

Startwert : Endwert : Schrittgröße

• Standardnotation zur Definition von Indexbereichen

• Funktionen erlaubtz.B. UBound()

Triplet-Notation EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 24: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 24 / 46

!HPF$ - Spracherweiterungen

• Anweisung zur parallelen Feldzuweisung

• Indexbereich pro Dimension mit Triplet-Definition

Beispiel:

INTEGER, DIMENSION(4) :: A = (/-4,-1,2,4/)

FORALL (i=1:4, A(i) .LT. 0) A(i) = -A(i)

• Indexbereich: 1:4

• Maske A(i).LT.0 nur für A(i) kleiner („less than“) 0

Bei allen negativen Werten das Vorzeichen ändern

• FORALL-Block – Nicht pro Index alle Anweisungen, sondern pro Anweisung alle Indices

Anweisungen zur parallelen Ausführung - FORALL EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 25: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 25 / 46

!HPF$ - Spracherweiterungen

• Zusicherung von Unabhängigkeit der in einer Schleife genutzten Variablen

• Erlaubt Parallelisierung von DO-Schleifen

• NEW-Variablen werden für jede Iteration neu initialisiert (lokal für Schleife)

!HPF$ INDEPENDENT, NEW (j)DO i = 1, n

!HPF$ INDEPENDENTDO j = 1, m

x = A(j)y = B(j)C(i,j) = x+y

END DOEND DO

Anweisungen zur parallelen Ausführung - INDEPENDENT EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 26: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 26 / 46

!HPF$ - Spracherweiterungen

PURE [typ] FUNCTION name ([parameter])

• Zusicherung isolierter Ausführung einer Funktion gegenüber dem Compiler keine Veränderung globaler Daten, nur Rückgabe eines Wertes

• Verwendung in FORALL Anweisungen

• Nutzung für komplexere Berechnungen, bedingten Anweisung, Iterationen, lokale Variablen

Anweisungen zur parallelen Ausführung - PURE EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 27: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 27 / 46

!HPF$ - Spracherweiterungen

• Funktionen zur Systemabfrage– NUMBER_OF_PROCESSORS()

Liefert Anzahl physikalischer Prozessoren– PROCESSOR_SHAPE()

Physikalische Anordnung der Prozessoren

• Funktionen zur Berechnung– ILEN

benötigte Bitzahl zur Speicherung eines Integer– MAXLOC

Indices des größten Wertes im angegebenen Bereich eines Arrays

– MINLOCIndices des kleinsten Wertes im angegebenen Bereich eines Arrays

Intrinsics EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 28: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 28 / 46

!HPF$ - Spracherweiterungen

• Abfrage der Datenverteilung

• Bitinformationen über Integer-Daten

• Datenverdichtung

• Präfix- und Suffix-Berechnung

• Bitbasierte Operation mit Zuweisung

• Sortierung

Library EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 29: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 29 / 46

!HPF$ - Spracherweiterungen

• Einbindung externer Programme

• Ausführung auf jedem Prozessor isoliert mit allen dort zur Verfügung stehenden Daten

• Maschinennahe Berechnungen

• Explizites Message Passing

• HPF_LOCAL

INTERFACEEXTRINSIC (C) SUBROUTINE prozedure1(par1, par2)

REAL :: par1INTEGER :: par2

END SUBROUTINEEND INTERFACE

EXTRINSICS EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 30: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 30 / 46

!HPF$ - Datenverteilung und Performance

• Einfaches Modell zur Bestimmung der Gesamtperformance:

Ein einfaches Modell

Ttotal= Tpar / Tactive + Tserial + Tcomm

Ttotal = gesamte Ausführungszeit

Tpar = Anteil der Arbeit, die parallel ausgeführt werden kann

Tactive = Anzahl aktiver, paralleler Prozessoren

Tserial = Anteil der Arbeit, der sequenziell ausgeführt werden muss

Tcomm = Zeit, die durch Kommunikation in Anspruch genommen wird

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 31: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 31 / 46

!HPF$ - Datenverteilung und Performance

• Ein einfaches Beispielprogramm:

Ein Beispielprogramm

REAL, DIMENSION(8,8) :: A, B

FORALL (J=2:7, K=2:7)

A (J,K) = (B(J,K)+B(J-1,K))

END FORALL

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 32: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 32 / 46

!HPF$ - Datenverteilung und Performance

• Ansatz 1: Aufteilung von B in Spalten gleicher Größe

Ein Beispielprogramm

PROCESSORS, DIMENSION(4) :: P

DISTRIBUTE B(BLOCK,*) ONTO P

(1,2)

(1,1)

(1,8)

(1,7)

(1,6)

(1,5)

(1,4)

(1,3)

(2,2)

(2,1)

(2,8)

(2,7)

(2,6)

(2,5)

(2,4)

(2,3)

(3,2)

(3,1)

(3,8)

(3,7)

(3,6)

(3,5)

(3,4)

(3,3)

(4,2)

(4,1)

(4,8)

(4,7)

(4,6)

(4,5)

(4,4)

(4,3)

(5,2)

(5,1)

(5,8)

(5,7)

(5,6)

(5,5)

(5,4)

(5,3)

(6,2)

(6,1)

(6,8)

(6,7)

(6,6)

(6,5)

(6,4)

(6,3)

(7,2)

(7,1)

(7,8)

(7,7)

(7,6)

(7,5)

(7,4)

(7,3)

(8,2)

(8,1)

(8,8)

(8,7)

(8,6)

(8,5)

(8,4)

(8,3)

P1 P2 P3 P4

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 33: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 33 / 46

!HPF$ - Datenverteilung und Performance

• Ansatz 1: Aufteilung von B in Spalten gleicher Größe

– P1 und P4 führen je 7 Berechnungen aus

– P2 und P3 führen je 14 Berechnungen aus

– Kommunikationsaufwand: 21 Elementaustausche

Ein Beispielprogramm EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 34: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 34 / 46

!HPF$ - Datenverteilung und Performance

• Ansatz 2: Aufteilung von B in vier gleichgroße Blöcke

Ein Beispielprogramm

PROCESSORS, DIMENSION(2,2) :: Q

DISTRIBUTE B(BLOCK,BLOCK) ONTO Q

(4,8)(3,8)(2,8)(1,8)

(4,7)(3,7)(2,7)(1,7)

(4,6)(3,6)(2,6)(1,6)

(4,5)(3,5)(2,5)(1,5)

(4,4)(3,4)(2,4)(1,4)

(4,3)(3,3)(2,3)(1,3)

(4,2)(3,2)(2,2)(1,2)

(4,1)(3,1)(2,1)(1,1)

(8,4)(7,4)(6,4)(5,4)

(8,3)(7,3)(6,3)(5,3)

(8,2)(7,2)(6,2)(5,2)

(8,1)(7,1)(6,1)(5,1)

(8,8)(7,8)(6,8)(5,8)

(8,7)(7,7)(6,7)(5,7)

(8,6)(7,6)(6,6)(5,6)

(8,5)(7,5)(6,5)(5,5)

P1 P2

P3 P4

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 35: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 35 / 46

!HPF$ - Datenverteilung und Performance

• Ansatz 2: Aufteilung von B in vier gleichgroße Blöcke

– P1 und P2 führen je 12 Berechnungen aus

– P3 und P4 führen je 9 Berechnungen aus

– Kommunikationsaufwand: 7 Elementaustausche

Ein Beispielprogramm EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 36: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 36 / 46

!HPF$ - Fallbeispiel: Gauss-Elimination

• Standardbenchmark für parallele Sprachen

• Gegeben: lineares GleichungssystemAx = b, wobeiA eine NxN Matrix,x der gesuchte Lösungsvektor undb ein gegebener Zielvektor ist Speicherung als A Nx(N+1) Matrix, wobei in Spalte N+1 b gespeichert wird

• Lösungsverfahren:

– Elimination: A in Dreiecksform bringen

– Rücksubstitution zur Ermittlung der Lösung

Ausgangsproblem EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Subroutine gauss(n, A, x)

real A(n,n+1)

integer nreal X(n), Fac(n), Row(n+1)integer Indx(n), Itmp(1)integer i, j, k, max_indxreal maxvalIndx = 0

Page 37: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 37 / 46

!HPF$ - Fallbeispiel: Gauss-EliminationElimination

Für i = 1 bis n-1

suche Pivotzeile (größter Wert in Spalte i)

Index der Pivotzeile broadcasten

Faktoren berechnen

Pivotzeile broadcasten

Restzeilen neu berechnen durch Addition des entsprechenden Vielfachen

Matrix auf Dreieckform bringen

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

DO i = 1,n

Itmp = MAXLOC(ABS(A(:,i)), MASK=Indx.EQ.0)

max_indx = Itmp(1)

Fac = A(:,i)/A(max_indx,i)

Row = A(max_indx)

FORALL (j=1:n, k=i:n+1, Indx(j).EQ.0) A(j,k) = A(j,k) + Fac(j) * Row(k)

END DO

FORALL (j=1:n) A(Indx(j),:) = A(j,:)

Page 38: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 38 / 46

!HPF$ - Fallbeispiel: Gauss-Elimination

Für Zeilen (i) rückwärts

Lösung für X(i) ermitteln A(i, n+1) / A(i,i)

Werte in Spalte n+1 korrigieren Subtraktion des entsprechenden Vielfachen

Rücksubstitution EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

DO j = n, 1, -1

X(j) = A(j,n+1) / A(j,j)

A(1:j-1,n+1) = A(1:j-1, n+1) - A(1:j-1,j) * X(j)

END DO

Page 39: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 39 / 46

!HPF$ - Fallbeispiel: Gauss-Elimination

Pro Iteration:

• Ermitteln der Pivotzeile

• Index broadcasten

• Faktoren zur Multiplikation berechnen

• Faktoren broadcasten

• Paralleles Ausrechnen der noch nicht fertigen Zeilen

Kommunikation und Rechenlastverteilung EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 40: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 40 / 46

!HPF$ - Fallbeispiel: Gauss-Elimination

• Bei Array-basierten Berechnungen häufig standardmäßig (BLOCK,*)-Verteilung

würde zu immer weniger genutzten Prozessoren führen (bei fortgeschrittenen Iterationen)

keinerlei Vorteil für Datenlokalität aufgrund der vorliegenden Kommunikation

• Empfehlenswert (CYCLIC, *)

deutlich bessere (gleichmäßigere) Auslastung der Prozessoren

keine Einbußen durch Kommunikation

Ergebnis und Datenverteilung EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 41: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 41 / 46

!HPF$ - HPF im Vergleich

• Vergleich auf IBM SP2 mit 8 Knoten – 1997

• Public-Domain-Implementationen: MPI-ch und PVM

• HPF-Compiler noch nicht ausgereift - Vergleich mit PD-Compilern lässt zukünftige Besserung vermuten

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 42: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 42 / 46

!HPF$ - HPF im Vergleich

• Kompakte und einfache Parallelisierung HPF Code häufig kürzer als Fortran Code

• Implizite Kommunikation und Synchronisation

• Komplexität gemessen an NCSS: 0,4 – 1,8andere Sprachen 1,2 – 16 (MPI, PVM)

Schnelle und einfache Implementierung, aber schlechtere Performance

NCSS – Non-Commented Source Code Statemens

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 43: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 43 / 46

!HPF$ - Fazit

Fragen ?

EinführungModellDatenverteilungSpracherweiterungenPerformanceFallbeispielHPF im VergleichFazit

Page 44: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 44 / 46

!HPF$ - HPF 2

• Neue Verteilungsmuster für DISTRIBUTE

– BLOCK_GEN

– INDIRECT

– SHADOW

• Datenverteilung

– PROCESSORS – Subsets

ZugabeDatenverteilung

Page 45: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 45 / 46

!HPF$ - HPF 2

• ON HOMEDO i = 1, n !HPF$ ON HOME( ix(i) ) x(i) = y(ix(i)) - y(iy(i))END DO

• RESIDENT!HPF$ ALIGN (i) WITH x(i) :: ix, y, iy !HPF$ DISTRIBUTE x(BLOCK)!HPF$ INDEPENDENTDO i = 1, n !HPF$ ON HOME( ix(i) ), RESIDENT(y(iy(i))) x(i) = y(ix(i)) - y(iy(i))END DO

• TASK_REGION!HPF$ TASK_REGION !HPF$ ON HOME(p(1:8)) CALL procedure1(x,y) !HPF$ ON HOME(p(9:16)) CALL procedure2(z)!HPF$ END TASK_REGION

Ausführungssteuerung Zugabe

Page 46: High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel

Seminar Parallele Programmierung (SS2003) – High Performance Fortran (Sebastian König, Stefan Seidel) 46 / 46

!HPF$ - HPF 2

• Erweiterung für INDEPENDENT

– REDUCTION

• Intrinsics

– ACTIVE_NUM_PROCS

– ACTIVE_PROCS_SHAPE

• asynchronous I/O

weitere Zugabe