1 / 11

GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen

GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen. Oswald Haan ohaan@gwdg.de. Motivation. Bisher: Austausch von Nachrichten, bestehend aus n aufeinanderfolgenden Elementen des gleichen vordefinierten Basis-Datentyps: MPI_SEND( sbuf , n, MPI_INTEGER, …)

tayten
Download Presentation

GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GWDG – KursParallelrechner-Programmierung mit MPIMPIAllgemeine Datentypen Oswald Haan ohaan@gwdg.de

  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 MPI

  3. Abgeleiteter Datentyp 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 MPI

  4. Abgeleiteter Datentyp 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 datatypeobjects) OUT newtype new datatype (handle) Newtype : Parallelrechner-Programmierung mit MPI

  5. Abgeleiteter Datentyp Beispiel MPI_R8_I4 Datentyp bestehend aus REAL*8 und INTEGER*4 Größe: 16 Byte, wegen Alignement I4 R8 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 Parallelrechner-Programmierung mit MPI

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

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

  8. Verwendung Abgeleiteter Datentypen AbgeleiteteDatantypenkönnen in allenKommunikationsroutinenanstelle der vordefinierten Basis-Typenverwendetwerden. Siemüssenvorherdurch MPI_TYPE_COMMIT angemeldet und hinterherdurch MPI_MPI_TYPE_FREE wiederabgemeldetwerden 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

  9. Verwendung von MPI_CONTIGUOUS4 Ersetze in allen Tasks die Elemente v(100),..,v(103) durch die auf tasks id 0 gespeichertenWerte Double precisionvec(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

  10. Verwendung von TYPE_VECTOR Versendeauseiner Matrix mat der Größe 100 x 100 die beim Element (20,30) liegendeSubmatrix der Größe 4 x 10 double precisionmat(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 ) (20,30) Parallelrechner-Programmierung mit MPI

  11. Datentyp VECTOR MPI_TYPE_VECTOR( count, blocklength, stride, oldtype, newtype) IN countnumberofblocks (non-negative integer) IN blocklengthnumberofelements in each block (non-negative integer) IN stridenumberofelementsbetweenstartofeach block (integer) IN oldtypeolddatatype (handle) OUT newtypenewdatatype (handle) Newtype : Parallelrechner-Programmierung mit MPI

More Related