Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München.

Ähnliche Präsentationen


Präsentation zum Thema: "Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München."—  Präsentation transkript:

1 Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München eugene.rudoy@cs.tum.edu

2 2 Parallelität in Programmiersprachen - theoretische Hintergründe zZwei Programmiermodelle yohne explizite Parallelität (attraktivere Lösung) ymit expliziter Parallelität zProbleme der parallelen Programmierung yZergliederung in nebenläufige Tasks yBetriebstmittelzuteilung und Ressoursenausnutzung ySynchronisation yKommunikation int search(int b[], int v) { for (int i=0; i<b.length; i++) if (b[i]==v) return i; return -1; }

3 3 Spar - kurzer Überblick zBequeme Parallelprogrammierung ykeine explizite Kommunikation ySynchronisation implizit in Semantik der Sprachkonstrukte yAnnotationen ztechnisch: Beschränkung auf die Menge von SPC- konformen Programmen ( SPC=sequential/parallel with contention ) zAußerdem Erweiterung der Sprache Java mit Konstrukten, die für wissenschaftliche Berechnungen besonders geeignet sind, darunter yArray Support (echte multi-dimensionale Arrays) yGoodies (komplexe Zahlen, Tupel, dünnbesetzte Matrizen)

4 4 Spar: sequentielle Konstrukte  neuer primitiver Typ complex zmulti-dimensionale Arrays, die während ihrer Lebenszeit vergrößert und verkleinert werden können zkein direkter Support für dünnbesetze bzw. Blockmatrizen, dafür aber über das Array interface complex a[*,*] = new complex[10,10]; for( v :- [0,0]:a.getSize() ) a@v = 5i; tuple int^2 ix = [5,5]; a@ix = 1+2i; class foo(|type t|) { t field;... }

5 5 Spar: each und foreach Statements  each { s1; s2 } das gesamte Statement – sequentiell die inneren Statements - in willkürlicher Reihenfolge und mit Pragma auch parallel  foreach( i:- 0:N ) { a[i]=0; stmt; } Statements einer einzelnen Iteration – sequentiell ( wenn nichts anderes gesagt ) die Iterationen – in willkürlicher Reihenfolge

6 6 Spar: Annotations zDie meisten Spar Sprachkonstrukte können mit Annotationen/Pragmas versehen werden zZiel - dem Compiler nützliche Informationen über das Programm und Hinweise für die effizientere Kompilation mitzuteilen zdie Syntax: <$ indepenedent, boundcheck=false, iterations=13, processors=(1 3 5) $> foreach( i :- 0:n ) { sum += i; }

7 7 Distribution Annotations zDie distribution annotations erlauben: yden Prozessortyp, Prozessorcharakteristiken (wie data alignment, endianness, ob der Prozessor die FPU hat usw.) ydie Anordnung von Prozessoren ydie Verteilung der Daten und der Arbeit auf die Prozessoren: Placement von einem Datenelement, von einem Codeblock, von einer Expression anzugeben. zMomentan sind keine Engines implementiert, die das automatische Code-Placement erlauben würden. Es wird aber daran gearbeitet.

8 8 Distribution Annotations - Beispiele globalpragmas <$ ProcessorType=((Gpp “Pentium2”),(Dsp “Trimedia”)) Processors=((Gpp gpp1) (Dsp Dsp1D[4]) (Dsp Dsp2D[2,3])) $> X[i]=Y[a*i+b] ~ [block 3*@i+4 5]

9 9 Weitere Beispiele z int foo(int i) {return i+1;} zforeach(i :- 0:100) a[i]=a[i]+1; zint[*,*] b = new int[50,50]; zint sum=0; foreach(i :- 0:a.length) sum+=a[i]; z max(int a,int b) { return a>b?a:b; }

10 10 Timber – der Compiler für Spar zGeneriert den SPMD-Code zZu lösende Aufgaben bei der Übersetzung SPC-parallelen Spar-Codes in explizit parallelen Code sind: yAufteilung des Programms in “schedulable” Programmteile – Tasks yErmittlung einer Verteilung dieser Tasks auf die Prozessoren yEinfügen von Synchronisations- und Kommunkationsanweisungen, um die korrekte Semantik für each und foreach Statements sicherzustellen yBereitstellung eines globalen Speicherbereichs

11 11 Timber – Compiler System Vnus Spar Front-End Back-End C++ & runtime Rule-Based Transformation System Scheduler Front-End Textual Vnus

12 12 Parallelität auf der Vnus-Ebene  Auf der Vnus-Ebene ist die explizite Parallelität durch fork{s1;s2} and forkall[i:n] stmt; dargestellt  fork{s1;s2} erzeugt zwei Threads, die s1, s2 ausführen  forkall[i:n] stmt; erzeugt n Threads  Sollten Spar Statements mit Pragma annotiert worden sein, so werden sie direkt (d.h. ohne Analyse) in entsprechende o.g. Vnus-Statements übersetzt

13 13 Mutex Mapping zSimples Spar Programm c.init(); foreach (i=0:n){ a[i]=compute(b[i]); c =reduce(c,a[i]); } zWechselseitiger Ausschluss c.init(); foreach (i=0:n){ a[i]=compute(b[i]); c =reduce(c,a[i]); } foreach reduce(0) reduce(n-1) compute(0) compute(n-1) @m1

14 14 Task Annotation & Mapping zTask Annotation c.init(); forkall (i=0:n){ a[i]=compute(b[i]); c =reduce(c,a[i]); } zTask Mapping c.init(); forkall (i=0:n){ a[i]=compute(b[i]); c =reduce(c,a[i]); } zFinal Code c.init(); forkall (i=0:n){ a[i]=compute(b[i]); c=reduce(c,a[i]); }

15 15 Processors/Mutexes Mapping Schema forkall reduce(0) reduce(n-1) @m1 @p[0]@p[n-1] compute(0)compute(n-1) @p[0]@p[n-1]

16 16 Internet Quellen zSpar Website, wo unter anderem die “Spar Language Specification” (aktuelle Version 1.4) zu finden ist y http://www.pds.twi.tudelft.nl/timber/spar/http://www.pds.twi.tudelft.nl/timber/spar/ zTimber Website. Da Timber unter GPL freigegeben ist, ist dort auch der Sourcecode des Compilers zu finden y http://www.pds.twi.tudelft.nl/timber/http://www.pds.twi.tudelft.nl/timber/


Herunterladen ppt "Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München."

Ähnliche Präsentationen


Google-Anzeigen