Transcript
Page 1: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

MPI-IOHochleistungs-Ein-/Ausgabe

Michael Kuhn

Wissenscha�liches RechnenFachbereich Informatik

Universität Hamburg

2016-05-13

Michael Kuhn MPI-IO 1 / 49

Page 2: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

1 MPI-IOOrientierungEinführungKonzepte und FunktionalitätLeistungsbetrachtungenSemantikZusammenfassung

2 Quellen

Michael Kuhn MPI-IO 2 / 49

Page 3: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Orientierung

E/A-Schichten

Anwendung

Bibliotheken

Speichergerät/-verbund

Paralleles verteiltes Dateisystem

Dateisystem

Leis

tung

sana

lyse

Opt

imie

rung

en

Date

nred

uktio

n

Abbildung: E/A-Schichten

Michael Kuhn MPI-IO 3 / 49

Page 4: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

Überblick

Parallele Anwendungen benötigen häufig Unterstützung fürparallele Ein-/Ausgabe

Serielle E/A ist ein FlaschenhalsNormalerweise kann kein Prozess alle Daten halten

Häufige SzenarienLesen der Eingabedaten

Startbedingungen, größere DatensätzeSchreiben von Ausgabedaten

Ergebnisdaten, Checkpoints

Michael Kuhn MPI-IO 4 / 49

Page 5: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

• Serielle E/A führt dazu, dass alle Daten zu einem ausgewähltenProzess gesendet werden müssen, der diese dann in das Dateisystemschreibt. Das Problem verschlimmert sich durch die immer weitersteigenden Prozesszahlen.

Page 6: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

Überblick. . .

MPI-IO bezeichnet den E/A-Teil von MPIWurde mit MPI 2.0 eingeführt (1997)Anwendungen benutzen üblicherweise sowieso MPI

Ist eine sogenannte MiddlewarePopulärste Implementierung: ROMIO

Wird als Teil von MPICH vertriebenUnter anderem in OpenMPI und MPICH-DerivatenNutzt das Abstract-Device Interface for I/O (ADIO)

Alternative Implementierung: OMPIO in OpenMPI

Michael Kuhn MPI-IO 5 / 49

Page 7: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

Überblick. . .

MPI-IO stellt element-orientierten Zugri� bereitIm Gegensatz zum POSIX-Bytestrom

Schnittstelle ist analog zum Nachrichtenaustausch definiertLesen und Schreiben wie Empfangen und SendenKollektive und nicht-blockierende OperationenAbgeleitete Datentypen

MPI-IO wird üblicherweise nicht direkt in Anwendungen genutztIndirekt durch höhere Schichten

Michael Kuhn MPI-IO 6 / 49

Page 8: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

Ausblick

MPI-IO bildet die Basis vieler E/A-BibliothekenHDF und NetCDF nutzen MPI-IO für parallelen Zugri� aufgemeinsame DateienADIOS unterstützt MPI-IO

Gibt höheren Schichten Zugri� auf e�iziente Algorithmen undImplementierungen für parallele E/A

Bibliotheken können sich um ihre eigentliche Aufgabe kümmern

Michael Kuhn MPI-IO 7 / 49

Page 9: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

• Über die POSIX-Schnittstelle kann mit HDF/NetCDF nur seriellerZugri� realisiert werden.

• ADIOS erlaubt auch mit dem POSIX-Backend parallelen Zugri�, nutztdann aber keine gemeinsame Datei.

Page 10: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

ROMIO

MPI-IO abstrahiert vom darunter liegenden DateisystemStellt MPI-IO-Syntax und -Semantik bereit

Unterstützte ArchitekturenIBM SP, Intel Paragon, HP Exemplar, SGI Origin2000, Cray T3E,NEC SX-4 etc.

Unterstützte DateisystemeIBM PIOFS, Intel PFS, HP/Convex HFS, SGI XFS, NEC SFS, PVFS,Lustre, NFS, NTFS, Unix-Dateisysteme (UFS) etc.

Michael Kuhn MPI-IO 8 / 49

