[MPIWG Fortran] "small count" variants of RMA functions

Jeff Hammond jeff.science at gmail.com
Thu Nov 25 04:42:32 CST 2021


RMA absolutely did the right thing with MPI_Aint size and displacement
arguments.


In C, it is no problem to pass 32b integers to these arguments when AINT is
64b, because C type promotion rules just work.


In Fortran, I cannot do this, because an integer literal is not compatible
with an AINT argument.  I find it tedious to have to declare a variable
just for this, or to explicitly cast with integer(100,MPI_ADDRESS_KIND).


Since Fortran does polymorphism right and can have subroutine declarations
for both default integer and AINT integer scalar arguments, is there a good
reason not to add the former?


This proposal applies not to just MPI_Win_allocate but any RMA function
that uses AINT scalar arguments.


Thanks,


Jeff


% mpifort y.F90

y.F90:20:60:


   20 |   call MPI_Win_allocate(100, 1, MPI_INFO_NULL, comm, XA, WA)

      |                                                            1

Error: There is no specific subroutine for the generic 'mpi_win_allocate'
at (1)


% cat y.F90

! USE mpi_f08

! MPI_Win_allocate(size, disp_unit, info, comm, baseptr, win, ierror)

!    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR

!    INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size

!    INTEGER, INTENT(IN) :: disp_unit

!    TYPE(MPI_Info), INTENT(IN) :: info

!    TYPE(MPI_Comm), INTENT(IN) :: comm

!    TYPE(C_PTR), INTENT(OUT) :: baseptr

!    TYPE(MPI_Win), INTENT(OUT) :: win

!    INTEGER, OPTIONAL, INTENT(OUT) :: ierror

program main

  use iso_fortran_env

  use mpi_f08

  implicit none

  integer(kind=MPI_ADDRESS_KIND) :: as = 100

  type(c_ptr) :: XA

  type(MPI_Win) :: WA

  TYPE(MPI_Comm) :: comm = MPI_COMM_WORLD

  call MPI_Win_allocate(as, 1, MPI_INFO_NULL, comm, XA, WA)

  call MPI_Win_allocate(100, 1, MPI_INFO_NULL, comm, XA, WA)

end program main

% mpicc y.c && echo SUCCESS

SUCCESS


% cat y.c

#include <mpi.h>

int main(void)

{

  MPI_Aint as = 100;

  int * XA;

  MPI_Win WA;

  MPI_Win_allocate(as, 1, MPI_INFO_NULL, MPI_COMM_WORLD, XA, &WA);

  MPI_Win_allocate(100, 1, MPI_INFO_NULL, MPI_COMM_WORLD, XA, &WA);

}


-- 
Jeff Hammond
jeff.science at gmail.com
http://jeffhammond.github.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20211125/a15b4136/attachment-0001.html>


More information about the mpiwg-fortran mailing list