270 likes | 373 Views
eSkel – edinburgh Skeleton library. Parallele Programmierung mit Skeletten. Mai 2007. Seminararbeit Ingo Dyrbusch. Skelett-Programmierung. Inhalt. Grundlagen Was ist ein Skelett? Ziele von eSkel Daten- vs. Funktionale Parallelität Basiselemente von eSkel Prozesse & Aktivitäten
E N D
eSkel – edinburgh Skeleton library Parallele Programmierung mit Skeletten Mai 2007 Seminararbeit Ingo Dyrbusch
Skelett-Programmierung Inhalt • Grundlagen • Was ist ein Skelett? • Ziele von eSkel • Daten- vs. Funktionale Parallelität • Basiselemente von eSkel • Prozesse & Aktivitäten • Datenmodell • eSkel - Skelette • Task-Farm • Pipeline • Divide & Conquer • Skelett - Topologien • Neuerungen in eSkel 2 • Zusammenfassung und Ausblick
Was ist ein Skelett? Von der unstrukturierten zur strukturierten Programmierung Beispiel „load-balancing“ (Task-Farm): Grafik: [Co04]
eSkel: Konzeption & Ziele Anforderungen • Ansprechend für MPI Programmierer • Schnelle Einarbeitung • Auszahlung in kurzer Zeit Folgerungen • Bibliothek • Basis: C/MPI.
Paralleles Arbeiten Daten- und Funktionale Parallelität Grafik: [Qu04, S. 11]
Basiselemente von eSkel Prozesse und Aktivitäten Aktivitäten Prozesse Grafik: [Qu04, S. 11]
Basiselemente von eSkel Datenmodell • eDM - Atom • Tripel: Zeiger, Länge, Typ (vgl. MPI) • Spread (= Ausdehnung) • eDM - Collection • Bündelung von eDM - Atomen.
eSkel - Skelette Skelett-Familie „Task-Farm“ Grafik vgl: [PK05, S. 3]
eSkel - Skelett: Farm1for1 Ein Ergebnis pro Atom; impliziter Farmer void Farm1for1(int nw, eSkel atom t * worker (eSkel atom t *), int col, void *in, int inlen, int inmul, spread t inspr, MPI Datatype inty, void *out, int outlen, int *outmul, spread t outspr, MPI Datatype outty, int outbuffsz, MPI Comm comm); void Farm1for1 ( int nw, eSkel_atom_t * worker (eSkel_atom_t *), int col, void *in, int inlen, int inmul, spread_t inspr, MPI_Datatype inty, void *out, int outlen, int *outmul, spread_t outspr, MPI_Datatype outty, int outbuffsz, MPI_Comm comm) » Anzahl der Worker Worker-Aktivität (Zeiger auf C-Funktion) Zuordnung von Prozessen zu Aktivitäten Input eDM-Collection & Typinformationen Output eDM-Collection, Typinformationen & Output-Buffer Communicator (Kontext)
eSkel - Skelett: Farm Expliziter Informationsaustausch; impliziter Farmer void Farm ( int nw, void worker (void), int col, void *in, int inlen, int inmul, spread_t inspr, MPI_Datatype inty, void *out, int outlen, int *outmul, spread_t outspr, MPI_Datatype outty, int outbuffsz, MPI_Comm comm) Grafik vgl: [PK05, S. 3]
eSkel - Skelett: SimpleFarm Expliziter Informationsaustausch; expliziter Farmer void SimpleFarm( int nw, void worker (void), int col, void *in, int inlen, int inmul, spread_t inspr, MPI_Datatype inty, void *out, int outlen, int *outmul, spread_t outspr, MPI_Datatype outty, int outbuffsz, MPI_Comm comm)
eSkel - Skelett: Pipeline Expliziter Informationsaustausch void Pipeline ( int ns, void (*stages[])(void), int col, spread_t spr[], MPI_Datatype ty[], void *in, int inlen, int inmul, void *out, int outlen, int *outmul, int outbuffsz, MPI_Comm comm) Grafik vgl: [Tut02, S. 3]
Pipeline & Parallelität Grafik: [Qu04, S. 13]
eSkel - Skelett: Butterfly Ein Divide & Conquer Skelett Für Divide & Conquer Algorithmen mit folgenden Eigenschaften: • Alle Aktivitäten in der Teilungsphase • Anzahl der Prozesse zu Anfang Potenz von 2 und halbiert sich von Level zu Level • Interaktionen zwischen Prozessoren treten paarweise auf – in der Form, dass die Dimensionen eines Hypercubes heruntergebrochen werden.
eSkel - Skelett: Butterfly Grafik: [Co04]
eSkel - Skelett: Butterfly Grafik: [Co04]
eSkel - Skelett: Butterfly Grafik: [Co04]
eSkel - Skelett: Butterfly void Butterfly ( int nd, void level(void), MPI_Datatype ty, MPI_Comm comm)
Skelett - Topologien Grafik vgl: [PK05, S. 3]
Neuerungen in eSkel 2 • Skelette • Pipeline, Deal, (Farm, HaloSwap, Butterfly) Deal: ... Grafik vgl: [BCGH205, S. 2]
Neuerungen in eSkel 2 • Datenmodell • Neu: eDM-Molekül • Interaktionsart explizit: Interaction mode • IMPL, EXPL, DEV • Verschachtelungsart explizit: Data mode • BUF, STR.
Neuerungen in eSkel 2 Molekül, Interaktions- und Verschachtelungsart am Beispiel der Pipeline-Signatur void Pipeline ( int ns, Imode_t imode[], eSkel_molecule_t * (*stages[])(eSkel_molecule_t *), int col, Dmode_t dmode, spread_t spr[], MPI_Datatype ty[], void *in, int inlen, int inmul, void *out, int outlen, int *outmul, int outbuffsz, MPI_Comm comm)
Zusammenfassung • Skelette als sinnvolle Grundlage für die parallele Programmierung • Grundlegende Forschungsergebnisse: Verschachtelungs- & Interaktionsmodi • Einarbeitungszeit ~ 1h.
Ausblick • Effizienz der Implementierungen leidet nachgewiesenermaßen nur wenig • eSkel leider noch im Stadium eines Prototyps • In Planung: • Mehr Demo-Anwendungen • Interne Optimierungen • Ausweitung des Skelett-Angebots • Vereinfachte API (evtl. neue Basis: JAVA-MPI?!).
Quellennachweis [BCGH205] A. Benoit, M. Cole, S. Gilmore, J. Hillston: Using eSkel to implement the multiple baseline stereo application, Proceedings of ParCo, Malaga, 2005. [Co04] M. Cole: Presentation, School of informatics, Edinburgh, 2004. [PK05] M. Poldner, H. Kuchen: On Implementing The Farm Skeleton, Proceedings of HLPP, Werwick, 2005. [Qu04] M. Quinn: Parallel Programming in C with MPI and OpenMP, McGraw-Hill, 2004. [Tut02] M. Cole: The edinburgh Skeleon library - Tutorial introduction, 2002, URL: http://homepages.inf.ed.ac.uk/abenoit1/eSkel/, Abrufdatum: 24. April 2007.
„Spread“ Quelle: [Co04, S. 395]