Page 11: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Einführung

ROMIO. . .

Dateisystem-spezifische Module in ADIOPortabilität und höchstmögliche Leistung

Z.B. durch Zugri� auf DateiverteilungsinformationenUnterschiedliche Syntax und Semantik

Generische Optimierungen für parallele E/AInsbesondere bei vielen Prozessen notwendigSpäter: Data Sieving und Two-Phase I/O

Michael Kuhn MPI-IO 9 / 49

Page 12: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen

Datei (file)Kollektives Ö�nen durch Prozesse im KommunikatorSequentieller oder wahlfreier Zugri�Sammlung typisierter Daten (Elemente)

Dateizeiger (file pointer)Zeiger innerhalb der DateiProzesse können individuelle oder gemeinsame Dateizeigerhaben

Michael Kuhn MPI-IO 10 / 49

Page 13: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen. . .

Elementarer Typ (etype)Einheit mit der auf die Datei zugegri�en wirdKann auch ein abgeleiteter Datentyp sein

Versatz (displacement)Position an der die Dateisicht beginntByte-Position relativ zum Anfang der DateiZ.B. für Header

Michael Kuhn MPI-IO 11 / 49

Page 14: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen. . .

Dateityp (file type)Schablone für den Aufbau der DateiBesteht aus elementaren Typen und LöchernWiederholt sich regelmäßig

Dateityp

Elementarer Typ

Loch

…Aufbau

Abbildung: Dateityp

Michael Kuhn MPI-IO 12 / 49

Page 15: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen. . .

Dateisicht (file view)Prozessbezogene Sicht auf die DateiFestgelegt durch Versatz, elementaren Typ und Dateityp

Dateityp (Rang 0)

…Aufbau

Dateityp (Rang 1)

Dateityp (Rang 2)

Abbildung: Dateisicht

Michael Kuhn MPI-IO 13 / 49

Page 16: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen. . .

Versatz (o�set)Position in der DateiAusgedrückt in Anzahl elementarer TypenRelativ zur aktuellen Dateisicht

Dateigröße (file size)Größe der Datei in Bytes

Michael Kuhn MPI-IO 14 / 49

Page 17: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Grundlagen. . .

Datei-Handle (file handle)Analog zum DateideskriptorWird für fast alle Operationen benötigt

Hinweise (hints)Zusätzliche Informationen für die ImplementierungÜblicherweise zur Leistungssteigerung

Michael Kuhn MPI-IO 15 / 49

Page 18: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Funktionen

Ö�nen einer Dateiint MPI_File_open (MPI_Comm comm, char*filename, int amode, MPI_Info info, MPI_File*fh)Liefert Datei-Handle zurück

Individuellen Dateizeiger setzenint MPI_File_seek (MPI_File fh, MPI_Offsetoffset, int whence)Analog zu lseek

Michael Kuhn MPI-IO 16 / 49

Page 19: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Funktionen. . .

Lesen und Schreiben von Datenint MPI_File_read (MPI_File fh, void* buf,int count, MPI_Datatype datatype,MPI_Status* status)int MPI_File_write (MPI_File fh, void* buf,int count, MPI_Datatype datatype,MPI_Status* status)Analog zu read und write

Schließen der Dateiint MPI_File_close (MPI_File* fh)

Michael Kuhn MPI-IO 17 / 49

Page 20: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Code-Beispiel

1 MPI_File fh;2 MPI_Offset size;3 MPI_Status status;4 char data[42];5 int nbytes;67 memset(data, 23, sizeof(data));8 MPI_File_open(MPI_COMM_WORLD, "/tmp/mpi-io",

↪→ MPI_MODE_RDWR | MPI_MODE_CREATE |↪→ MPI_MODE_DELETE_ON_CLOSE, MPI_INFO_NULL, &fh);

9 MPI_File_write_at(fh, 0, data, sizeof(data), MPI_BYTE,↪→ &status);

