超音波流体屋のプログラム備忘録
OpenMPI
最終更新:
usapfrog
-
view
環境的な問題でOpenMPI ver.1.6.5をインストールした時のメモ
インストールなど
OpenMPI現行バージョンは ver.1.10.2のため、yumでインストールすると
古いバージョンでコンパイルされているプログラムが動かない。
古いFedoraなど近いバージョンが入るなら良いが、CentOS 6.7の
yumもver.1.8程度なので自分でインストールする。
古いバージョンでコンパイルされているプログラムが動かない。
古いFedoraなど近いバージョンが入るなら良いが、CentOS 6.7の
yumもver.1.8程度なので自分でインストールする。
mpif90をifort下で使用し、mpich2との競合を考えてデフォルトprefixはさける。
tar xvfz openmpi-1.6.5.tar.gz cd openmpi-1.6.5 export MPIROOT=/usr/lib64/openmpi ./configure --prefix=$MPIROOT FC=ifort make su make install
sudo make installでもいいんだろうけど、何故か失敗したので
パスを通しておく
export PATH=$MPIROOT/bin:$PATH export LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH export FPATH=$MPIROOT/include:$FPATH
ネットワーク設定
ssh
id_rsaなどを利用してパス無しで互いにsshできるように設定しておく。
MPICH2 (mpd, hydra)の1〜4参照。
MPICH2 (mpd, hydra)の1〜4参照。
使用ポート
環境が許すならファイアウォールを切るか、
ある程度のレンジのポートを通すか、使用ポートを指定する。
CentOS7 + InfiniBand で MPI を動かす
Set MPI to run on a range of ports
OpenMPI環境変数
ある程度のレンジのポートを通すか、使用ポートを指定する。
CentOS7 + InfiniBand で MPI を動かす
Set MPI to run on a range of ports
OpenMPI環境変数
ブリッジを切る
CentOS 6はkvmがデフォルトで入っており、勝手にブリッジ接続vibr0を使用して通信エラーを起こす。
対策としては、mpiexecのオプションでeth0のみを使うようにするか、
対策としては、mpiexecのオプションでeth0のみを使うようにするか、
mpiexec -hostfile hosts --mca btl_tcp_if_include eth0 -np 2 ./a.out
vibr0をoffにしておく。
# virsh net-destroy default # virsh net-autostart default --disable # ifconfig
リストにvibr0がいないようにする。
CentOS6 で libvirt をインストールしたときに作成される virbr0 を削除する
http://d.hatena.ne.jp/nanaseg/20120217
CentOS6 で libvirt をインストールしたときに作成される virbr0 を削除する
http://d.hatena.ne.jp/nanaseg/20120217
テストコード(Fortran)
mpitest.f90
- program test
- implicit none
- include 'mpif.h'
- integer :: numprocs, my_rank, ierr
-
- call MPI_INIT(ierr)
- call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
- call MPI_COMM_RANK(MPI_COMM_WORLD, my_rank, ierr)
- call hostnm(host)
- print *, host, ': proc:', numprocs, ', rank', my_rank
-
- call MPI_FINALIZE(ierr)
-
ホストファイル(hosts, プログラムと同階層に置く)
host slots=2 slave01 slots=2
コンパイルしたら、slave01の同階層に配置するのを忘れない
cwd=`pwd -P` mpif90 mpitest.f90 #ssh slave01 "mkdir -p $cwd" #(階層未作成なら) scp a.out slave01:$cwd
起動 (mpdなどslave側設定はプログラムの配置以外は不要)
alias mp="mpiexec -hostfile hosts -np" mp 2 ./a.out
通信用ルーチン一覧は
Open MPI v1.6.4 documentation
Open MPI v1.6.4 documentation