#openmpiとopenmpとは
※ openmpiとopenmpは別物
- MPI(openmpiとmpich2)はどちらも並列するためのライブラリ
- openmpはスレッド並列するためのライブラリ
- MPIでは各プロセスが占有のメモリ領域を扱うのに対し、 OpenMPではメモリを共有してアクセスすることができる。
#目的
MPIとopenmpを用いたハイブリッド並列を使い計算速度を上げる。
#Mac固有の問題
mac以外の場合、最近のgccはopenmpをサポートしているので素直にopenmpiをインストールすれば良い。
しかしMacだと以下の点でめんどい
通常macではパッケージ管理ソフトとしてbrewを使う。
brewを使いインストールするとコンパイラがclangが選択されてしまう(clangはopenmpがサポートされていない)
なのでgccを基にしたopenmpiをインストールする必要がある
#インストール
##gccのインストール(もし入っていなければ)
###チェック方法
gcc --version
をやってgcc (GCC)ほにゃほにゃってメッセージが返ってこなかったり、clangって返ってきたらgccは入ってないです。
###パッケージ管理ソフトbrewを使いインストールする
- brewの導入
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- brewを使いgccの導入
brew update
sudo brew install gcc49
ln -s /usr/local/bin/gcc-4.9 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-4.9 /usr/local/bin/g++
※gcc49は現在(1015/1月)の最新バージョン(ver4.2以上をインストールすること openmpに対応したのが4.2以降なので)
※sudo 使うとmacのログインパスワード聞かれるので入力
OpenMPIを手動でインストール(brewが使えないため)
- ソースをダウンロードして解凍(wgetがないならhome brewで入れて下さい)
wget http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.3.tar.gz
tar xzvf openmpi-1.8.3.tar.gz
※ http://www.open-mpi.org/ にある最新バージョンを使って下さい
- コンパイルの設定ファイル(Makefile)を生成
cd openmpi-1.8.3
./configure CC=gcc CXX=g++ F77=gfortran FC=gfortran --enable-mpi-thread-multiple --prefix=インストール先のディレクトリ
- コンパイルしてインストール
sudo make
sudo make install
※途中でmacのログインするときのパスワード聞かれるかも
- pathを通す
bashを使っているのなら ~/.bashrcに以下を記述
# for openmpi
export MANPATH=インストールしたディレクトリ/share/man:$MANPATH
export LD_LIBRARY_PATH=インストールしたディレクトリ/lib:$LD_LIBRARY_PATH
export PATH="インストールしたディレクトリ/bin:$PATH"
- パスの確認
ターミナルを再起動
mpic++ --version
これで反応があるともう使える状態になっている。
使い方はまた今度
一応使い方のサンプルが乗っているサイト(openmpiのみでopenmpi+openmpのハイブリッドな使いたではないが)
http://auewe.hatenablog.com/entry/2013/06/16/172844