10 MPI_Get_count(&status, MPI_BYTE, &nbytes);11 MPI_File_get_size(fh, &size);12 printf("File size is %" PRIdMAX " bytes.\n",

↪→ (uintmax_t)size);13 MPI_File_close(&fh);

Michael Kuhn MPI-IO 18 / 49

Page 21: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

MPI_File_open

MPI_File_open ist eine kollektive OperationAlle Prozesse müssen dieselbe Datei ö�nenProzess-lokale Dateien durch MPI_COMM_SELF

Dateiname ist implementierungsabhängigÜblicherweise kann ADIO-Modul angegeben werdenZ.B. pvfs2:/pvfs/path/to/file

Initiale Dateisicht ist ein Bytestrom

Michael Kuhn MPI-IO 19 / 49

Page 22: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

MPI_File_open. . .

MPI_File_open bietet mehrere Zugri�smodi (1/2)MPI_MODE_RDONLY: Nur lesenMPI_MODE_RDWR: Lesen und schreibenMPI_MODE_WRONLY: Nur schreibenMPI_MODE_CREATE: Datei erstellen, wenn sie noch nichtexistiertMPI_MODE_EXCL: Fehler zurückgeben, wenn Datei erstelltwerden soll, die bereits existiert

Michael Kuhn MPI-IO 20 / 49

Page 23: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

MPI_File_open. . .

MPI_File_open bietet mehrere Zugri�smodi (2/2)MPI_MODE_DELETE_ON_CLOSE: Datei beim SchließenlöschenMPI_MODE_UNIQUE_OPEN: Datei wird nicht parallelwoanders geö�netMPI_MODE_SEQUENTIAL: Datei wird nur sequentiellzugegri�enMPI_MODE_APPEND: Alle Dateizeiger initial ans Ende der Dateisetzen

Modi können teilweise auch kombiniert werden

Michael Kuhn MPI-IO 21 / 49

Page 24: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Positionierung

Es gibt drei Arten der PositionierungIndividuelle DateizeigerGemeinsame DateizeigerExpliziter Versatz

Individuelle DateizeigerProzess-lokaler Dateizeiger wird bei jedem Aufruf verändertAnalog zu read und write

Michael Kuhn MPI-IO 22 / 49

Page 25: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Positionierung. . .

Gemeinsame DateizeigerGlobaler Dateizeiger wird bei jedem Aufruf verändertSyntax: MPI_..._shared und MPI_..._ordered

Expliziter VersatzVersatz wird bei jedem Aufruf angegebenSyntax: MPI_..._atAnalog zu pread und pwrite

Michael Kuhn MPI-IO 23 / 49

Page 26: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

MPI_File_seek und MPI_File_seek_shared

MPI_File_seek und MPI_File_seek_shared erlaubendas Setzen des DateizeigersBeide Funktionen unterstützten drei Positionierungsmodi

MPI_SEEK_SET: Dateizeiger wird auf Versatz gesetztMPI_SEEK_CUR: Dateizeiger wird um Versatz erhöhtMPI_SEEK_END: Dateizeiger wird auf das Ende der Datei plusVersatz gesetzt

Der Versatz kann auch negativ sein

Michael Kuhn MPI-IO 24 / 49

Page 27: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Metadatenoperationen

MPI-IO bietet wenige explizite MetadatenoperationenKeine VerzeichnisoperationenErstellen nur über MPI_File_open

Vergrößern und Verkleinern einer DateiMPI_File_set_size und MPI_File_preallocate

Kein Äquivalent zu statNur MPI_File_get_size

Michael Kuhn MPI-IO 25 / 49

Page 28: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Nicht-zusammenhängende Datentypen

MPI-IO unterstützt nicht-zusammenhängende DatentypenZugri� mit einem einzigen E/A-AufrufKomfortfunktion für EntwicklerErlaubt aber auch zusätzliche Optimierungen

Grundsätzlich auch manuell umsetzbarÄhnlich zu readv, writev, aio_read, aio_write undlio_listio

Michael Kuhn MPI-IO 26 / 49

Page 29: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

