はじめに
しばらく前から開発環境をVisual Studio 2013(VS2013))に変更しました。既にVisual Studio2015も出ていますが、Intel C++が対応してくれるまで、もう暫くVS2013のままで行きます。さて、Microsoft製のMPI(MS-MPI)も前回の記事以降versionが2つも更新されまして、version 6(v6)となりました。今回から、ダウンロード先での表示もHPCパックの付属品という表記から独立したMS-MPI v6という表記に変ったようです。インストールは前回までとほぼ同様なのでスムーズに導入できました。
このメモ時点での環境。すでにVisual Studioはインストール済みの環境を想定しています。
- OS:Windows 7 pro. 64bit
- C++コンパイラ:Visual Studio 2013 community
Visual Studio 2015とMS-MPI v7でも同様の方法で利用できました。
追記:2016/07/28
MPI並列でもデバッグ実行できる方法に気付きました。こちらへどうぞ。
追記:2016/10/31
パス登録の方法を「VC++ディレクトリ」を変更しない方法へと修正しました。 「VC++ディレクトリ」を変更してしまうとIntelコンパイラを利用する場合にパスがうまく切り替わらない問題の為。
MS-MPIの取得
MS-MPIはMicrosoftのダウンロードセンターから取得できます。この記事を書いている現時点でのリンクはhttps://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx
の中あたりにリンクがあります。ただし、Microsoftのリンクアドレスは頻繁に変わるので、最新のものを取得するようにしてみてください。 また、前回までは64bitか32bitかの選択項目があった気がしますが、今回はありませんね。 ここで、msmpisdk.msiとMSMpiSetup.exeの二つともインストールする必要があります。 前者はincludeやlibのファイル、後者は計算実行時のmpiexecがインストールされます。
MS-MPIのインストール
さて、msmpisdk.msiをダウンロードしたら、クリックしてそのままインストールしましょう。 ただし、以前のバージョンのMS-MPIをインストールしてある場合は、手動で案インストールしておけと警告が出ます。従いましょう。 あとはインストーラーの設定に従って進んでください。今回はインストールディレクトリの変更はしないものとして話を進めます。 前回のメモのversion(v4)までとは、デフォルトのインストールディレクトリが変わりました。
includeやlibのインストール場所は
C:\Program Files (x86)\Microsoft SDKs\MPI\
mpiexecのインストール場所は
C:\Program Files\Microsoft MPI\
になりましたね。
MS-MPIのパスをVisual Studioに登録
インストールができたら、Visual Studioにインストールディレクトリのパスを登録します。
(追記:2016/10/31の新しい設定方法)
まず目的のプロジェクトファイルを開き、メニューから「プロジェクト」→「プロパティ」を開きます。 すると別窓でプロパティーページが開きます。その左側のツリーの中から「構成プロパティ」を選んで以下を設定します。
- 「C/C++」→「全般」→追加のインクルードディレクトリに $(MSMPI_INC) を追加
- 「リンカー」→追加のライブラリディレクトリに $(MSMPI_LIB64) を追加(x64の場合)
- 「リンカー」→追加のライブラリディレクトリに $(MSMPI_LIB32) を追加(x86の場合)
- 追加の依存ライブラリ:msmpi.lib
※以下の「VC++ ディレクトリ」を変更する方法は非推奨です。Intelコンパイラの使用時に、パスが切り替わらない問題が起こるためです。よって、上述の方法でパスを設定することを推奨します。
VS2013とVS2012では、「VC++ ディレクトリ」によるパスの登録方法はほぼ一緒です。 まず目的のプロジェクトファイルを開き、メニューから「プロジェクト」→「プロパティ」を開きます。 すると別窓でプロパティーページが開きます。その左側のツリーの中から「構成プロパティ」→「VC++ ディレクトリ」を選びます。
次のようにMS-MPIのディレクトリを追加していきます。 以前のversionからかなり変わっているので注意しましょう。 開発環境が64bitOSであっても、x86用の32bitアプリケーションソフトを作ることが可能です。目的に合わせてライブラリの設定値は変えてください。 細かい操作方法は省きます。
- 実行可能ディレクトリ:C:\Program Files\Microsoft MPI\Bin
- インクルードディレクトリ:C:\Program Files (x86)\Microsoft SDKs\MPI\Include
- ライブラディレクトリ(x64の場合):C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64
- ライブラディレクトリ(WIN32(x86)の場合):C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x86
- 追加の依存ライブラリ:msmpi.lib
編集してしまった「VC++ ディレクトリ」の各設定をデフォルトに戻す方法も書いておきます。 各項目の行の右端の▽ボタンから開くドロップダウンリストから、<親またはプロジェクトの既定値から継承>を選びます(<編集>を選ぶと次のウィンドウが開くのでダメです)。 その状態でウィンドウ右下の「適用」ボタンを押せば、デフォルト項目が入力されます。 Intelコンパイラを使っている場合は、VC++との切り替え時にデフォルト設定からしかこのパスを自動編集しないようなので、 デフォルトに戻しておくことをお勧めします。
Visual Studio上でのMPIプログラム実行のための設定
今後もVisual Studio用のdebuggerは公開されないのでしょうか。 ここでは暫定的に、Visual Studio上からF5キーでexeを実行できるようにします。 プロパティーページの左側のツリーの中から「構成プロパティ」→「デバッグ」を選び、右の設定項目の中で以下の設定をします。- 起動するデバッガー:ローカル Windows デバッガー
- コマンド:$(MSMPI_BIN)mpiexec.exe (追記:2016/10/31ここで$(MSMPI_BIN)を使ってパスを指定
- コマンド引数:-n プロセス数 $(TargetPath)
- 環境:OMP_NUM_THREADS=スレッド数 (OpenMPでhybrid並列にする場合)