[gmx-users] Compilation issues with Gromacs 5.1.1 and SGI MPT

Hubert Santuz hubert.santuz at gmail.com
Thu Jan 7 18:05:15 CET 2016


Finally, I found a solution by digging on MPT C++ bindings.
In fact, at the end of the MPT mpi.h file, we have:

if !defined(MPI_NO_CPPBIND)
#include "mpi++.h"
#endif

So MPT expose the C++ bindings by default.
To prevent that, I add the macro to src/gromacs/utility/gmxmpi.h :

/* MPI C++ binding is deprecated and can cause name conflicts (e.g.
stdio/mpi seek) */
#define MPICH_SKIP_MPICXX 1
#define OMPI_SKIP_MPICXX 1
#define MPI_NO_CPPBIND 1
#include <mpi.h>

Since there is already macros for Mpich and OpenMPI, will it be worth it to
add the one from MPT and file a bug report?

Cheers,
Hubert



2016-01-07 16:07 GMT+01:00 Mark Abraham <mark.j.abraham at gmail.com>:

> Hi,
>
> No, I don't have access to the MPT documentation, so you should start
> there. I would be pretty sure it wouldn't be faster, either ;-)
>
> Mark
>
> On Thu, 7 Jan 2016 13:25 Hubert Santuz <hubert.santuz at gmail.com> wrote:
>
> > Hi,
> >
> > 2016-01-07 11:48 GMT+01:00 Mark Abraham <mark.j.abraham at gmail.com>:
> >
> > > 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? :-)
> > >
> > >
> > Yeah, it makes sense...
> >
> >
> >
> > > 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.
> > >
> >
> > Do you have an idea on how to do that ? MPT is shipped as RPM package.
> > I tried to remove any variable linked to MPI_CXX in the gromacs cmake
> > without success.
> >
> >
> > >
> > >
> > > > [ 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
> > >
> >
> > Looking at the header file, that's not the only one... There's plenty of
> > them...
> >
> > Thanks,
> > Hubert
> >
> >
> >
> > >
> > > 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.
> > > --
> > > 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