Hi Jeff, thanks a lot. This fixed a bug in my code. I already like open-mpi for this :)
Greeting Jens Jeff Squyres schrieb: > These functions do exist in Open MPI, but your code is not quite > correct. Here's a new version that is correct: > > ----- > program main > use mpi > implicit none > integer :: ierr, rank, size > integer :: mpi1_val > integer(kind = MPI_ADDRESS_KIND) :: mpi2_val > logical :: attr_flag > > call MPI_INIT(ierr) > call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) > call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) > > call MPI_COMM_GET_ATTR(MPI_COMM_WORLD, MPI_IO, mpi2_val, attr_flag, ierr) > call MPI_ATTR_GET(MPI_COMM_WORLD, MPI_IO, mpi1_val, attr_flag, ierr) > > print *, "Hello, world, I am ", rank, " of ", size > call MPI_FINALIZE(ierr) > end > ----- > > Note three things: > > 1. attr_flag is supposed to be of type logical, not integer > 2. In MPI-1 (MPI_ATTR_GET) the type of the value is integer > 2. In MPI-2 (MPI_COMM_GET_ATTR), the type of the value is > integer(kind=MPI_ADDRESS_KIND) > > F90 is strongly typed, so the F90 compiler is correct in claiming that > functions of the signature you specified were not found. > > Make sense? > > I'm not sure why your original code works with MPICH2 -- perhaps they > don't have F90 bindings for these functions, and therefore they're > falling through to the F77 bindings (where no type checking is > done)...? If so, you're getting lucky that it works; perhaps > sizeof(INTEGER) == sizeof(LOGICAL), and sizeof(INTEGER) == > sizeof(INTEGER(KIND=MPI_ADDRESS_KIND)). That's a guess. > > > > On Dec 5, 2008, at 4:49 AM, Jens wrote: > >> Hi, >> >> I just switched from MPICH2 to openmpi because of sge-support, but I am >> missing some mpi-functions for fortran 90. >> >> Does anyone know why >> MPI_COMM_GET_ATTR() >> MPI_ATTR_GET() >> are not available? They work fine with MPICH2. >> >> I compiled openmpi 1.2.8/1.3rc on a clean CentOS 5.2 with GNU-compilers >> and Intel 11.0. Both give me the same error: >> >> GNU: >> Error: There is no specific subroutine for the generic 'mpi_attr_get' >> at (1) >> >> Intel 11.0: >> hello_f90.f90(22): error #6285: There is no matching specific subroutine >> for this generic subroutine call. [MPI_ATTR_GET] >> call MPI_ATTR_GET(MPI_COMM_WORLD, MPI_IO, attr_val, attr_flag, ierr) >> >> Any ideas ...? >> >> Greetings >> Jens >> >> -------------------------------- >> program main >> use mpi >> implicit none >> integer :: ierr, rank, size >> integer :: attr_val, attr_flag >> >> call MPI_INIT(ierr) >> call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) >> call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) >> >> call MPI_COMM_GET_ATTR(MPI_COMM_WORLD, MPI_IO, attr_val, attr_flag, ierr) >> call MPI_ATTR_GET(MPI_COMM_WORLD, MPI_IO, attr_val, attr_flag, ierr) >> >> print *, "Hello, world, I am ", rank, " of ", size >> call MPI_FINALIZE(ierr) >> end >> ------------------------------- >> _______________________________________________ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users > >