ternaus / quest-qmc

Automatically exported from code.google.com/p/quest-qmc
2 stars 11 forks source link

Compilation error with pgfortran #43

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
I am trying to compile QUEST code with Portland compiler but get an error.

----
uname --all        
Linux t430 3.14.1-031401-generic #201404141220 SMP Mon Apr 14 16:21:48 UTC 2014 
x86_64 x86_64 x86_64 GNU/Linux

----
pgfortran --version

pgfortran 14.6-0 64-bit target on x86-64 Linux -tp sandybridge 
The Portland Group - PGI Compilers and Tools
Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
----

pgfortran -fast –Minform=inform -DDQMC_ASQRD    -c dqmc_hubbard.F90
PGF90-S-0038-Symbol, getpid, has not been explicitly declared (dqmc_hubbard.F90)
  0 inform,   0 warnings,   1 severes, 0 fatal for dqmc_hub_init

----

Original issue reported on code.google.com by iglovi...@gmail.com on 7 Jul 2014 at 10:21

GoogleCodeExporter commented 9 years ago
I hope I didn't misinterpret the result, but Google tells me that pgfortran 
supports 
getpid() function. Search getpid in the PDF:

http://www.pgroup.com/doc/pgifortref.pdf

Original comment by cxc639 on 7 Jul 2014 at 10:36

GoogleCodeExporter commented 9 years ago
There are lines in dqmc_hubbard.F90

----
#ifdef __INTEL_COMPILER
    use IFPORT, only : getpid
----
May be should be similar line for the Portland compiler.

Original comment by iglovi...@gmail.com on 7 Jul 2014 at 10:39

GoogleCodeExporter commented 9 years ago
getpid() is an intrinsic function of GNU FORTRAN compiler. Intel puts it in its 
Portability Library:

https://software.intel.com/sites/products/documentation/doclib/stdxe/2013/compos
erxe/compiler/fortran-mac/GUID-E2E955F7-8A3A-4242-874B-FCC5BA4E2F4C.htm#GUID-E2E
955F7-8A3A-4242-874B-FCC5BA4E2F4C

The Portability Library is pre-compiled as a FORTRAN 90 module called IFPORT. 
Hence the line

use IFPORT, only : getpid

I do not know where PGI puts getpid. From PGI's FORTRAN reference manual, it 
looks like getpid 
is also an intrinsic function. Anyway, judging from examples I googled, one 
thing you may try is 
to add an additional statement in dqmc_hubbard.F90:

integer :: getpid

I don't know whether this would work though.

Original comment by cxc639 on 7 Jul 2014 at 10:54

GoogleCodeExporter commented 9 years ago
It seems like for PG, you need to "use dfport" instead of "use ifport",
where as Chia-Chen mentioned, getpid is recognized.

Original comment by ehsankha...@gmail.com on 7 Jul 2014 at 10:54

GoogleCodeExporter commented 9 years ago
I think one main issue is: what is the equivalent of __INTEL_COMPILER for
PG?
If it is, e.g., __PG_COMPILER, I guess you could do the following:

#ifdef __INTEL_COMPILER
    use IFPORT, only : getpid
#elseif __PG_COMPILER
    use dfport, only : getpid
:

Original comment by ehsankha...@gmail.com on 7 Jul 2014 at 10:58

GoogleCodeExporter commented 9 years ago
But to write it I need some kind of the if condition similar to 

----
#ifdef __INTEL_COMPILER
----

but corresponding to the Portland compiler and I can not figure out what should 
I use in this case.

Original comment by iglovi...@gmail.com on 7 Jul 2014 at 11:00

GoogleCodeExporter commented 9 years ago
Ok. This compilation error fixed in the revision 5a71c4b41780 with the help of 
Eshan and Chia-Chen.

Next one:
----
pgfortran -fast –Minform=inform -DDQMC_ASQRD    -c dqmc_2dperl.F90
pgc++ -DDQMC_ASQRD   -fast –Minform=inform  -c computeg.c++
pgc++ -DDQMC_ASQRD   -fast –Minform=inform  -c blaslapack.c++
pgc++ -DDQMC_ASQRD   -fast –Minform=inform  -c profile.c++
pgc++ -DDQMC_ASQRD   -fast –Minform=inform  -c kernel_cpu.c++
ar cr ../libdqmc.a dqmc_mpi.o dqmc_util.o dqmc_cfg.o dqmc_geom_param.o 
dqmc_latt.o dqmc_bonds.o dqmc_reclatt.o dqmc_hamilt.o dqmc_symm.o dqmc_wspace.o 
dqmc_struct.o dqmc_geom_wrap.o dqmc_matb.o dqmc_ckb.o dqmc_seqb.o dqmc_gfun.o 
dqmc_phy0.o dqmc_phy2.o dqmc_hubbard.o dqmc_gtau.o dqmc_tdm1.o dqmc_tdm2.o 
dqmc_kbonds.o dqmc_2dperl.o computeg.o blaslapack.o profile.o kernel_cpu.o
ranlib ../libdqmc.a
make[1]: Leaving directory `/home/vladimir/work/quest-qmc/SRC'
(cd EXAMPLE; make)
make[1]: Entering directory `/home/vladimir/work/quest-qmc/EXAMPLE'
(cd geom; make)
make[2]: Entering directory `/home/vladimir/work/quest-qmc/EXAMPLE/geom'
pgfortran -fast –Minform=inform -I../../SRC -o ggeom ggeom.F90 
../../libdqmc.a -lstdc++ -lrt ../../liblapack.a ../../libblas.a 
ggeom.F90:
/usr/bin/ld: ../../libdqmc.a(computeg.o): undefined reference to symbol 
'_Unwind_Resume@@GCC_3.0'
//lib/x86_64-linux-gnu/libgcc_s.so.1: error adding symbols: DSO missing from 
command line
make[2]: *** [test] Error 2

Original comment by iglovi...@gmail.com on 7 Jul 2014 at 11:28

GoogleCodeExporter commented 9 years ago
Now QUEST code is compiled with PG compiler without errors. Example Makefile 
added in the revision fef2be079c5f

Original comment by iglovi...@gmail.com on 7 Jul 2014 at 11:44