[gmx-users] Compilation issues with Gromacs 5.1.1 and SGI MPT
Mark Abraham
mark.j.abraham at gmail.com
Thu Jan 7 11:48:30 CET 2016
Hi,
On Thu, Jan 7, 2016 at 11:30 AM Hubert Santuz <hubert.santuz at gmail.com>
wrote:
> Hi Mark,
>
> You were right, MPT defines a constant UNDEFINED in their mpi++.h Why it
> should not do?
>
Because if everybody wrote libraries like that, then nobody could use any
generic-sounding name for a symbol in their code, for fear of a clash like
the one you experienced. Symbols that libraries intend to export need to
have names that are unlikely to clash with other libraries, or with user
code. And libraries shouldn't define symbols they don't intend to define
(which is probably what is happening here). If you let people park their
cars wherever they want, you get chaos, right? :-)
When renaming gromacs one with GMX_UNDEFINED, the compilation suceed but
> now I have linking issues (which I didn't have with OpenMPI):
>
Turn off the C++ bindings for MPI in MPT. Nobody uses them, particularly
not GROMACS, and clearly they are tricky to link correctly.
> [ 98%] Built target libgromacs
> [ 98%] Built target mdrun_objlib
> [100%] Linking CXX executable ../../bin/mdrun_mpi
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Op::Init(void (*)(void const*, void*, int, PMPI::Datatype const&),
> bool) »:
>
> md.cpp:(.text._ZN4PMPI2Op4InitEPFvPKvPviRKNS_8DatatypeEEb[_ZN4PMPI2Op4InitEPFvPKvPviRKNS_8DatatypeEEb]+0x16):
> undefined reference to « op_intercept(void*, void*, int*, unsigned int*) »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Comm::Free() »:
> md.cpp:(.text._ZN4PMPI4Comm4FreeEv[_ZN4PMPI4Comm4FreeEv]+0x13): undefined
> reference to « PMPI::Comm::mpi_comm_map »
> md.cpp:(.text._ZN4PMPI4Comm4FreeEv[_ZN4PMPI4Comm4FreeEv]+0x1a): undefined
> reference to « PMPI::Comm::mpi_comm_map »
> md.cpp:(.text._ZN4PMPI4Comm4FreeEv[_ZN4PMPI4Comm4FreeEv]+0x2f): undefined
> reference to « PMPI::Comm::mpi_comm_map »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Comm::Sendrecv_replace(void*, int, PMPI::Datatype const&, int, int,
> int, int) const »:
>
> md.cpp:(.text._ZNK4PMPI4Comm16Sendrecv_replaceEPviRKNS_8DatatypeEiiii[_ZNK4PMPI4Comm16Sendrecv_replaceEPviRKNS_8DatatypeEiiii]+0xd):
> undefined reference to « PMPI::Comm::ignored_status »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Comm::Sendrecv(void const*, int, PMPI::Datatype const&, int, int,
> void*, int, PMPI::Datatype const&, int, int) const »:
>
> md.cpp:(.text._ZNK4PMPI4Comm8SendrecvEPKviRKNS_8DatatypeEiiPviS5_ii[_ZNK4PMPI4Comm8SendrecvEPKviRKNS_8DatatypeEiiPviS5_ii]+0xd):
> undefined reference to « PMPI::Comm::ignored_status »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Comm::Probe(int, int) const »:
> md.cpp:(.text._ZNK4PMPI4Comm5ProbeEii[_ZNK4PMPI4Comm5ProbeEii]+0x8):
> undefined reference to « PMPI::Comm::ignored_status »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Comm::Iprobe(int, int) const »:
> md.cpp:(.text._ZNK4PMPI4Comm6IprobeEii[_ZNK4PMPI4Comm6IprobeEii]+0x12):
> undefined reference to « PMPI::C
> (...)
>
> md.cpp:(.text._ZNK4PMPI9Intracomm11Create_cartEiPKiPKbb[_ZNK4PMPI9Intracomm11Create_cartEiPKiPKbb]+0x190):
> undefined reference to « MPI::Is_initialized() »
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o: dans la fonction «
> PMPI::Cartcomm::Sub(bool const*) »:
>
> md.cpp:(.text._ZN4PMPI8Cartcomm3SubEPKb[_ZN4PMPI8Cartcomm3SubEPKb]+0x14b):undefined
> reference to « MPI::Is_initialized() »
>
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o:(.rodata._ZTVN3MPI2OpE[_ZTVN3MPI2OpE]+0x20):
> undefined reference to « MPI::Op::Init(void (*)(void const*, void*, int,
> MPI::Datatype const&), bool) »
>
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o:(.rodata._ZTVN3MPI2OpE[_ZTVN3MPI2OpE]+0x28):
> undefined reference to « MPI::Op::Free() »
>
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o:(.rodata._ZTVN3MPI2OpE[_ZTVN3MPI2OpE]+0x30):
> undefined reference to « MPI::Op::Reduce_local(void const*, void*, int,
> MPI::Datatype const&) const »
>
> CMakeFiles/mdrun_objlib.dir/mdrun/md.cpp.o:(.rodata._ZTVN3MPI2OpE[_ZTVN3MPI2OpE]+0x38):
> undefined reference to « MPI::Op::Is_commutative() const »
> collect2: erreur: ld a retourné 1 code d'état d'exécution
> make[2]: *** [bin/mdrun_mpi] Erreur 1
> make[1]: *** [src/programs/CMakeFiles/mdrun.dir/all] Erreur 2
> make: *** [all] Erreur 2
>
> Maybe there is some missing link flags, I will keep digging in the mean
> time.
>
> You mean, fill a bug to SGI or to Gromacs?
>
SGI's MPT header files should not define symbols that are not in the MPI
spec - thus should not define UNDEFINED
Mark
Thanks,
> Hubert
>
>
> 2016-01-06 18:06 GMT+01:00 Mark Abraham <mark.j.abraham at gmail.com>:
>
> > Hi,
> >
> > I suspect MPT has a bug such that one of its headers defines UNDEFINED,
> > which it should not do. If so, you can change
> > src/gromacs/legacyheaders/names.h
> > lines 110-1 to read
> >
> > #define GMX_UNDEFINED "UNDEFINED"
> > #define ENUM_NAME(e, max, names) ((((e) < 0) || ((e) >= (max))) ?
> > GMX_UNDEFINED : (names)[e])
> >
> > and you should be fine. If so, please let us know, and please file a bug
> > report with SGI.
> >
> > Mark
> >
> > On Wed, Jan 6, 2016 at 5:33 PM hubert santuz <hubert.santuz at gmail.com>
> > wrote:
> >
> > > Hi everyone,
> > >
> > > I am trying to install the last version of Gromacs (5.1.1) on our SGI
> > > cluster.
> > > The mono-processor compilation went fine and now I would like to
> compile
> > > the mdrun MPI version with the SGI MPT (the MPI library of SGI) 2.09
> > > (and also 2.12)
> > > Here the cmake command I used:
> > >
> > > cmake .. -DGMX_GPU=OFF -DCMAKE_C_COMPILER=gcc
> > >
> > >
> >
> -DCMAKE_INSTALL_PREFIX=/opt/apps/software/pkg/gcc-4.9.0/mpt-2.0.9/gromacs/5.1.1/single
> > >
> > >
> > >
> >
> -DFFTWF_LIBRARY=/opt/apps/software/pkg/gcc-4.9.0/fftw/3.3.3/single/lib/libfftw3f.so
> > >
> > >
> >
> -DFFTWF_INCLUDE_DIR=/opt/apps/software/pkg/gcc-4.9.0/fftw/3.3.3/single/include
> > > -DGMX_MPI=ON -DMPI_C_INCLUDE_PATH=/opt/sgi/mpt/mpt-2.12/include
> > > -DMPI_C_LIBRARIES=/opt/sgi/mpt/mpt-2.12/lib/libmpi.so
> > > -DGMX_BUILD_MDRUN_ONLY=ON -DBUILD_SHARED_LIBS=off
> > >
> > >
> > > The configuration went fine but when I ran make, I have the following
> > > error:
> > >
> > >
> > > service0:gromacs-5.1.1/build # make
> > > [ 0%] Generating baseversion-gen.c
> > > Scanning dependencies of target libgromacs
> > > [ 0%] Building C object
> > >
> > >
> >
> src/gromacs/CMakeFiles/libgromacs.dir/__/external/tng_io/src/compression/bwlzh.c.o
> > > [...]
> > > [ 4%] Building CXX object
> > >
> src/gromacs/CMakeFiles/libgromacs.dir/commandline/cmdlinehelpmodule.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_constraints.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_vsite.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_specatomcomm.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_topology.cpp.o
> > > [ 4%] Building CXX object
> > > src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_setup.cpp.o
> > > In file included from
> > >
> > >
> >
> /opt/apps/software/src/gromacs/gromacs-5.1.1/src/gromacs/domdec/domdec_setup.cpp:53:0:
> > >
> > >
> >
> /opt/apps/software/src/gromacs/gromacs-5.1.1/src/gromacs/legacyheaders/names.h:110:25:
> > > erreur: expected unqualified-id before string constant
> > > #define UNDEFINED "UNDEFINED"
> > > ^
> > > make[2]: ***
> > > [src/gromacs/CMakeFiles/libgromacs.dir/domdec/domdec_setup.cpp.o]
> Erreur
> > 1
> > > make[1]: *** [src/gromacs/CMakeFiles/libgromacs.dir/all] Erreur 2
> > > make: *** [all] Erreur 2
> > >
> > > This is strange because, as I said, the mono-processor compilation went
> > > fine.
> > > I tried to upgrade the MPT library (2.12) without success.
> > > I tried Openmpi 1.8.1 and it succeed.
> > > Is there a compatibility issue with MPT ? I would like to keep this
> > > library since I achieved better performance with it.
> > >
> > > Thanks,
> > > Hubert
> > > --
> > > Gromacs Users mailing list
> > >
> > > * Please search the archive at
> > > http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> > > posting!
> > >
> > > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> > >
> > > * For (un)subscribe requests visit
> > > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> > > send a mail to gmx-users-request at gromacs.org.
> > >
> > --
> > Gromacs Users mailing list
> >
> > * Please search the archive at
> > http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> > posting!
> >
> > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> >
> > * For (un)subscribe requests visit
> > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> > send a mail to gmx-users-request at gromacs.org.
> >
> --
> Gromacs Users mailing list
>
> * Please search the archive at
> http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> posting!
>
> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>
> * For (un)subscribe requests visit
> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> send a mail to gmx-users-request at gromacs.org.
More information about the gromacs.org_gmx-users
mailing list