[mpich-discuss] F90FLAGS "-i4" statement for mpich2 configuration

Rajeev Thakur thakur at mcs.anl.gov
Fri Apr 30 09:15:47 CDT 2010


The code has declared the array as real, but is using MPI_REAL8 in the
MPI_Scatter call. You need to use a compiler flag that automatically
promotes reals to 8 bytes, or declare them as real*8, or use MPI_REAL
instead of MPI_REAL8.

Rajeev
 

> -----Original Message-----
> From: mpich-discuss-bounces at mcs.anl.gov 
> [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of 
> Steenhauer, Kate
> Sent: Friday, April 30, 2010 5:19 AM
> To: Anthony Chan; mpich-discuss at mcs.anl.gov
> Subject: Re: [mpich-discuss] F90FLAGS "-i4" statement for 
> mpich2 configuration
> 
> I have gfortran installed , i re-installed mpich2, i have 
> re-configured mpich2 using ________________________________________
> ./configure --prefix=.... CC=gcc CXX=g++ F77=gfortran 
> F90=gfortran  mpich2version
> MPICH2 Version:         1.2.1p1
> MPICH2 Release date:    Unknown, built on Fri Apr 30 10:16:59 BST 2010
> MPICH2 Device:          ch3:nemesis
> MPICH2 configure:       --prefix=/opt/mpich-test F77=gfortran 
> F90=gfortran
> MPICH2 CC:      gcc  -O2
> MPICH2 CXX:     c++  -O2
> MPICH2 F77:     gfortran  -O2
> MPICH2 F90:     gfortran  -O2
> 
> It still runs into the same error at MPI_Scatter.
> 
> I created the program below and I tried gfortran ts_sizeof.f 
> && a.out as was suggested. The following error occurs
> 
> gfortran ts_sizeof.f90 && a.out
> /tmp/cceMCvOn.o: In function `MAIN__':
> ts_sizeof.f90:(.text+0x6f): undefined reference to `sizeof_'
> ts_sizeof.f90:(.text+0xf5): undefined reference to `sizeof_'
> ts_sizeof.f90:(.text+0x17b): undefined reference to `sizeof_'
> ts_sizeof.f90:(.text+0x201): undefined reference to `sizeof_'
> collect2: ld returned 1 exit status
> 
> What am I doing wrong and what will this tell? The code 
> itself has been heavily tested with INTEL fortran, iam not 
> sure if any compatibility problems occur because of the 
> differences in data declaration between gfortran and INTEL.
> 
> In my code the following data is declared as e.g. in scatter 
> routine  real A(nx,ny,nz), B(nx_1,ny_1,nz_1)
>     real, allocatable :: sendbuf(:)
>     integer i1(nproc), i2(nproc), &
>             j1(nproc), j2(nproc), &
>             k1(nproc), k2(nproc)
> other parametrization  used is
> real*8
> 
> What am I doing wrong?
> kate
> 
> 
> From: mpich-discuss-bounces at mcs.anl.gov 
> [mpich-discuss-bounces at mcs.anl.gov] On Behalf Of 
> chan at mcs.anl.gov [chan at mcs.anl.gov]
> Sent: 29 April 2010 16:18
> To: mpich-discuss at mcs.anl.gov
> Subject: Re: [mpich-discuss] F90FLAGS "-i4" statement for 
> mpich2 configuration
> 
> ----- "Kate Steenhauer" <k.steenhauer at abdn.ac.uk> wrote:
> 
> > [eng923 at cops-021026 job]$ mpich2version
> > MPICH2 Version:         1.2.1p1
> > MPICH2 Release date:    Unknown, built on Mon Mar 29 14:37:13 BST
> > 2010
> > MPICH2 Device:          ch3:nemesis
> > MPICH2 configure:       --prefix=/opt/mpich2
> > MPICH2 CC:      gcc  -O2
> > MPICH2 CXX:     c++  -O2
> > MPICH2 F77:     gfortran  -O2
> > MPICH2 F90:     f95  -O2
> 
> If you didn't install any other fortran compiler on machine, 
> I would think
> f95 is gfortran, i.e. a symbolic link.  Do "readlink -f `which f95`"
> to see what it says.
> 
> > When I read the following (see below) in migrating from mpich1 to 
> > mpich2, is this possibly causding the problem in 
> mpi_scatter? As I am 
> > using an Intel fortran compiler on a 64 bit linux platform? Would I 
> > need to reinstall and configure MPIch2 and where and how do 
> I include 
> > the F90FLAGS "-i4" statement on a bash Shell?
> 
> The paragraph you quoted refers to g95 which is variant 
> distribution of GNU Fortran compiler.  I believe that most 
> modern distribution of linux do not ship with it by default, 
> i.e. you need to specifically download that version of 
> fortran compiler.  Try do "which g95" to see if your machine has it.
> 
> If you worry your fortran integer does not have the correct 
> length, you can check the sizeof of fortran integers and 
> reals as follows (you can use the kind parameter instead)
> 
> > cat ts_sizeof.f
>         program test_sizeof
>         integer  ii
>         real     rr
>         integer*8  ii8
>         real*8     rr8
>         write(6,*) "sizeof(integer) = ", sizeof(ii)
>         write(6,*) "sizeof(rr) = ", sizeof(rr)
>         write(6,*) "sizeof(integer*8) = ", sizeof(ii8)
>         write(6,*) "sizeof(rr*8) = ", sizeof(rr8)
>         end
> 
> > gfortran ts_sizeof.f && a.out
> > f95 ts_sizeof.f && a.out
> 
> To avoid any potential problem, you may want to configure 
> MPICH2 by explicitly specifying which compilers you are using
> 
> ./configure --prefix=.... CC=gcc CXX=g++ F77=gfortran F90=gfortran
> 
> (Be sure to do a make distclean before reconfiguring MPICH2 
> if you are doing an inpath build).  You mentioned you were 
> using intel fortran compiler, did you configure MPICH2 with 
> ifort, i.e. F77=ifort F90=ifort ?
> Again to avoid any potential incompatibility, the rule is 
> always to use the same compilers to configure/build MPICH2 as 
> the ones that are used to compile/link your code (using 
> mpicc/mpif90 from MPICH2 installation will avoid the issue).
> 
> A.Chan
> 
> >
> > D.4 Q: When I use the g95 Fortran compiler on a 64-bit 
> platform, some 
> > of the tests fail
> > A: The g95 compiler incorrectly defines the default Fortran 
> integer as 
> > a 64- bit integer while defining Fortran reals as 32-bit 
> values (the 
> > Fortran standard requires that INTEGER and REAL be the same size). 
> > This was apparently done to allow a Fortran INTEGER to hold 
> the value 
> > of a pointer, rather than requiring the programmer to select an 
> > INTEGER of a suitable KIND.
> > To force the g95 compiler to correctly implement the 
> Fortran standard, 
> > use the -i4 flag. For example, set the environment variable 
> F90FLAGS 
> > before configuring MPICH2:
> > setenv F90FLAGS "-i4"
> > G95 users should note that there (at this writing) are two 
> > distributions of
> > g95 for 64-bit Linux platforms. One uses 32-bit integers and reals 
> > (and conforms to the Fortran standard) and one uses 32-bit integers 
> > and 64-bit reals. We recommend using the one that conforms to the 
> > standard (note that the standard specifies the ratio of 
> sizes, not the 
> > absolute sizes, so a Fortran 95 compiler that used 64 bits for both 
> > INTEGER and REAL would also conform to the Fortran 
> standard. However, 
> > such a compiler would need to use 128 bits for DOUBLE PRECISION 
> > quantities).
> >
> > Thanks kate
> >
> >
> >
> > The University of Aberdeen is a charity registered in Scotland, No 
> > SC013683.
> >
> > _______________________________________________
> > mpich-discuss mailing list
> > mpich-discuss at mcs.anl.gov
> > https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss
> _______________________________________________
> mpich-discuss mailing list
> mpich-discuss at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss
> 
> 
> The University of Aberdeen is a charity registered in 
> Scotland, No SC013683.
> _______________________________________________
> mpich-discuss mailing list
> mpich-discuss at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss
> 



More information about the mpich-discuss mailing list