• Keine Ergebnisse gefunden

Chapel Dennis Appelt

N/A
N/A
Protected

Academic year: 2022

Aktie "Chapel Dennis Appelt"

Copied!
31
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

INSTITUTE FOR PROGRAM STRUCTURES AND DATA ORGANIZATION, FACULTY OF INFORMATICS

Chapel

Dennis Appelt

Seminar: Sprachen für Parallelverarbeitung

(2)

Agenda

Einleitung

Sprachdesign

Annahmen

Wünschenswerte Spracheigenschaften

Die Sprache Chapel

Daten-Parallelismus Task-Parallelismus

Zusammenfassung und Vergleich

(3)

„From ten programmers, eleven are unable to write multithreaded code.“

- unknown

(4)

Eckdaten Chapel

Ziele:

Programmierbarkeit Produktivität

Hintergrund:

DARPA High Productivity Computer Systems

Cray

(5)

Sprachdesign

(6)

Annahmen

Aufgaben des Programmierers:

Parallelität

Synchronization

Datenverteilung und Lokalität

Programmierer wird unterstützt durch High-level Sprachabstraktionen

„specifying intend rather than mechanism“

(7)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

(8)

Beispiel – fragmentierte Sicht

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

1 var n : int = 1000;

2 var locN : int = n / numTasks ; 3 var A, B: [ 0 . . locN +1] float ; 4 var myItLo : int = 1 ;

5 var myItHi : int = locN ; 6 if (iHaveLeftNeighbor) then 7 send (left, A(1)) ;

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

(9)

Beispiel – fragmentierte Sicht

1 var n : int = 1000;

2 var locN : int = n / numTasks;

3 var A, B: [ 0 . . locN +1] float;

4 var myItLo : int = 1;

5 var myItHi : int = locN;

6 if (iHaveLeftNeighbor) then 7 send (left, A(1));

8 else

9 myItLo = 2 ;

10 if (iHaveRightNeighbor) { 11 send(right, A(locN));

12 recv(right, A(locN + 1));

13 } else

14 myItHi = locN−1;

15 if (iHaveLeftNeighbor) then 16 recv(left, A(0));

17 forall i in myItLo .. myItHi do 18 B(i) = (A(i−1) + A(i+1)) / 2 ;

(10)

Beispiel – globale Sicht

1 var n: int = 1000;

2 var A, B: [1..n] float;

3 forall i in 2..n−1

4 B(i) = (A(i−1) + A(i+1)) / 2 ;

(11)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

Generalisierte Parallelität

(12)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung

der Datenstruktur

(13)

Beispiel – Matrix-Vektor Multiplikation

1 var n: int;

2 var M: [1..n, 1..n] float;

3 var V, S: [1..n] float;

4 for i in 1..n { 5 S(i) = 0.0;

6 for j in 1..n do

7 S(i) += M(i, j)*V(j);

8 }

1 var n, nnz : int;

2 var Mvals: [1..nnz] float;

3 var col : [1..nnz] int;

4 var rptr: [1..n+1] int;

5 var V, S: [1..n] float;

6 for i in 1..n { 7 S(i) = 0.0;

8 for j in rptr(i)..rptr (i+1)−1 do 9 S(i) += Mvals(j)*V(col(j));

10 }

dense matrix

sparse matrix

(14)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung

Performance

(15)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung Performance

eingebaute Datenstrukturen

(16)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Fragmentierte vs. Globale Sicht

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung Performance

eingebaute Datenstrukturen

Sprachfeatures

(17)

Wünschenswerte Spracheigenschaften Globale Sicht auf ein Programm

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung Performance

eingebaute Datenstrukturen

Sprachfeatures

(18)

Die Sprache Chapel

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(19)

Daten-Parallelismus

Domain und Array

Domain := Menge von Indizies, die Größe und Struktur eines Array bestimmen.

(20)

Daten-Parallelismus Arithmetische Domain:

Integer Indizies

Ein- oder Mehrdimensional

„Traditionelle“ Arrays Beispiel:

1 var D: domain(2) = [1..m, 1..n];

2 var A: [D] float;

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(21)

Daten-Parallelismus Unendliche Domain

Beliebiger Indizetyp

Sets oder assoziative Arrays Beispiel:

1 var People: domain(string);

2 var Age: [People] int;

3 People += ”John”;

4 Age(”John”) = 62;

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(22)

Daten-Parallelismus Iteration und Slicing

Promotion und Reduction

1 var innerD: subdomain(D) = [2..m-1, 2..n-1];

