MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for...
Transcript of MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for...
![Page 1: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/1.jpg)
By: Ehsan Nedaaee Oskoee
MPIMPI
Massage Passing Interface
HPC08HPC08
![Page 2: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/2.jpg)
CPUMPI
3.45
O10M
emory
The von Neumann computer
![Page 3: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/3.jpg)
Inter Connect
The Multicomputeran idealized parallel computer model
![Page 4: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/4.jpg)
P PP P PP P PP P PP
P PP P PP P PP P PP
Other Machine Models
A Distributed-Memory MIMD computer
MIMD: Multiple Instruction Multiple Data
also SIMD: Single Instruction Multiple Data
![Page 5: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/5.jpg)
P
Cache
P
Cache
P
Cache
P
Cache
BUS
Global Memory
Other Machine Models
Shared-Memory Multiprocessor
![Page 6: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/6.jpg)
P P P P P
Fast Ethernet
Other Machine Models
Local Area Network (LAN)
Wide Area Network (WAN)
![Page 7: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/7.jpg)
Methodical Design
Partitioning Domain Decomposition
![Page 8: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/8.jpg)
Methodical Design
Functional Decomposition
Atmospheric Model
Ocean Model
HydrologyModel
Land Surface Model
![Page 9: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/9.jpg)
Methodical Design
Communication
Agglomeration
Communication
8*8 = 64 task
4* 64 = 256 communication
4* 4 = 16 communication
![Page 10: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/10.jpg)
Mapping
Methodical Design
![Page 11: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/11.jpg)
MPI An IntroductionApplications:
Scalable Parallel Computers (SPCs) with distributed memory
Network Of Workstations (NOWs)
Some Goals of MPI:
Allow efficient communicationAllow for implementations that can be used in a heterogeneous
environmentAllow convenient C and Fortran 77 binding for the interface
Provide a reliable communication interfaceDefine an interface not too different from current practice, such
as PVM, NX, etc.
Design an application programming interface
![Page 12: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/12.jpg)
MPI An Introduction
What is Included in MPI
Point-to-point communicationCollective operationsProcess groups
Communication domainsProcess topologies
Environmental Management and inquiry
Profiling interfaceBinding for Fortran 77 and C (Also for C++ and F90 in MPI-2)
I/O functions (in MPI-2)
Versions of MPI
Version 1.0 (was made in June 1994)
Version 1.1 (was made in June 1995)Version 2
![Page 13: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/13.jpg)
MPI An Introduction
Procedure Specification
The call uses but does not update an argument marked INThe call may update an argument marked OUTThe call both uses and updates an argument marked INOUT
Types of MPI Calls
LocalNon-local
BlockingNon-blocking
Opaque Objects
Language Binding
![Page 14: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/14.jpg)
#include <iostream.h>#include <mpi.h>
int main(int argc, char **argv){ MPI_Init(&argc, &argv); cout<<"HI There\n";
MPI_Finalize(); return 0;}
Program main
implicit none include 'mpif.h' integer ierr,rc call MPI_INIT( ierr )
print*,' HI There'
call MPI_FINALIZE(rc) End
main.for main.cpp
Blocking PTP CommunicationThe simplest program
Point-to-point Communication
![Page 15: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/15.jpg)
Compiling a ProgramPoint to Point (PTP) Communication
%more hostfile192.168.189.197 1Naft 1Oil 2
%more hostfileHPCLABws01ws02ws03
Lamboot –v hostfile
mpicc code_name.c –o code_exe_name
mpiCC code_name.cpp –o code_exe_name
mpif77 code_name.for –o code_exe_name
mpif90 code_name.f90 –o code_exe_name
mpirun –v –np 9 code_exe_name
mpirun N code_exe_name
![Page 16: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/16.jpg)
Point to Point (PTP) Communication
A More Complex Program
#include <iostream.h>#include <mpi.h>
int main(int argc, char **argv){ int npes, myrank; MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &npes); MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
cout<<"HI There, I am node "<<myrank<<" and the total worker" <<" which you are using now is: "<<npes<<'\n';
MPI_Finalize(); return 0;}
Adding new functions to getting number of processors which is
running the code and rank of the local processor, as below:
![Page 17: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/17.jpg)
Point to Point (PTP) Communication
A More Complex Program
Adding new functions to getting number of processors which is
running the code and rank of the local processor, as below:
Program size_rank
implicit none include 'mpif.h' integer ierr,npes,myrank call MPI_INIT( ierr )
call MPI_COMM_SIZE( MPI_COMM_WORLD, npes, ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myrank, ierr )
print*,"HI There, I am node ",myrank," and the total", *"number of workers which you are using now is: ",npes
call MPI_FINALIZE(ierr) End
![Page 18: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/18.jpg)
Point to Point (PTP) Communication
Blocking Send OperationMPI_SEND(buf, count, datatype, dest, tag, comm)
IN buf initial address of send buffer
IN count number of entries to send
IN datatype datatype of each entry
IN dest rank of destination
IN tag message tag
IN comm communicator
C versionint MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag,
MPI_Comm, comm)
Fortran version
MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
![Page 19: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/19.jpg)
Point to Point (PTP) Communication
Blocking Receive OperationMPI_RECV(buf, count, datatype, source, tag, comm, status)
OUT buf
IN count
IN datatype
IN source rank of source
IN tag
IN comm
OUT status return status
C version
Fortran version
int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag,
MPI_Comm comm, MPI_Status *status)
MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
<type> BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
![Page 20: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/20.jpg)
Point to Point (PTP) Communication
Data Types
INTEGER
REAL
BOUBLE PRECISION
COMPLEX
LOGICAL
CHARACTER(1)
MPI_INTEGER
MPI_REAL
MPI_DOUBLE_PRECISION
MPI_COMPLEX
MPI_LOGICAL
MPI_CHARACTER
MPI_BYTE
MPI_PACKED
Fortran Data TypeMPI Data Type
![Page 21: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/21.jpg)
Point to Point (PTP) Communication
Data Types
signed char
signed short int
signed int
signed long int
unsigned char
unsigned short int
unsigned int
unsigned long int
float
double
long double
MPI_CHAR
MPI_SHORT
MPI_INT
MPI_LONG
MPI_UNSIGNED_CHAR
MPI_UNSIGNED_SHORT
MPI_UNSIGNED
MPI_UNSIGNED_LONG
MPI_FLOAT
MPI_DOUBLE
MPI_LONG_DOUBLE
MPI_BYTE
MPI_PACKED
C Data TypeMPI Data Type
![Page 22: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/22.jpg)
MPI_GET_PROCESSOR_NAME(name, resultlen)
OUT name A unique specifier for the current physical node
OUT resultlen Length (in printable characters) of the result returned in name
int MPI_Get_processor_name(char* name, int* resultlen)
MPI_GET_PROCESSOR_NAME(NAME, RESULTLEN, IERROR)
CHARACTER*(*) NAME
INTEGER RESULTLEN, IERROR
Point to Point (PTP) Communication
![Page 23: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/23.jpg)
Point to Point (PTP) Communication
Safety
Send( )
Recv( )
Node 0
Recv( )
Send( )
Node 1
Recv( )
Send( )
Node 0
Recv( )
Send( )
Node 1
Send( )
Recv( )
Node 0
Send( )
Recv( )
Node 1Temp.
Buffer
deadlock
ill
![Page 24: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/24.jpg)
Point to Point (PTP) Communication
Orderdest = 1
tag = 4
dest = 1
tag = 1
src = *
tag = *
src = 2
tag = *
src = 2
tag = *
src = *
tag = 1
src = *
tag = 1
dest = 1
tag = 3
dest = 1
tag = 2
dest = 1
tag = 1
Time
Process 0
(Send)
Process 1
(recv)
Process 2
(Send)
src = * :: MPI_ANY_SOURCE tag = * :: MPI_ANY_TAG
![Page 25: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/25.jpg)
Point to Point (PTP) Communication
Order
Send( )
Send( )
Node 0
Recv( )
Send( )
Node 1
Recv( )
Recv( )
Node 2
![Page 26: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/26.jpg)
Point to Point (PTP) Communication
Program Blocking Send & Recd 2
Domain Decomposition
1D 2D
![Page 27: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/27.jpg)
Point to Point (PTP) Communication
Program Bsend_recd_2.cpp
for(j =0; j<= np+1; j++){ for(i=0; i<= np+1; i++)
a[i][j] = myrank*100+10*j+i; } left = myrank - 1; right= myrank + 1; if(myrank == 1 ) left = npes -1 ; if(myrank == (npes-1)) right = 1;if (myrank != 0 ) {
if(myrank%2==0){MPI_Send(&a[1][0],np+2,MPI_INT,left,1,MPI_COMM_WORLD);MPI_Send(&a[np][0],np+2,MPI_INT,right,1,MPI_COMM_WORLD);
MPI_Recv(&a[0][0],np+2,MPI_INT,left,1,MPI_COMM_WORLD,&stat);MPI_Recv(&a[np+1][0],np+2,MPI_INT,right,1,MPI_COMM_WORLD,&stat); }else{MPI_Recv(&a[np+1][0],np+2,MPI_INT,right,1,MPI_COMM_WORLD,&stat);MPI_Recv(&a[0][0],np+2,MPI_INT,left,1,MPI_COMM_WORLD,&stat);
MPI_Send(&a[np][0],np+2,MPI_INT,right,1,MPI_COMM_WORLD);MPI_Send(&a[1][0],np+2,MPI_INT,left,1,MPI_COMM_WORLD);
}}
![Page 28: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/28.jpg)
Point to Point (PTP) Communication
Program Bsend_recd_2.for
IF(myrank.NE.0) THEN IF(MOD(myrank,2).EQ.0)THEN call MPI_SEND(a(0,1),np+2,MPI_INTEGER,left,1, * MPI_COMM_WORLD,ierr) call MPI_SEND(a(0,np),np+2,MPI_INTEGER,right,1, * MPI_COMM_WORLD,ierr) call MPI_RECV(a(0,0),np+2,MPI_INTEGER,left,1, * MPI_COMM_WORLD,stat,ierr) call MPI_RECV(a(0,np+1),np+2,MPI_INTEGER,right,1, * MPI_COMM_WORLD,stat,ierr) ELSE call MPI_RECV(a(0,np+1),np+2,MPI_INTEGER,right,1, * MPI_COMM_WORLD,stat,ierr) call MPI_RECV(a(0,0),np+2,MPI_INTEGER,left,1, * MPI_COMM_WORLD,stat,ierr) call MPI_SEND(a(0,np),np+2,MPI_INTEGER,right,1, * MPI_COMM_WORLD,ierr) call MPI_SEND(a(0,1),np+2,MPI_INTEGER,left,1, * MPI_COMM_WORLD,ierr) ENDIF END IF
![Page 29: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/29.jpg)
Blocking Send Receive Operation
Point to Point (PTP) Communication
MPI_SENDRECV(sendbuf, sendcount, sendtype, dest, sendtag, recvbuf, recvount,
recvtype, source, recvtag, comm, status)
IN sendbuf
IN sendcount
IN sendtype
IN dest
IN sendtag
OUT recvcount
IN recvtype
IN source
IN recvtag
IN comm
OUT status
![Page 30: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/30.jpg)
Point to Point (PTP) Communication
C version
int MPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source,
Int recvtag, MPI_Comm comm, MPI_Status *status)
Fortran version
MPI_RECV(SENDBUF, SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVBUF
RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM, STATUS, IERROR)
<type> SENDBUF(*) RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVCOUNT,
RECVTYPE, SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
![Page 31: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/31.jpg)
Point to Point (PTP) Communication
Blocking Send Receive Replace Operation
MPI_SENDRECV_REPLACE(buf, count, datatype, dest, sendtag, source, recvtag, comm, status)
INOUT buf
IN count
IN datatype
IN dest
IN sendtag
IN source
IN recvtag
IN comm
OUT status
![Page 32: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/32.jpg)
Point to Point (PTP) Communication
int MPI_Sendrecv_replace(void* buf, int count, MPI_Datatype datatype, int dest,
int sendtag, int source, Int recvtag, MPI_Comm comm, MPI_Status *status)
C version
Fortran version
MPI_RECV(BUF, COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG,
COMM, STATUS, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
![Page 33: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/33.jpg)
Point to Point (PTP) Communication
Non Blocking PTP Communication
Non Blocking Send Operation
MPI_ISEND(buf, count, datatype, dest, tag, comm, request)
IN buf initial address of send buffer
IN count number of entries to send
IN datatype datatype of each entry
IN dest rank of destination
IN tag message tag
IN comm communicator
OUT request
![Page 34: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/34.jpg)
Point to Point (PTP) Communication
C version
int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag,
MPI_Comm, comm, MPI_Request *request)
Fortran version
MPI_ISEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
![Page 35: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/35.jpg)
Point to Point (PTP) Communication
Non Blocking Receive Operation
MPI_IRECV(buf, count, datatype, source, tag, comm, request)
OUT buf
IN count
IN datatype
IN source rank of source
IN tag
IN comm
OUT request request handle
![Page 36: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/36.jpg)
Point to Point (PTP) Communication
C version
int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag,
MPI_Comm comm, MPI_Request *request)Fortran version
MPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST,
IERROR)
<type> BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM,
REQUEST, IERROR
![Page 37: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/37.jpg)
Point to Point (PTP) Communication
Completion Operations
MPI_WAIT(request, status)
INOUT request
OUT status
int MPI_Wait(MPI_Request *request, MPI_Status *status)
MPI_WAIT(REQUEST, STATUS, IERROR)
INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR
![Page 38: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/38.jpg)
Point to Point (PTP) Communication
MPI_TEST(request,flag,status)INOUT requestOUT flagOUT status
int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
MPI_TEST(REQUEST, FLAG, STATUS, IERROR)
LOGICAL FLAG
INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR
![Page 39: MPI Massage Passing Interfacephysics.ipm.ac.ir/conferences/hpc08/notes/nedaee.pdfAllow for implementations that can be used in a heterogeneous environment Allow convenient C and Fortran](https://reader030.fdocuments.net/reader030/viewer/2022040811/5e539e4261d19f23e048085d/html5/thumbnails/39.jpg)
Point to Point (PTP) Communication