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)
> 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:
>>> 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
>>> 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
>>> print*,"P2 ",my_index,vartemp
>>> end program test_quad
>>> Any idea why this happens?
> users mailing list