• Mit readv und writev können nicht alle Fälle abgedeckt werden,da immer ein zusammenhängender Bereich in der Datei gelesen bzw.geschrieben wird.

Page 30: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Nicht-zusammenhängende Datentypen. . .

Vektordatentyp unterstützt eine Schrittweiteint MPI_Type_vector (int count, intblocklength, int stride, MPI_Datatypeoldtype, MPI_Datatype* newtype)

Beispiel: Diagonale einer 3x3-Matrix

1 MPI_Type_vector(3, 1, 4, MPI_DOUBLE, &newtype);2 MPI_Type_commit(&newtype);3 MPI_File_write(fh, buffer, 1, newtype, &status);

Listing 1: Nicht-zusammenhängender Vektordatentyp

Michael Kuhn MPI-IO 27 / 49

Page 31: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Nicht-zusammenhängende Datentypen. . .

1 MPI_Type_vector(3, 1, 4, MPI_DOUBLE, &newtype);

1 2 34 5 67 8 9

Abbildung: Nicht-zusammenhängender Vektordatentyp

Michael Kuhn MPI-IO 28 / 49

Page 32: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Kollektive Operationen

MPI-IO unterstützt kollektive E/AAlle Prozesse führen ihre Zugri�e gleichzeitig durchSyntax: MPI_..._allZusätzliche Informationen für eventuelle Optimierungen

Beispiel: Kleine nicht-zusammenhängende Zugri�eJeder Prozess grei� nur auf einen kleinen Bereich zuAlle Prozesse zusammen aber auf die gesamte Datei

Michael Kuhn MPI-IO 29 / 49

Page 33: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Nicht-blockierende Operationen

MPI-IO unterstützt nicht-blockierende E/A-OperationenÜberlappung von E/A und BerechnungAnalog zu nicht-blockierendem NachrichtenaustauschSyntax: MPI_..._i...

Statusüberprüfung mit den Standard-MPI-FunktionenZ.B. MPI_Wait und MPI_Test

Michael Kuhn MPI-IO 30 / 49

Page 34: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Nicht-blockierende Operationen. . .

Split Collectives für nicht-blockierende kollektive E/ASyntax: MPI_..._begin und MPI_..._endAu�eilung dient der Optimierung und besserenImplementierbarkeit

Einige EinschränkungenPro Prozess und Datei nur ein laufender AufrufNicht mit normalen kollektiven Operationen kombinierbarWährenddessen keine anderen kollektiven E/A-OperationenerlaubtDürfen mit Hilfe der blockierenden Operationen implementiertwerden

Michael Kuhn MPI-IO 31 / 49

Page 35: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Gemeinsame Dateizeiger

Gemeinsame Dateizeiger für koordinierten Zugri�Alle Prozesse nutzen denselben DateizeigerZugri�e ändern den Dateizeiger für alle anderen Prozesse

Problematisch e�izient zu implementierenBenötigt irgendeine Form von SperrenSchwierig zu skalieren bei sehr vielen ProzessenNicht von jedem Dateisystem unterstützt

Michael Kuhn MPI-IO 32 / 49

Page 36: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

• OrangeFS unterstützt beispielsweise keine gemeinsamen Dateizeiger,da dafür Sperren benötigt würden.

Page 37: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Gemeinsame Dateizeiger. . .

MPI_..._shared für nicht-kollektive OperationenMPI_..._ordered für kollektive Operationen

Wird entsprechend des Ranges ausgeführtMögliche Anwendungsfälle

Gemeinsame ProtokolldateiDaten in Berechnungsreihenfolge in Datei schreiben

Michael Kuhn MPI-IO 33 / 49

Page 38: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Hinweise

Hinweise geben der Implementierung zusätzlicheInformationen

Üblicherweise für OptimierungenBeispiele

Anzahl der Geräte über die eine Datei verteilt werden sollGröße der zu verteilenden BlöckeInformationen über das Datenlayout

Hinweise müssen nicht angegeben werdenKönnen aber auch beliebig durch die Implementierung ignoriertwerden

