Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28381 Discussions

[mpi_send, mpi_recv] array alignment

bucaioni__thomas
New Contributor I
1,283 Views

How to send and receive a line or a row in an array? For example, say a table T is dimensions 2x3x4x5, so

 

real allocatable :: T(:,:,:,:)
allocate(T(2,3,4,5))

 

What happens with

 

mpi_send(T(1,1,1,5),24,mpi_real4,iNumProc+1,1,mpi_comm_world,req_ps1(1),info_p)

 

or with

 

mpi_send(T(2,1,1,1),60,mpi_real4,iNumProc+1,1,mpi_comm_world,req_ps1(1),info_p)

 

? (By the way, would you have the link to mpi_send and mpi_recv documentation in Fortran?)

Labels (1)
0 Kudos
1 Solution
Arjen_Markus
Honored Contributor I
1,276 Views

This would not work any different from "ordinary" calls:

call mysub( T(:,1,1,1) ) ! Slice consisting of the first dimension
call mysub( T(1,2,3,:) ) ! Slice from the fourth one

The called routine mysub would get a one-dimensional array slice in both cases, behaving as a one-dimensional array. In the second example the array as received is not contiguous but if the routine cannot handle that (FORTRAN 77 style for instance), then a temporary copy will be made (copyin/copyout). For mpi_send/mpi_recv the same thing will hold.

View solution in original post

2 Replies
Arjen_Markus
Honored Contributor I
1,277 Views

This would not work any different from "ordinary" calls:

call mysub( T(:,1,1,1) ) ! Slice consisting of the first dimension
call mysub( T(1,2,3,:) ) ! Slice from the fourth one

The called routine mysub would get a one-dimensional array slice in both cases, behaving as a one-dimensional array. In the second example the array as received is not contiguous but if the routine cannot handle that (FORTRAN 77 style for instance), then a temporary copy will be made (copyin/copyout). For mpi_send/mpi_recv the same thing will hold.

bucaioni__thomas
New Contributor I
1,266 Views
0 Kudos
Reply