[MPI3 Fortran] MPI_INIT issues

Malcolm Cohen malcolm at nag-j.co.jp
Wed Feb 20 18:20:49 CST 2013


Bill Long wrote:
>In terms of the interface, I think I would prefer just making MPI_Init 
>effectively generic, with the allow calls:
>
>   integer :: ierror
>   character(:),allocatable :: args(:)
>
>
>   call MPI_Init( )            ! Existing form
>   call MPI_Init (ierror)  ! Existing form including optional status
>
>   call MPI_Init (args)    ! New form
>
>   call MPI_Init (args,ierror)  ! New form with the optional status argument.
>
>Both arguments are INTENT(OUT). The array arg is allocated inside MPI_Init with 
>a length parameter equal to the maximum length of the arguments or the command. 
>The bounds are 0:nargs.  On return arg(0) would be the command text, and 
>arg(i:ubound(arg),1)) would be the arguments.  The number of arguments is 
>size(arg)-1.  [Redundantly, the number of arguments could be returned as 
>another argument.]

This is reasonable but does not allow the program to detect trailing blanks on 
an argument.  It might be argued that this is not important for the MPI 
community, but it is a limitation.

I would tweak the above suggestion to 2 forms:
  MPI_INIT( [ ierror ] )
  MPI_INIT( args [ , ierror ] )
i.e. allow ierror to be an absent optional dummy argument.

If we want to be able to handle trailing blanks, then replacing 
MPI_GET_COMMAND_ARGUMENT with

  SUBROUTINE mpi_getarg(n,arg,ierror)
    INTEGER,INTENT(IN) :: n
    CHARACTER(:),ALLOCATABLE,INTENT(OUT) :: arg
    INTEGER,INTENT(OUT),OPTIONAL :: ierror

would be better than just copying the F2003 interface (which took a *very* 
conservative view - justified at the time, but that was approx a decade ago). 
Avoids all the arguments about length, handles trailing blanks properly, avoids 
the user mucking around with allocating stuff himself, avoids the common 
situation where the programmer decides that (e.g.) 80 characters is long enough 
and doesn't bother with handling the length properly at all - until several 
years later when someone else complains that it doesn't work on his system 
because his filenames are longer.

If that route is taken, I would definitely pick something short like MPI_GETARG 
for the name: we're not copying the standard's interface so no reason whatsoever 
to copy the name.

For that matter if we have a separate "nargs" enquiry rather than Bill's 
suggestion, changing MPI_COMMAND_ARGUMENT_COUNT to MPI_IARGC or similar would be 
reasonable; the standard names for these are really rather excessively long.

Cheers,
-- 
................................Malcolm Cohen, Nihon NAG, Tokyo. 




More information about the mpiwg-fortran mailing list