Michael Kuhn MPI-IO 34 / 49

Page 39: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Konzepte und Funktionalität

Datenrepräsentationen

MPI-IO unterstützt mehrere DatenrepräsentationenPortabilität der Daten ein wichtiger Faktor

Drei mögliche Repräsentationennative: Keine Umwandlung der Daten, Speicherung wie imHauptspeicherinternal: Portabel zwischen allen Plattformen, die dieseImplementierung unterstütztexternal32: Portabel zwischen allen Implementierungen undPlattformen, möglicher Präzisions- und Leistungsverlust

Zusätzlich benutzerdefinierte Repräsentationen

Michael Kuhn MPI-IO 35 / 49

Page 40: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Allgemeines

Verwendete Operationen sind maßgeblich für die erreichbareLeistung verantwortlich

Zusammenhängend vs. nicht-zusammenhängendIndividuell vs. kollektiv

Beispiel3x3-Matrix wird von drei Prozessen gelesenJeder Prozess ist für eine Spalte zuständig

Michael Kuhn MPI-IO 36 / 49

Page 41: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Level 0: Individuelle zusammenhängende Zugri�e

1 for (i = 0; i < 3; i++)2 {3 MPI_File_seek(fh, ...);4 MPI_File_read(fh, ..., 1, MPI_DOUBLE, ...);5 }

Listing 2: Level 0

Jeder Prozess führt individuelle Zugri�e ausPro Iteration wird eine Zeile gelesen, allerdings in zufälligerReihenfolge

In jeder Iteration wird ein zusammenhängender Bereich gelesen

Michael Kuhn MPI-IO 37 / 49

Page 42: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Level 1: Kollektive zusammenhängende Zugri�e

1 for (i = 0; i < 3; i++)2 {3 MPI_File_seek(fh, ...);4 MPI_File_read_all(fh, ..., 1, MPI_DOUBLE, ...);5 }

Listing 3: Level 1

Prozesse führen koordiniert kollektive Zugri�e ausPro Iteration wird eine Zeile gelesen

In jeder Iteration wird ein zusammenhängender Bereich gelesen

Michael Kuhn MPI-IO 38 / 49

Page 43: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Level 2: Individuelle nicht-zusammenhängende Zugri�e

1 MPI_Type_vector(3, 1, 3, MPI_DOUBLE, &newtype);2 MPI_Type_commit(&newtype);34 MPI_File_seek(fh, ...);5 MPI_File_read(fh, ..., 1, newtype, ...);

Listing 4: Level 2

Jeder Prozess liest seine nicht-zusammenhängende SpalteJeder Prozess führt individuelle Zugri�e aus

Es werden alle Spalten gelesen, allerdings in zufälligerReihenfolge

Michael Kuhn MPI-IO 39 / 49

Page 44: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Level 3: Kollektive nicht-zusammenhängende Zugri�e

1 MPI_Type_vector(3, 1, 3, MPI_DOUBLE, &newtype);2 MPI_Type_commit(&newtype);34 MPI_File_seek(fh, ...);5 MPI_File_read_all(fh, ..., 1, newtype, ...);

Listing 5: Level 3

Jeder Prozess liest seine nicht-zusammenhängende SpalteProzesse führen koordiniert kollektive Zugri�e aus

Es werden alle Spalten gelesen

Michael Kuhn MPI-IO 40 / 49

Page 45: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Leistungsbetrachtungen

Übersicht

Prozesse P0 P1 P2Datei-

inhalt

Level 3

Level 2

Level 1

Level 0

Abbildung: Visualisierung der unterschiedlichen Zugri�slevel [1]Michael Kuhn MPI-IO 41 / 49

Page 46: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Semantik

POSIX

POSIX hat strenge KonsistenzanforderungenÄnderungen müssen nach write global sichtbar seinE/A soll atomar geschehen

E�iziente parallele E/A wird dadurch erschwertDaten können nicht beliebig im Cache gehalten werdenAtomarität erfordert Sperren

