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: Eugene Loh (Eugene.Loh_at_[hidden])
Date: 2008-10-27 15:22:16


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?
>