how config mpich2 on a standalone PC?
Moderator: hines
how config mpich2 on a standalone PC?
I want to test parallel neuron on a standalone multiprocessor computer. previously I could compile neuron using pvm3, however I realized that mpich2 is a better package.
according to the article "Translating network models to parallel hardware in NEURON" I have compiled mpich2. but I do not want to setup a cluster. how should I configure mpich2 for this purpose? Do I benefit from mpich2? Is mpich2 necessary using neuron 7 on a standalone multicore PC? please help me. I have googled a lot and did not find my answers.
according to the article "Translating network models to parallel hardware in NEURON" I have compiled mpich2. but I do not want to setup a cluster. how should I configure mpich2 for this purpose? Do I benefit from mpich2? Is mpich2 necessary using neuron 7 on a standalone multicore PC? please help me. I have googled a lot and did not find my answers.
Re: how config mpich2 on a standalone PC?
Can you run mpdboot?
For a single multicore machine, all that is needed is a $HOME/.mpd.conf file with permission 600 and the contents
secretword=whatever
If mpdtrace shows a machine name instead of a long message you are ready to launch an mpiexec command line.
For a single multicore machine, configuring with the '--with-device=ch3:nemesis' makes for much faster communication than tcp/ip on
a shared memory machine. I also configure with '--enable-sharedlibs=gcc'
MPI is not necessary on a standalone multicore machine since an alternative is to use threads. But MPI (with the nemesis device) is always a bit faster than threads.
I would install the 7.1 alpha version however as there have been a few parallel related bug fixes.
For a single multicore machine, all that is needed is a $HOME/.mpd.conf file with permission 600 and the contents
secretword=whatever
If mpdtrace shows a machine name instead of a long message you are ready to launch an mpiexec command line.
For a single multicore machine, configuring with the '--with-device=ch3:nemesis' makes for much faster communication than tcp/ip on
a shared memory machine. I also configure with '--enable-sharedlibs=gcc'
MPI is not necessary on a standalone multicore machine since an alternative is to use threads. But MPI (with the nemesis device) is always a bit faster than threads.
I would install the 7.1 alpha version however as there have been a few parallel related bug fixes.
Re: how config mpich2 on a standalone PC?
Thank you hines. I am really tired of struggling with my computer. this is my stat now:
I have compiled mich2 with the following series of commands:
this is the content of /etc/hosts
this is output of my mpdboot and mpdtrace commands:
this the output of the mpdcheck command:
this is the result of cpi test program
I think cpi_anim is written to be run faster on parallel machines. but why it become slow using -np 2?
I have a dual core processor and according to the mich2 faq:
is this the reason of slow performance of cpi_anim?
I have also compiled neuron with following commands:
a question that is not related to the topic: Do I need -o3 flag beside -march=native flag as I have done in configuration part of the mpich2? and how can I send more than one flag to the compilers?
this is the content of nrnenv
this is the output the test program
1) Is everything OK?
2) I thought GUI should be accessible in neuron 7 parallel mode. am I right?
I have compiled mich2 with the following series of commands:
Code: Select all
./configure --prefix=$HOME/mpich2 --with-device=ch3:nemesis --enable-sharedlibs=gcc --with-pm=gforker --enable-fast=O3 MPICH2LIB_CFLAGS=-march=native MPICH2LIB_FFLAGS=-march=native MPICH2LIB_CXXFLAGS=-march=native MPICH2LIB_F90FLAGS=-march=native
make #do not use -j3 --> not recommended
make install
export PATH=$HOME/mpich2/bin:$PATH
cd $HOME
touch .mpd.conf
chmod 600 .mpd.conf
gedit .mpd.conf --> MPD_SECRETWORD=*******
gedit /home/keivan/neuron/nrnenv --> export PATH=$HOME/mpich2/bin:$PATH
Code: Select all
127.0.0.1 localhost
127.0.1.1 localhost.localdomain ubuntu
$ipaddr $uqdn #this the suggestion of the mpdcheck -l command I do not know if it is correct
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Code: Select all
keivan@ubuntu:~$ mpdboot
keivan@ubuntu:~$ mpdtrace
ubuntu
Code: Select all
*** the fq hostname seems to be localhost
*** first ipaddr for this host (via ubuntu) is: 127.0.1.1
Code: Select all
cd ~/mpich2/share/examples_graphics
make
mpdallexit
mpd &
mpiexec -np 1 ./cpi_anim
Process 0 on ubuntu
pi is approximately 3.1416009869231254, Error is 0.0000083333333323
wall clock time = 0.000060
mpiexec -np 2 ./cpi_anim
Process 0 on ubuntu
Process 1 on ubuntu
pi is approximately 3.1416009869231241, Error is 0.0000083333333309
wall clock time = 0.066925
I have a dual core processor and according to the mich2 faq:
it seems that I should use two MPI processes. but how?Q: Can MPI be used to program multicore systems?
A: There are two common ways to use MPI with multicore processors or multiprocessor nodes:
1. Use one MPI process per core (here, a core is defined as a program counter and some set of arithmetic, logic, and load/store units).
2. Use one MPI process per node (here, a node is defined as a collection of cores that share a single address space). Use threads or compiler-provided parallelism to exploit the multiple cores. OpenMP may be used with MPI; the loop-level parallelism of OpenMP may be used with any implementation of MPI (you do not need an MPI that supports MPI_THREAD_MULTIPLE when threads are used only for computational tasks). This is sometimes called the hybrid programming model.
is this the reason of slow performance of cpi_anim?
I have also compiled neuron with following commands:
Code: Select all
cd ~/neuron/nrn
./configure --prefix=`pwd` --with-device=ch3:nemesis --with-iv=/home/keivan/neuron/iv/ --with-paranrn CXXFLAGS="-march=native" CFLAGS="-march=native" FFLAGS="-march=native"
make -j3
make -j3 install
this is the content of nrnenv
Code: Select all
export IV=$HOME/neuron/iv
export N=$HOME/neuron/nrn
export CPU=x86_64
export PATH="$IV/$CPU/bin:$N/$CPU/bin:$PATH"
export PVM_ROOT=$/usr/lib/pvm3
#source ${PVM_ROOT}/lib/bashrc.stub
export PVM_RSH=/usr/bin/ssh
export PATH=$HOME/mpich2/bin:$PATH
Code: Select all
cd ~/neuron/nrn/src/parallel
mpiexec -np 2 nrngui -mpi test0.hoc
numprocs=2
NEURON -- Release 7.0 (281:80827e3cd201) 2009-01-16
Duke, Yale, and the BlueBrain Project -- Copyright 1984-2008
See http://www.neuron.yale.edu/credits.html
I am 0 of 2
I am 1 of 2
2) I thought GUI should be accessible in neuron 7 parallel mode. am I right?
Re: how config mpich2 on a standalone PC?
You are doing it correctly.it seems that I should use two MPI processes. but how?
is this the reason of slow performance of cpi_anim?
I wouldn't worry about the performance of cpi. You don't get much speedup
with parallel unless your problem is greater than about 5000 states.
I don't see how it can do any harm unless you get a compiler error. See configure --help but generally people specify CFLAGS and CXXFLAGS.Do I need -o3 flag beside -march=native flag as I have done in configuration part of the mpich2? and how can I send more than one flag to the compilers?
Yes. The output of test0.hoc for -np 2 is correct.1) Is everything OK?
The gui is not accessible when using MPI. It is accessible when using threads.2) I thought GUI should be accessible in neuron 7 parallel mode. am I right?
Re: how config mpich2 on a standalone PC? {solved}
thank you hines.
Re: how config mpich2 on a standalone PC?
After running:
$./configure --prefix='$HOME/neuron/' --with-iv=$HOME/neuron/iv --with-paranrn
I get:
(lots of yes, echo etc then...)
checking for mpicc... mpicc
checking for MPI_Init... no
checking for MPI_Init in -lmpi... no
checking for MPI_Init in -lmpich... no
configure: error: Cannot compile MPI program
I installed mpich2 through a .deb package.
mpiexec -np 4 runs, except it opens four different versions of the same .hoc file (I know I should not expect it to work without parallel nrn compilation and working mpd however).
I can only run $./mpd or $./mpdtrace
from the /usr/lib/mpich-mpd/bin/
directory as the .deb package did not set a path variable for these mpd programs by default.
I am not sure what the correct way to set the path variable is, but I tried adding it to the .bashrc file as that seems to work in other cases.
I wonder if the MPI_Init fail could be related to mpd not executing from $HOME?
Also there is no mpdboot file in bin, but I think ./mpd does the same thing.
Thanks for any suggestions.
$./configure --prefix='$HOME/neuron/' --with-iv=$HOME/neuron/iv --with-paranrn
I get:
(lots of yes, echo etc then...)
checking for mpicc... mpicc
checking for MPI_Init... no
checking for MPI_Init in -lmpi... no
checking for MPI_Init in -lmpich... no
configure: error: Cannot compile MPI program
I installed mpich2 through a .deb package.
mpiexec -np 4 runs, except it opens four different versions of the same .hoc file (I know I should not expect it to work without parallel nrn compilation and working mpd however).
I can only run $./mpd or $./mpdtrace
from the /usr/lib/mpich-mpd/bin/
directory as the .deb package did not set a path variable for these mpd programs by default.
I am not sure what the correct way to set the path variable is, but I tried adding it to the .bashrc file as that seems to work in other cases.
I wonder if the MPI_Init fail could be related to mpd not executing from $HOME?
Also there is no mpdboot file in bin, but I think ./mpd does the same thing.
Thanks for any suggestions.
Re: how config mpich2 on a standalone PC?
What is required during configure is to be able to find mpicc and mpic++
(or mpicxx). It looks like configure found mpicc but when mpicc was
used to compile a test program it did not know where the proper include
files or libarary files are. You can verify this by looking in the
config.log file to see the error messages resulting from that test
compile and link. I have not experienced this when I build mpich2 from
sources on a linux machine. mpicc is a shell script that runs gcc with
added -I, -L, and -l options. Is there any libmpi.* file in some
subdirectory of /usr Where is mpi.h? Where is mpicc? It seems strange to
me that binary intended to be executed by the user ends up in
/usr/lib/mpich-mpd/bin. When I install mpich2 from sources everything
is in <prefix>/bin, <prefix>/lib, and <prefix>/include
(or mpicxx). It looks like configure found mpicc but when mpicc was
used to compile a test program it did not know where the proper include
files or libarary files are. You can verify this by looking in the
config.log file to see the error messages resulting from that test
compile and link. I have not experienced this when I build mpich2 from
sources on a linux machine. mpicc is a shell script that runs gcc with
added -I, -L, and -l options. Is there any libmpi.* file in some
subdirectory of /usr Where is mpi.h? Where is mpicc? It seems strange to
me that binary intended to be executed by the user ends up in
/usr/lib/mpich-mpd/bin. When I install mpich2 from sources everything
is in <prefix>/bin, <prefix>/lib, and <prefix>/include
Re: how config mpich2 on a standalone PC?
Okay well I took your hint and compiled from mpich2 source (overcoming some problems I was having with achieving this previously).
I followed the instructions here:
http://www.underworldproject.org/docume ... ICH_source
to compile mpich2 from source.
It includes instructions on how to set the path variables, and it seems to satisfy the appropriate stages of -paran compilation.
I followed the instructions here:
http://www.underworldproject.org/docume ... ICH_source
to compile mpich2 from source.
It includes instructions on how to set the path variables, and it seems to satisfy the appropriate stages of -paran compilation.
Re: how config mpich2 on a standalone PC?
mpd could be working, since typing
$mpd
then new terminal tab and
$mpdtrace
yields:
mpdtrace: zara2_53991: lhs=zara2_53991 rhs=zara2_53991 rhs2=zara2_53991 gen=1.
However going back a few steps. I am having trouble compiling interviews.
The output of:
./configure --prefix=/home/zara2/neuron/iv/
is all yes echo etc. until a bunch of warnings.
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/Makefile
config.status: WARNING: 'src/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/Makefile
config.status: WARNING: 'src/bin/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/idemo/Makefile
config.status: WARNING: 'src/bin/idemo/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/idraw/Makefile
config.status: WARNING: 'src/bin/idraw/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/iclass/Makefile
config.status: WARNING: 'src/bin/iclass/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/include/Makefile
config.status: WARNING: 'src/include/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/lib/Makefile
config.status: WARNING: 'src/lib/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating src/include/ivstream.h
config.status: src/include/ivstream.h is unchanged
config.status: executing libtool commands
Then I can't compile because of cpp errors regarding idraw, and iclass.
zara2@zara2:~/neuron/iv$ make
Making all in src
make[1]: Entering directory `/home/zara2/neuron/iv/src'
Making all in lib
make[2]: Entering directory `/home/zara2/neuron/iv/src/lib'
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I. -I../include -g -O2 -c IV-X11/xwindow.cpp -fPIC -DPIC -o IV-X11/.libs/xwindow.o
In file included from IV-X11/xwindow.cpp:50:0:
../include/IV-X11/Xext.h:44:33: fatal error: X11/extensions/Xext.h: No such file or directory
compilation terminated.
make[2]: *** [IV-X11/xwindow.lo] Error 1
make[2]: Leaving directory `/home/zara2/neuron/iv/src/lib'
Making all in include
make[2]: Entering directory `/home/zara2/neuron/iv/src/include'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/zara2/neuron/iv/src/include'
Making all in bin
make[2]: Entering directory `/home/zara2/neuron/iv/src/bin'
Making all in iclass
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/iclass'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o iclass classbuffer.o classeditor.o classinfo.o dialogs.o direct.o globals.o iclass.o main.o ../../lib/libIVhines.la ../../lib/libUnidrawhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libIVhines.la' or unhandled argument `../../lib/libIVhines.la'
make[3]: *** [iclass] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/iclass'
Making all in idemo
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/idemo'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o idemo main.o ../../lib/libUnidrawhines.la ../../lib/libIVhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libUnidrawhines.la' or unhandled argument `../../lib/libUnidrawhines.la'
make[3]: *** [idemo] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/idemo'
Making all in idraw
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/idraw'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o idraw idarrow.o idarrowhead.o idarrows.o idcatalog.o idcmds.o idcomp.o idcreator.o iddialogs.o ided.o idkybd.o idvars.o main.o ../../lib/libUnidrawhines.la ../../lib/libIVhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libUnidrawhines.la' or unhandled argument `../../lib/libUnidrawhines.la'
make[3]: *** [idraw] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/idraw'
make[2]: Leaving directory `/home/zara2/neuron/iv/src/bin'
make[1]: Leaving directory `/home/zara2/neuron/iv/src'
In the directory:
/home/zara2/neuron/iv/include/IV-X11
I can see the file:
Xext.h
but not the directory: X11/extensions/
Perhaps under normal compilation the code makes this directory?
Do you think I have the wrong cpp compiler packages installed?
Thanks for any help.
$mpd
then new terminal tab and
$mpdtrace
yields:
mpdtrace: zara2_53991: lhs=zara2_53991 rhs=zara2_53991 rhs2=zara2_53991 gen=1.
However going back a few steps. I am having trouble compiling interviews.
The output of:
./configure --prefix=/home/zara2/neuron/iv/
is all yes echo etc. until a bunch of warnings.
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/Makefile
config.status: WARNING: 'src/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/Makefile
config.status: WARNING: 'src/bin/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/idemo/Makefile
config.status: WARNING: 'src/bin/idemo/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/idraw/Makefile
config.status: WARNING: 'src/bin/idraw/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/bin/iclass/Makefile
config.status: WARNING: 'src/bin/iclass/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/include/Makefile
config.status: WARNING: 'src/include/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating src/lib/Makefile
config.status: WARNING: 'src/lib/Makefile.in' seems to ignore the --datarootdir setting
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating src/include/ivstream.h
config.status: src/include/ivstream.h is unchanged
config.status: executing libtool commands
Then I can't compile because of cpp errors regarding idraw, and iclass.
zara2@zara2:~/neuron/iv$ make
Making all in src
make[1]: Entering directory `/home/zara2/neuron/iv/src'
Making all in lib
make[2]: Entering directory `/home/zara2/neuron/iv/src/lib'
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I. -I../include -g -O2 -c IV-X11/xwindow.cpp -fPIC -DPIC -o IV-X11/.libs/xwindow.o
In file included from IV-X11/xwindow.cpp:50:0:
../include/IV-X11/Xext.h:44:33: fatal error: X11/extensions/Xext.h: No such file or directory
compilation terminated.
make[2]: *** [IV-X11/xwindow.lo] Error 1
make[2]: Leaving directory `/home/zara2/neuron/iv/src/lib'
Making all in include
make[2]: Entering directory `/home/zara2/neuron/iv/src/include'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/zara2/neuron/iv/src/include'
Making all in bin
make[2]: Entering directory `/home/zara2/neuron/iv/src/bin'
Making all in iclass
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/iclass'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o iclass classbuffer.o classeditor.o classinfo.o dialogs.o direct.o globals.o iclass.o main.o ../../lib/libIVhines.la ../../lib/libUnidrawhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libIVhines.la' or unhandled argument `../../lib/libIVhines.la'
make[3]: *** [iclass] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/iclass'
Making all in idemo
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/idemo'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o idemo main.o ../../lib/libUnidrawhines.la ../../lib/libIVhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libUnidrawhines.la' or unhandled argument `../../lib/libUnidrawhines.la'
make[3]: *** [idemo] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/idemo'
Making all in idraw
make[3]: Entering directory `/home/zara2/neuron/iv/src/bin/idraw'
/bin/bash ../../../libtool --mode=link g++ -g -O2 -o idraw idarrow.o idarrowhead.o idarrows.o idcatalog.o idcmds.o idcomp.o idcreator.o iddialogs.o ided.o idkybd.o idvars.o main.o ../../lib/libUnidrawhines.la ../../lib/libIVhines.la -lX11 -lXext -lm
libtool: link: cannot find the library `../../lib/libUnidrawhines.la' or unhandled argument `../../lib/libUnidrawhines.la'
make[3]: *** [idraw] Error 1
make[3]: Leaving directory `/home/zara2/neuron/iv/src/bin/idraw'
make[2]: Leaving directory `/home/zara2/neuron/iv/src/bin'
make[1]: Leaving directory `/home/zara2/neuron/iv/src'
In the directory:
/home/zara2/neuron/iv/include/IV-X11
I can see the file:
Xext.h
but not the directory: X11/extensions/
Perhaps under normal compilation the code makes this directory?
Do you think I have the wrong cpp compiler packages installed?
Thanks for any help.
Re: how config mpich2 on a standalone PC?
Don't worry about those autotools warnings. If I get rid of them with one version, other warnings appear in other versions of autotools.
The problem is missing x11 extensions library. On ubuntu, I install them with
sudo apt-get libxext-dev. In fact I install the following for my development environment. Don't know if some are redundant.
sudo apt-get install mercurial bison flex automake libtool g++ rpm
sudo apt-get install libxext-dev libncurses-dev python-dev
sudo apt-get install cython alien
sudo apt-get install xfonts-100dpi
The problem is missing x11 extensions library. On ubuntu, I install them with
sudo apt-get libxext-dev. In fact I install the following for my development environment. Don't know if some are redundant.
sudo apt-get install mercurial bison flex automake libtool g++ rpm
sudo apt-get install libxext-dev libncurses-dev python-dev
sudo apt-get install cython alien
sudo apt-get install xfonts-100dpi