Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen Oswald Haan

Ähnliche Präsentationen


Präsentation zum Thema: "GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen Oswald Haan"—  Präsentation transkript:

1 GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen Oswald Haan

2 Motivation Bisher: Austausch von Nachrichten, bestehend aus n aufeinanderfolgenden Elementen des gleichen vordefinierten Basis-Datentyps: MPI_SEND(sbuf, n, MPI_INTEGER, …) Allgemeiner: Austausch von Nachrichten, bestehend aus beliebig liegende Elemente mit unterschiedlichen Datentypen MPI_xxx(sbuf, n, MPI_yyy, … Parallelrechner-Programmierung mit MPI223. –

3 Datenobjekt aus m Daten, definiert durch Sequenz von Datentypen : typ0, typ1, … Sequenz von Adressabständen in Byte der Daten von der Basisadresse buf : disp0, disp1, … Adresse des i-ten Datums:buf + dispi Typ des i-ten Datums: typi Die Abstände können positiv, null oder negativ sein, Überlappung und Wiederholung sind möglich Die Konstruktion kann rekursiv eingesetzt werden Parallelrechner-Programmierung mit MPI323. – Abgeleiteter Datentyp

4 MPI_TYPE_CREATE_STRUCT(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype) IN count number of blocks (non-negative integer) IN array_of_blocklength number of elements in each block (array of non-negative integer) IN array_of_displacements byte displacement of each block (array of integer) IN array_of_types type of elements in each block (array of handles to datatype objects) OUT newtype new datatype (handle) Parallelrechner-Programmierung mit MPI423. – Abgeleiteter Datentyp Newtype :

5 Beispiel MPI_R8_I4 Datentyp bestehend aus REAL*8 und INTEGER*4 Parallelrechner-Programmierung mit MPI523. – Abgeleiteter Datentyp R8 Größe: 16 Byte, wegen Alignement bl(0) = 1; bl(1) = 1; dp(0) = 0; dp(1) = 8; ty(0) = MPI_DOUBLE_PRECISION, ty(1) = MPI_INTEGER call MPI_TYPE_CREATE_STRUCT( 2, bl, dp, ty, MPI_R8_I4, ierr) Erzeugt abgeleiteten Datentyp MPI_R8_I4 I4

6 MPI_TYPE_CONTIGUOUS(count, oldtype, newtype) IN count replication count (non-negative integer) IN oldtype old datatype (handle) OUTnewtype new datatype (handle) Parallelrechner-Programmierung mit MPI623. – Datentyp CONTIGUOUS Newtype :

7 Beispiel MPI_CONTIGUOUS4, Datentyp bestehend aus aufeinanderfolgenden 4 REAL*8 Zahlen Parallelrechner-Programmierung mit MPI723. – Datentyp CONTIGUOUS R8 Größe: 32 Byte call MPI_TYPE_CONTIGUOUS( 4, MPI_DOUBLE_PRECISION, MPI_CONTIGUOUS4, ierr) Erzeugt abgeleiteten Datentyp MPI_CONTIGUOUS4 R8

8 Abgeleitete Datantypen können in allen Kommunikationsroutinen anstelle der vordefinierten Basis-Typen verwendet werden. Sie müssen vorher durch MPI_TYPE_COMMIT angemeldet und hinterher durch MPI_MPI_TYPE_FREE wieder abgemeldet werden MPI_TYPE_xxx(…, MPI_NEWTYPE,… ) MPI_TYPE_COMMIT( MPI_NEWTYPE ) … Aufrufe von Kommunikationsroutinen mit Datentyp MPI_NEWTYPE … MPI_TYPE_FREE(MPI_NEWTYPE ) Parallelrechner-Programmierung mit MPI 823. – Verwendung Abgeleiteter Datentypen

9 Ersetze in allen Tasks die Elemente v(100),..,v(103) durch die auf tasks id 0 gespeicherten Werte Double precision vec(100) Call MPI_TYPE_CONTIGUOUS( 4, MPI_DOUBLE_PRECISION, MPI_CONTIGUOUS4, ierr ) call MPI_TYPE_COMMIT( MPI_DPVECTOR4, ierr) call MPI_BCST( vec(100), 1, MPI_CONTIGUOUS4, 0, MPI_COMM_WORLD, ierr ) MPI_TYPE_FREE(MPI_CONTIGUOUS4 ) Parallelrechner-Programmierung mit MPI 923. – Verwendung von MPI_CONTIGUOUS4

10 Versende aus einer Matrix mat der Größe 100 x 100 die beim Element (20,30) liegende Submatrix der Größe 4 x 10 double precision mat(100,100) integer MPI_SUBMAT4x10 Call MPI_TYPE_VECTOR( 10, 4, 100,MPI_DOUBLE_PRECISION, MPI_SUBMAT4x10, ierr ) call MPI_TYPE_COMMIT( MPI_SUBMAT4x10, ierr) call MPI_BCST( mat(20,30), 1, MPI_SUBMAT4x10, 0, MPI_COMM_WORLD, ierr ) MPI_TYPE_FREE(MPI_SUBMAT4x10 ) Parallelrechner-Programmierung mit MPI – Verwendung von TYPE_VECTOR (20,30)

11 MPI_TYPE_VECTOR( count, blocklength, stride, oldtype, newtype) IN count number of blocks (non-negative integer) IN blocklength number of elements in each block (non-negative integer) IN stride number of elements between start of each block (integer) IN oldtype old datatype (handle) OUT newtype new datatype (handle) Parallelrechner-Programmierung mit MPI1123. – Datentyp VECTOR Newtype :


Herunterladen ppt "GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen Oswald Haan"

Ähnliche Präsentationen


Google-Anzeigen