2 forall ij in innerD { 3 A(ij) = ...

4 }

implizit parallel

1 var rnmu = max reduce abs(A);

Promotion Reduction

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(23)

Daten-Parallelismus

Distribution: Verteilungsvorschrift für Domain Hilft dem Compiler die globale Sicht …

… auf die fragmentierte Sicht abzubilden

= + x *

= + x *

= + x *

….

Knoten 1 Knoten 2 Knoten x

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

(24)

Task-Parallelismus

Task erstellen:

1 begin DoThisTask();

2 TheOriginalThread();

1 var pivot = computePivot(lo, hi, data);

2 cobegin {

3 Quicksort(lo, pivot, data);

4 Quicksort(pivot, hi, data);

5 }

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(25)

Task-Parallelismus Synchronisation:

1 sync {

2 begin treeSearch(root);

3 }

4 def treeSearch(node) {

5 if node == nil then return;

6 begin treeSearch(node.right);

7 begin treeSearch(node.left);

8 }

1 atomic { 2 …

3 }

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(26)

Task-Parallelismus Lokalität:

basierend auf Verarbeitungseinheiten:

basierend auf Speicherort:

1 on Locales(0) do computeTaskC(…);

1 on data[lo] do Quicksort(lo, pivot, data);

Globale Sicht

Generalisierte Parallelität Algorithmus  Datenstruktur

Performance

(27)

Zusammenfassung

Viele der gewünschten Spracheigenschaften sind erfüllt:

Globale Sicht

Generalisierte Parallelität

Trennung von Algorithmus und Implementierung der Datenstruktur

Performance-Tuning (durch Lokalität)

(28)

HPCS Sprachen im Vergleich

Eigenschaft Chapel Fortress X10

Global-View Programmierung   

Mainstream-tauglich   

eigenständige Sprache   

Locales sind explizit ansprechbar   

Lokaler und Globaler Datenzugriff unterscheiden sich syntaktisch

  

Array‘s sind verteilt   

zahlreiche Out-of-Box Distributions   

Redistribution von Array‘s   

Erweiterbarkeit   

(29)

Ende

1 forall p in PeopleSpace {

2 people(p) = „Vielen Dank für Ihre Aufmerksamkeit.“;

3 }

4 writeln(„Noch Fragen?“)

(30)

Literatur

Parallel Programmability and the Chapel Language;

Chamberlain, Callahan, Zima; International Journal of High Performance Computing Applications, 2007

An approach to data distributions in Chapel; R.

Diaconescu/H. P. Zima. International Journal of High Performance Computing Applications, 2007

Chapel Specification (version 0.795)

The Cascade High Productivity Language, David

Callahan, Bradford L. Chamberlain, Hans P. Zima. In 9th International Workshop on High-Level Parallel

Programming Models and Supportive Environments (HIPS

2004), pages 52-60. IEEE Computer Society, April 2004

(31)

Literatur II

New Languages for High Performance, High Productivity Computing, J.V. Ashby, August 2007

Chapel, Fortress and X10: novel languages for HPC, Michele Weiland, Oktober 2007

Programming Languages for HPC: Is There Life

After MPI?, Marc Snir, März 2006

Referenzen

ÄHNLICHE DOKUMENTE

It is no less important that in the Pharos reliquary, the venerated icon and the relic were indissolubly united and perceived as a microcosmic image of the whole sacred

Datengetriebene Anwendungen (Big Data) eröffnen neue Möglichkeiten für Risikoanalysen und Vorausschauender Instandhaltung (Predictive Maintenan- ce); Künstliche Intelligenz

The dynamic selection of DLS techniques during execution via SimAS, the robust scheduling with rDLB, two-level DLB, and realistic performance simulations are all nec- essary

Um die Vorteile einer globalen Sicht besser nachvollziehen zu können, sollen zuerst die Implikationen durch eine fragmentierte Sicht betrachtet werden... Bei einer

Ergebnisse zentralisiert betriebener Höchstleistungsrechner auf weit entfernten Wissenschaftler-Arbeitsplätzen bereits während der Rechnung als 3D- Animation räumlich betrachtet

If we assumed that the creators of the chapel intended to repeat here the antique forms of a triumphal arch, their simplified rendering of its one- -passage scheme with pilasters

In the case of Vasari it is well known, first, that Michelangelo esteemed him more as an architect than as a painter; and, second, Vasari had already worked for Julius III when

23 The idea of the soldier protecting himself with the shield at the right bottom corner of the Clifford drawing was a source of inspiration for the two soldiers at the foot of