Paul -- Most excellent; thanks for the diagnosis and the reproducer. You are absolutely correct that we have a bug in the F90 interface in MPI_COMM_SET_ERRHANDLER and MPI_WIN_SET_ERRHANDLER. The INTENT for the communicator parameter was mistakenly set to INOUT instead of just IN, meaning that a constant parameter like MPI_COMM_WORLD is prohibited from being passed.
A workaround is to assign MPI_COMM_WORLD to temporary integer variable and use that instead. The fix for OMPI is very easy, but I need to double check with some fortran experts tomorrow about the ABI implications for libmpif90.so. On May 3, 2010, at 10:44 AM, Paul Kapinos wrote: > Hello OpenMPI / Sun/Oracle MPI folks, > > we believe that the OpenMPI and SunMPI (Cluster Tools) has an error in > the Fortran-90 (f90) bindings of the MPI_Comm_set_errhandler routine. > > Tested MPI versions: OpenMPI/1.3.3 and Cluster Tools 8.2.1 > > Consider the attached example. This file uses the "USE MPI" to bind the > MPI routines f90-style. The f77-style "include 'mpif.h'" is commented out. > > If using Intel MPI the attached example is running error-free (with both > bindings). > > If trying to compiler with OpenMPI and using f90 bindings, any compilers > tested (Intel/11.1, Sun Studio/12.1, gcc/4.1) says the code cannot be > build because of trying to use a constant (MPI_COMM_WORLD) as input. > > For example, the output of the Intel compiler: > ----------------------------------------------------------------------------- > MPI_Comm_set_errhandler.f90(12): error #6638: An actual argument is an > expression or constant; this is not valid since the associated dummy > argument has the explicit INTENT(OUT) or INTENT(INOUT) attribute. [0] > call MPI_Comm_set_errhandler (MPI_COMM_WORLD, errhandler, ierr) ! > MPI_COMM_WORLD in MPI_Comm_set_errhandler is the problem... > ------------------------------^ > compilation aborted for MPI_Comm_set_errhandler.f90 (code 1) > ----------------------------------------------------------------------------- > With the f77 bindings, the attached program compiles and runs fine. > > The older (deprecated) routine MPI_Errhandler_set which is defined to > have the same functionality works fine with both bindings and all MPI's. > > So, we believe the OpenMPI implementation of MPI standard erroneously > sets the INTENT(OUT) or INTENT(INOUT) attribute for the communicator > attribute. The definition of an error handle for MPI_COMM_WORLD should > be possible which it is currently not. > > Best wishes, > Paul Kapinos > > > > > > -- > Dipl.-Inform. Paul Kapinos - High Performance Computing, > RWTH Aachen University, Center for Computing and Communication > Seffenter Weg 23, D 52074 Aachen (Germany) > Tel: +49 241/80-24915 > > PROGRAM sunerr > USE MPI ! f90: Error on > MPI_Comm_set_errhandler if using this with OpenMPI / Sun MPI > !include 'mpif.h' ! f77: Works fine with all MPI's > tested > IMPLICIT NONE > ! > integer :: data = 1, errhandler, ierr > external AbortWithMessage > ! > call MPI_Init(ierr) > call MPI_Comm_create_errhandler (AbortWithMessage, errhandler, ierr) ! > Creating a handle: no problem > > call MPI_Comm_set_errhandler (MPI_COMM_WORLD, errhandler, ierr) ! > MPI_COMM_WORLD in MPI_Comm_set_errhandler is the problem... in f90 > !call MPI_Errhandler_set (MPI_COMM_WORLD, errhandler, ierr) ! and > this one deprecated function works fine both for f77 and f90 > > > ! ... a errornous MPI routine ... > call MPI_Send (data, 1, MPI_INTEGER, 1, -12, MPI_COMM_WORLD, ierr) > call MPI_Finalize( ierr ) > > END PROGRAM sunerr > > > > subroutine AbortWithMessage (comm, errorcode) > use mpi > implicit none > integer :: comm, errorcode > character(LEN=MPI_MAX_ERROR_STRING) :: errstr > integer :: stringlength, ierr > call MPI_Error_string (errorcode, errstr, stringlength, ierr) > write (*,*) 'Error: =+=> ', errstr, ' =+=> Aborting' > call MPI_Abort (comm, errorcode, ierr) > end subroutine AbortWithMessage > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/