Page 1 of 1

mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 4:48 am
by eacheon
A while ago NEURON was able to be compiled with python and openmpi, but not in the newest mercurial repository, nrniv compiles fine though:

Code: Select all

$ python setup.py build
...
creating build/temp.linux-i686-2.5
mpicc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I../../../src/oc -I../oc -I/usr/include/python2.5 -c inithoc.cpp -o build/temp.linux-i686-2.5/inithoc.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
In file included from /usr/include/c++/4.3/ios:48,
                 from /usr/include/c++/4.3/ostream:45,
                 from /usr/include/c++/4.3/iostream:45,
                 from /usr/lib/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:50,
                 from /usr/lib/openmpi/include/mpi.h:1795,
                 from inithoc.cpp:14:
/usr/include/c++/4.3/bits/ios_base.h:189: error: ?SEEK_CUR? was not declared in this scope
/usr/include/c++/4.3/bits/ios_base.h:190: error: ?SEEK_END? was not declared in this scope
inithoc.cpp:32: warning: deprecated conversion from string constant to ?char*?
inithoc.cpp:32: warning: deprecated conversion from string constant to ?char*?
inithoc.cpp:32: warning: deprecated conversion from string constant to ?char*?
inithoc.cpp:37: warning: deprecated conversion from string constant to ?char*?
inithoc.cpp:37: warning: deprecated conversion from string constant to ?char*?
error: command 'mpicc' failed with exit status 1

Code: Select all

$ dpkg -l *openmpi*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                     Version                  Description
+++-========================-========================-================================================================
ii  libopenmpi-dev           1.2.8-3                  high performance message passing library -- header files
ii  libopenmpi1              1.2.8-3                  high performance message passing library -- shared library
ii  openmpi-bin              1.2.8-3                  high performance message passing library -- binaries
ii  openmpi-common           1.2.8-3                  high performance message passing library -- common files

Re: mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 1:11 pm
by hines
I'm not able to reproduce the problem on my machine. I did not use openmpi but it appears to be a gcc problem and
I did use gcc version 4.3.2. My compile line is very similar to yours with the same warnings but no errors.

Code: Select all

mpicc -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -I../../../nrn/src/oc -I../oc -I/usr/include/python2.5 -c inithoc.cpp -o build/temp.linux-x86_64-2.5/inithoc.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
inithoc.cpp:32: warning: deprecated conversion from string constant to ‘char*’
...
I do not know what is going wrong with your equivalent of include/c++/4.3.2/bits/ios_base.h
You might try a fresh build of NEURON in a objdir different from the srcdir. For my test I used

Code: Select all

../nrn/configure '--prefix=/home/hines/neuron/nrn-gcc4.3' '--srcdir=../nrn' '--with-paranrn' '--with-nrnpython'

Re: mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 3:00 pm
by hines
I'm surprised. I installed openmpi-1.2.8 and got the same error. I'll look into it further and get back to you.

Code: Select all

/home/hines/gnu/lib/gcc/x86_64-unknown-linux-gnu/4.3.2/../../../../include/c++/4.3.2/bits/ios_base.h:189: error: ‘SEEK_CUR’ was not declared in this scope
/home/hines/gnu/lib/gcc/x86_64-unknown-linux-gnu/4.3.2/../../../../include/c++/4.3.2/bits/ios_base.h:190: error: ‘SEEK_END’ was not declared in this scope

Re: mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 3:19 pm
by eacheon
I tried using an objdir in the same directory level with the srcdir, but get the same error. I was doing the build in an objdir different from srcdir, configured with

Code: Select all

../configure --prefix=/path/to/nrnhg/nrnmpi --with-iv=/path/to/nrnhg/iv --srcdir=.. --with-nrnpython --with-paranrn
in a subdirectory under srcdir.

This looks like an MPI problem to me. I have no experience with MPI, but from the source it seems MPI2 will be moving away from defining SEEK_*, favoring defining MPI_SEEK_* (https://svn.mpi-forum.org/trac/mpi-forum-web/ticket/20), and looks like openmpi has implemented this already, so the undefining of SEEK_* in inithoc.cpp might be causing problem when compiling with openmpi (I have 1.2.8 installed at this moment). Some extra logic might need to be added in inithoc.cpp in order to cope with new MPI2 change.
hines wrote:I'm not able to reproduce the problem on my machine. I did not use openmpi but it appears to be a gcc problem and
I did use gcc version 4.3.2. My compile line is very similar to yours with the same warnings but no errors.

Code: Select all

mpicc -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -I../../../nrn/src/oc -I../oc -I/usr/include/python2.5 -c inithoc.cpp -o build/temp.linux-x86_64-2.5/inithoc.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
inithoc.cpp:32: warning: deprecated conversion from string constant to ‘char*’
...
I do not know what is going wrong with your equivalent of include/c++/4.3.2/bits/ios_base.h
You might try a fresh build of NEURON in a objdir different from the srcdir. For my test I used

Code: Select all

../nrn/configure '--prefix=/home/hines/neuron/nrn-gcc4.3' '--srcdir=../nrn' '--with-paranrn' '--with-nrnpython'

Re: mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 3:31 pm
by hines
The problem seems to be fixed (and building with mpich continues to work) by including
mpi.h before stdio.h. Do an hg pull;hg update to get the change.

Re: mercurial changeset 266 openmpi+python problem

Posted: Sat Dec 13, 2008 3:44 pm
by eacheon
Yes, you fixed it. Thanks a lot for this quick fix!
hines wrote:The problem seems to be fixed (and building with mpich continues to work) by including
mpi.h before stdio.h. Do an hg pull;hg update to get the change.