Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] MPI_SUM and MPI_REAL16 with MPI_ALLREDUCE in fortran90
From: Terry Frankcombe (terry_at_[hidden])
Date: 2008-10-28 04:59:29


I assume you've confirmed that point to point communication works
happily with quad prec on your machine? How about one-way reductions?

On Tue, 2008-10-28 at 08:47 +0000, Julien Devriendt wrote:
> Thanks for your suggestions.
> I tried them all (declaring my variables as REAL*16 or REAL(16)) to no
> avail. I still get the wrong answer with my call to MPI_ALLREDUCE.
>
> > I think the KINDs are compiler dependent. For Sun Studio Fortran, REAL*16
> > and REAL(16) are the same thing. For Intel, maybe it's different. I don't
> > know. Try running this program:
> >
> > double precision xDP
> > real(16) x16
> > real*16 xSTAR16
> > write(6,*) kind(xDP), kind(x16), kind(xSTAR16), kind(1.0_16)
> > end
> >
> > and checking if the output matches your expectations.
> >
> > Jeff Squyres wrote:
> >
> >> I dabble in Fortran but am not an expert -- is REAL(kind=16) the same as
> >> REAL*16? MPI_REAL16 should be a 16 byte REAL; I'm not 100% sure that
> >> REAL(kind=16) is the same thing...?
> >>
> >> On Oct 23, 2008, at 7:37 AM, Julien Devriendt wrote:
> >>
> >>> Hi,
> >>>
> >>> I'm trying to do an MPI_ALLREDUCE with quadruple precision real and
> >>> MPI_SUM and open mpi does not give me the correct answer (vartemp
> >>> is equal to vartored instead of 2*vartored). Switching to double
> >>> precision
> >>> real works fine.
> >>> My version of openmpi is 1.2.7 and it has been compiled with ifort v10.1
> >>> and icc/icpc at installation
> >>>
> >>> Here's the simple f90 code which fails:
> >>>
> >>> program test_quad
> >>>
> >>> implicit none
> >>>
> >>> include "mpif.h"
> >>>
> >>> real(kind=16) :: vartored(8),vartemp(8)
> >>> integer :: nn,nslaves,my_index
> >>> integer :: mpierror
> >>>
> >>> call MPI_INIT(mpierror)
> >>> call MPI_COMM_SIZE(MPI_COMM_WORLD,nslaves,mpierror)
> >>> call MPI_COMM_RANK(MPI_COMM_WORLD,my_index,mpierror)
> >>>
> >>> nn = 8
> >>> vartored = 1.0_16
> >>> vartemp = 0.0_16
> >>> print*,"P1 ",my_index,vartored
> >>> call MPI_ALLREDUCE
> >>> (vartored,vartemp,nn,MPI_REAL16,MPI_SUM,MPI_COMM_WORLD,mpierror)
> >>> print*,"P2 ",my_index,vartemp
> >>>
> >>> stop
> >>>
> >>> end program test_quad
> >>>
> >>> Any idea why this happens?
> >>
> > _______________________________________________
> > users mailing list
> > users_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/users
> >
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users