A quick introduction to MPI (Message Passing Interface...

34
Introduction Point-to-point communication Collective communications Custom communicators A quick introduction to MPI (Message Passing Interface) M1IF - APPD Oguz Kaya Pierre Pradic École Normale Supérieure de Lyon, France 1 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Transcript of A quick introduction to MPI (Message Passing Interface...

Page 1: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

A quick introduction to MPI(Message Passing Interface)

M1IF - APPD

Oguz Kaya Pierre Pradic

École Normale Supérieure de Lyon, France

1 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 2: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Introduction

2 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 3: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

What is MPI ?

Standardized and portable message-passing system.Started in the 90’s, still used today in research and industry.Good theoretical model.Good performances on HPC networks (InfiniBand ...).

3 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 4: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

What is MPI ?

De facto standard for communicationsin HPC applications.

4 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 5: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Programming model

APIs:C and Fortran APIs.C++ API deprecated by MPI-3 (2008).

Environment:Many implementations of the standard(mainly OpenMPI and MPICH)Compiler (wrappers around gcc)Runtime (mpirun)

5 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 6: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Programming model

Compiling:gcc → mpiccg++ → mpic++ / mpicxxgfortran → mpifort

Executing:mpirun -n <nb procs> <executable> <args>

ex : mpirun -n 10 ./a.out

note: mpiexec and orterun are synonyms of mpirunsee man mpirun for more details

6 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 7: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

MPI context

Context limits

All MPI call must be nested in the MPI context delimited byMPI_Init and MPI_Finalize.

1 #in c l u d e <mpi . h>23 i n t main ( i n t argc , char ∗ a rgv [ ] )4 {5 MPI_Init(&argc , &argv ) ;67 // . . .89 MPI_Fina l i ze ( ) ;1011 r e t u r n 0 ;12 }

7 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 8: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

MPI context

Hello World

1 #in c l u d e <s t d i o . h>2 #in c l u d e <mpi . h>34 i n t main ( i n t argc , char ∗ a rgv [ ] )5 {6 i n t rank , s i z e ;78 MPI_Init(&argc , &argv ) ;910 MPI_Comm_rank(MPI_COMM_WORLD, &rank ) ;11 MPI_Comm_size(MPI_COMM_WORLD, &s i z e ) ;1213 p r i n t f ( " He l l o ␣ from␣ proc ␣%d␣/␣%d\n" , rank , s i z e ) ;1415 MPI_Fina l i ze ( ) ;1617 r e t u r n 0 ;18 }8 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 9: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Synchronization

Code:p r i n t f ( "[%d ] ␣ s t ep ␣1\n" , rank ) ;MPI_Barr ier (MPI_COMM_WORLD) ;p r i n t f ( "[%d ] ␣ s t ep ␣2\n" , rank ) ;

Output:[ 0 ] s t e p 1[ 1 ] s t e p 1[ 2 ] s t e p 1[ 3 ] s t e p 1[ 3 ] s t e p 2[ 0 ] s t e p 2[ 2 ] s t e p 2[ 1 ] s t e p 2

9 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 10: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Point-to-point communication

10 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 11: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Send and Receive

Sending data:i n t MPI_Send( const vo i d ∗ data ,

i n t count ,MPI_Datatype datatype ,i n t d e s t i n a t i o n ,i n t tag ,MPI_Comm communicator ) ;

Receiving data:i n t MPI_Recv ( vo id ∗ data ,

i n t count ,MPI_Datatype datatype ,i n t source ,i n t tag ,MPI_Comm communicator ,MPI_Status∗ s t a t u s ) ;

11 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 12: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Example

1 i n t rank , s i z e ;2 MPI_Comm_rank(MPI_COMM_WORLD, &rank ) ;3 MPI_Comm_size(MPI_COMM_WORLD, &s i z e ) ;45 i n t number ;6 sw i t ch ( rank )7 {8 case 0 :9 number = −1;10 MPI_Send(&number , 1 , MPI_INT , 1 , 0 , MPI_COMM_WORLD) ;11 break ;12 case 1 :13 MPI_Recv(&number , 1 , MPI_INT , 0 , 0 , MPI_COMM_WORLD,14 MPI_STATUS_IGNORE) ;15 p r i n t f ( " r e c e i v e d ␣number : ␣%d\n" , number ) ;16 break ;17 }12 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 13: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Asynchronious communications

Sending data:i n t MPI_Isend ( const vo i d ∗ data ,

i n t count ,MPI_Datatype datatype ,i n t d e s t i n a t i o n ,i n t tag ,MPI_Comm communicator ,MPI_Request∗ r e q u e s t ) ;

Receiving data:i n t MPI_Irecv ( vo id ∗ data ,

i n t count ,MPI_Datatype datatype ,i n t source ,i n t tag ,MPI_Comm communicator ,MPI_Request∗ r e q u e s t ) ;

13 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 14: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Other functions

MPI_Probe, MPI_IprobeMPI_Test, MPI_Testany, MPI_TestallMPI_CancelMPI_Wtime, MPI_Wtick

14 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 15: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Simple datatypes

MPI_SHORT short intMPI_INT intMPI_LONG long intMPI_LONG_LONG long long intMPI_UNSIGNED_CHAR unsigned charMPI_UNSIGNED_SHORT unsigned short intMPI_UNSIGNED unsigned intMPI_UNSIGNED_LONG unsigned long intMPI_UNSIGNED_LONG_LONG unsigned long long intMPI_FLOAT floatMPI_DOUBLE doubleMPI_LONG_DOUBLE long doubleMPI_BYTE char

15 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 16: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Composed datatypes

Composed structure:Structures;Array.

Possibilities are almost limitless ...

... but sometimes difficult to setup.

16 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 17: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Collective communications

17 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 18: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Broadcast

18 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 19: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Broadcast

i n t MPI_Bcast ( vo id ∗ data ,i n t count ,MPI_Datatype datatype ,i n t root ,MPI_Comm communicator ) ;

19 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 20: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Reduce

20 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 21: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Reduce

i n t MPI_Reduce ( const vo i d ∗ sendbuf ,vo id ∗ r e cvbu f ,i n t count ,MPI_Datatype datatype ,MPI_Op ope ra to r ,i n t root ,MPI_Comm communicator ) ;

21 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 22: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Scatter

22 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 23: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Scatter

i n t MPI_Scatter ( const vo i d ∗ sendbuf ,i n t sendcount ,MPI_Datatype sendtype ,vo id ∗ r e cvbu f ,i n t r ecvcount ,MPI_Datatype r e cv t ype ,i n t root ,MPI_Comm communicator ) ;

23 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 24: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Gather

24 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 25: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

One-to-all communication

Gather

i n t MPI_Gather ( const vo i d ∗ sendbuf ,i n t sendcount ,MPI_Datatype sendtype ,vo id ∗ r e cvbu f ,i n t r ecvcount ,MPI_Datatype r e cv t ype ,i n t root ,MPI_Comm communicator ) ;

25 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 26: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

Allreduce

26 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 27: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

AllReduce

i n t MPI_Allreduce ( const vo id ∗ sendbuf ,vo id ∗ r e cvbu f ,i n t count ,MPI_Datatype datatype ,MPI_Op ope ra to r ,MPI_Comm communicator ) ;

27 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 28: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

Allgather

28 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 29: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

AllGather

i n t MPI_Al lgather ( const vo id ∗ sendbuf ,i n t sendcount ,MPI_Datatype sendtype ,vo id ∗ r e cvbu f ,i n t r ecvcount ,MPI_Datatype r e cv t ype ,MPI_Comm communicator ) ;

29 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 30: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

Alltoall

30 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 31: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

All-to-all communication

Alltoall

i n t MPI_Al l t oa l l ( const vo i d ∗ sendbuf ,i n t sendcount ,MPI_Datatype sendtype ,vo id ∗ r e cvbu f ,i n t r ecvcount ,MPI_Datatype r e cv t ype ,MPI_Comm communicator ) ;

31 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 32: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Custom communicators

32 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 33: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

MPI_COMM_WORLD can be split into smaller,more appropriate communicators.

i n t MPI_Comm_split (MPI_Comm communicator ,i n t co l o r ,i n t key ,MPI_Comm∗ newcommunicator ) ;

33 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI

Page 34: A quick introduction to MPI (Message Passing Interface ...kayaogz.github.io/.../cours/MPI-overview.pdf1/34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI. Introduction Point-to-point

Introduction Point-to-point communication Collective communications Custom communicators

Example

1 . . .2 i n t rank , s i z e ;3 MPI_Init(&argc , &argv ) ;4 MPI_Comm_rank(MPI_COMM_WORLD, &rank ) ;5 MPI_Comm_size(MPI_COMM_WORLD, &s i z e ) ;67 i n t hrank , v rank ;8 i n t h s i z e , v s i z e ;9 MPI_Comm hcomm, vcomm ;10 MPI_Comm_split (MPI_COMM_WORLD, rank%p , rank , &vcomm ) ;11 MPI_Comm_split (MPI_COMM_WORLD, rank /p , rank , &hcomm ) ;12 MPI_Comm_rank(hcomm, &hrank ) ;13 MPI_Comm_size(hcomm, &h s i z e ) ;14 MPI_Comm_rank(vcomm , &vrank ) ;15 MPI_Comm_size(vcomm , &v s i z e ) ;16 . . .

34 / 34 Oguz Kaya, Pierre Pradic M1IF - Presentation MPI