Michael Kuhn MPI-IO 42 / 49

Page 47: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Semantik

Übersicht

MPI-IO hat weniger strikte Anforderungen als POSIXÄnderungen sind nur im aktuellen Prozess sichtbarNicht-überlappende oder nicht-gleichzeitige Operationenwerden korrekt gehandhabt

Erlaubt bessere SkalierbarkeitÄnderungen müssen nicht sofort global sichtbar seinDadurch weniger Aufwand durch Sperren

Michael Kuhn MPI-IO 43 / 49

Page 48: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Semantik

Manuelle Synchronisation

1 MPI_File_sync(fh);2 MPI_Barrier(MPI_COMM_WORLD);3 MPI_File_sync(fh);

Listing 6: Sync-Barrier-Sync-Konstrukt

1 Sync transferiert Änderungen ins Dateisystem2 Barrier synchronisiert alle Prozesse3 Sync macht Änderungen im Dateisystem sichtbar

Michael Kuhn MPI-IO 44 / 49

Page 49: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Semantik

Atomic-Modus

Atomic-Modus stellt strikere Garantien bereitMPI_File_set_atomicity

Alle Änderungen sind sofort für alle Prozesse im Kommunikatorsichtbar

Ähnlich der POSIX-SemantikWird nicht überall unterstützt

ROMIO unterstützt den Modus, OMPIO nichtErfordert üblicherweise Sperren

Daher nicht in allen Dateisystemen verfügbarZ.B. keine Unterstützung in OrangeFS

Michael Kuhn MPI-IO 45 / 49

Page 50: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

• Der Atomic-Modus ist immer noch weniger strikt als POSIX, daÄnderungen nur für Prozesse im gleichen Kommunikator sichtbar seinmüssen.

Page 51: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Zusammenfassung

Zusammenfassung

Positionierung Blockierung Individuell Kollektiv

ExpliziterVersatz

Blockierend read_at read_at_allwrite_at write_at_all

Nicht-blockierend& Split Collective

iread_at read_at_all_beginread_at_all_end

iwrite_at write_at_all_beginwrite_at_all_end

IndividuelleDateizeiger

Blockierend read read_allwrite write_all

Nicht-blockierend& Split Collective

iread read_all_beginread_all_end

iwrite write_all_beginwrite_all_end

GemeinsameDateizeiger

Blockierend read_shared read_orderedwrite_shared write_ordered

Nicht-blockierend& Split Collective

iread_shared read_ordered_beginread_ordered_end

iwrite_shared write_ordered_beginwrite_ordered_end

Michael Kuhn MPI-IO 46 / 49

Page 52: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Zusammenfassung

Zusammenfassung. . .

MPI-IO analog zu MPI-Kommunikation definiertU.a. mit Unterstützung für abgeleitete Datentypen

Dateien sind eine Abfolge von elementaren DatentypenJeder Prozess hat seine eigene DateisichtMehrere Repräsentationen für Portabilität

Die Positionierung ist explizit, mit individuellen Dateizeigernund mit gemeinsamen Dateizeigern möglichNicht-zusammenhängende und kollektive Operationen könnendie E�izienz erhöhen

Michael Kuhn MPI-IO 47 / 49

Page 53: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

1 MPI-IOOrientierungEinführungKonzepte und FunktionalitätLeistungsbetrachtungenSemantikZusammenfassung

2 Quellen

Michael Kuhn MPI-IO 48 / 49

Page 54: MPI-IO - Hochleistungs-Ein-/Ausgabe · MPI-IO Quellen MPI-IO Hochleistungs-Ein-/Ausgabe MichaelKuhn Wissenscha˝lichesRechnen FachbereichInformatik UniversitätHamburg 2016-05-13

MPI-IO Quellen

Quellen I

[1] Rajeev Thakur, William Gropp, and Ewing Lusk. OptimizingNoncontiguous Accesses in MPI-IO. Parallel Computing,28(1):83–105, January 2002.

Michael Kuhn MPI-IO 49 / 49


Recommended