超音波流体屋のプログラム備忘録

OpenMPI

最終更新:

usapfrog

- view
管理者のみ編集可
環境的な問題でOpenMPI ver.1.6.5をインストールした時のメモ

インストールなど

OpenMPI現行バージョンは ver.1.10.2のため、yumでインストールすると
古いバージョンでコンパイルされているプログラムが動かない。
古い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参照。

使用ポート

環境が許すならファイアウォールを切るか、
ある程度のレンジのポートを通すか、使用ポートを指定する。
CentOS7 + InfiniBand で MPI を動かす
Set MPI to run on a range of ports
OpenMPI環境変数

ブリッジを切る

CentOS 6はkvmがデフォルトで入っており、勝手にブリッジ接続vibr0を使用して通信エラーを起こす。
対策としては、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

テストコード(Fortran)

mpitest.f90
  1. program test
  2. implicit none
  3. include 'mpif.h'
  4. integer :: numprocs, my_rank, ierr
  5.  
  6. call MPI_INIT(ierr)
  7. call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
  8. call MPI_COMM_RANK(MPI_COMM_WORLD, my_rank, ierr)
  9. call hostnm(host)
  10. print *, host, ': proc:', numprocs, ', rank', my_rank
  11.  
  12. call MPI_FINALIZE(ierr)
  13.  

ホストファイル(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
目安箱バナー