この記事は Microsoft MPI (MS-MPI) 9.0.1 をインストールしてみたメモです。
環境は
- Windows 10
- Microsoft MPI 9.0.1
- Visual Studio 2017
です。(2018/6/28 時点で最新版)
C++ を使う前提で書いていますが、この後書くインストール手順で FORTRAN 向けと思われるファイルもセットについてきました。
MPI について
Message Passing Interface (MPI) は並列計算の規格の1つです。
それを実装したライブラリを使うことで MPI の機能を使うことができます。
同様に並列計算によく使われる OpenMP はコンパイラで#pragma omp parallel for
のようなソースコード中の記述を読み取って並列なプログラムを生成するのに対し、MPI はライブラリをリンクしてコンパイルすると使えます。
調べた中で、Visual Studio 上で使えそうだった実装がこれからインストールの説明をする MS-MPI になります。Linux 環境だと OpenMPI が使えるようです。
インストール
Microsoft のホームページ(リンクが切れていたら「msmpi」で検索)に行って、msmpisetup.exe と msmpisdk.msi の両方をダウンロードして実行します。前者で MPI を実行する用のファイルがインストールされ、後者で MPI を使ったプログラムを作るのに必要なヘッダやライブラリがインストールされます。(ホームページに「or」って書いてあるのはミスリーディングだと思うんですが。)
インストールが終わったあと、コマンドプロンプトを開いてset MSMPI
を実行すると
MSMPI_BIN=C:\Program Files\Microsoft MPI\Bin\
MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include\
MSMPI_LIB32=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x86\
MSMPI_LIB64=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\
のようにインストールされたファイルの場所を示す環境変数が表示されます。(コンパイル・リンクの設定に使います。)
また、set PATH
でパスを確認すると、自動で実行用のファイルがある MSMPI_BIN フォルダをパスに登録してくれていることが確認できます。
使用時の設定
(参照:How to compile and run a simple MS-MPI program)
インストールが終わったところで、さっそく使ってみましょう。
特に適用する対象がない方は適当に下のソースコードをコピペしてみてください。
# include <mpi.h>
# include <iostream>
int main(int argc, char* argv[])
{
MPI_Init(&argc, &argv);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
std::cout << "Hello world from " << rank << "-th process" << std::endl;
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 0) {
std::cout << "Press enter to close" << std::endl;
std::cin.ignore(10000, '\n');
}
MPI_Finalize();
return 0;
}
実行すると
Hello world from 0-th process
Hello world from 3-th process
Hello world from 2-th process
Hello world from 1-th process
Press enter to close
のようにすべてのプロセスから Hello world するだけのプログラムです(笑)
Visual Studio だと実行終了とともに画面が閉じてしまうため、出力を確認するために MPI_Barrier
以降を書いています。
今回、追加のライブラリを使うだけのため、Visual Studio のプロジェクトを作る過程は通常通りです。
作ったプロジェクトに MS-MPI を導入するには、プロジェクトのプロパティ(プロジェクトを右クリックして下の方にある)を開き、次の設定をします。
- C/C++ -> 追加のインクルードディレクトリ に
%MSMPI_INC%;%MSMPI_INC%\x64
(64bitの場合) または%MSMPI_INC%;%MSMPI_INC%\x86
(32bitの場合) を追加します。 - リンカ -> 追加のライブラリディレクトリ に
%MSMPI_LIB64%
(64bitの場合) または%MSMPI_LIB32%
(32bitの場合) を追加します。 - リンカ -> 入力 -> 追加の依存ファイル に
msmpi.lib
を追加します。 - デバッグ -> コマンド を
mpiexec.exe
にし、その下のコマンド引数を-n 4 $(TargetPath)
(4のところはプロセス数) にします。
これでビルドし実行すると MPI でプログラムが動きます。
あとがき
プログラミングではしばしば「環境構築が最も大変」と言われますが、このライブラリは導入が簡単でよかったです。さて、何を作ろう。