====== 概要 ======
* 共有メモリを使う並列計算ならばOpenMPが便利ですが、ワークステーションやスーパーコンピュータとなってくると分散メモリなのでMPIが必須になってきます。
* 他のオープンソースのMPI実装としてMPICHがありますが、どちらも性能はそんなに変わらないようです。
* OpenMPIとMPICH (Intel Parallel Studio XE に含まれる Intel MPI も同様) を同時に入れるとうまく動作しなくなるので、インストールはどちらか片方にしてください。
* aptでも入手することができます
$ sudo apt install openmpi-bin libopenmpi-dev
====== インストール ======
===== 検証環境 =====
* Ubuntu 18.04 LTS
===== 準備 =====
事前に[[数値計算ライブラリ:GCC]]のインストールを済ませてください。
===== 入手 =====
以下のサイトからダウンロードできます。
* [[https://www.open-mpi.org/|Open MPI: Open Source High Performance Computing]]
記事執筆時点での最新版は4.0.2です。
===== インストール =====
ダウンロードしたファイルはホーム・ディレクトリにおいてください。 これを展開します。
$ tar xzvf openmpi-4.0.2.tar.gz
$ cd openmpi-4.0.2
インストール前に、インストール先とコンパイラを指定します。
$ ./configure --prefix=/usr/local/openmpi-4.0.2 CC=gcc CXX=g++ FC=gfortran
ビルドします。
$ make all
$ sudo make install
===== 環境設定 =====
~/.bashrcを開いて、ファイルの最後に次の文を付け加えます。
MPIROOT=/usr/local/openmpi-4.0.2
PATH=$MPIROOT/bin:$PATH
LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH
MANPATH=$MPIROOT/share/man:$MANPATH
export MPIROOT PATH LD_LIBRARY_PATH MANPATH
編集が終わったら
$ source ~/.bashrc
で再度読み込みます。
$ mpif90 -v
$ mpicc -v
などで、インストールが成功したか確認できます。
===== コンパイルと実行 =====
コンパイルは、
*Fortranの場合
$ mpif90 -o test test.f90
* C++の場合
$ mpicc -o test test.cc
でできます。
コンパイルオプションの付け方はgfortranやgcc, g++のときと同じです。 MPIで実行する場合は
$ mpirun -n 2 test
ここで-nで指定してるのはプロセスの数(並列数)です。
==== 注意 ====
* OpenMPIの並列数は、最大でも物理コア数までにします。
* IntelのCPUだとハイパースレッディングにより論理コアが物理コアの2倍に見えますが、並列数を論理コア数にして計算すると実行速度が著しく低下することがあります。
* 最近のOpenMPIは並列数を物理コア数よりも大きくするとエラーが出るようになりました。
====== 参考資料 ======
* [[http://e-kwsm.hatenablog.com/entry/2015/01/03/140425]]