FX・日経225先物の分析・検証と自動売買を支援

windowsでgfortran+MPIの導入

背景

MPI(=並列計算)がしたい。fortranのプログラムコードは自分で書く。

MPIのプログラムコードは書けるけど、windows(10)でMPIの環境構築をしたことがない。

今回は、windowsでgfortranが+MPIが使えるようにしたので、その備忘録

やったこと

・msmpisetup.exe と msmpisdk.msiのダウンロードとインストール

https://www.microsoft.com/en-us/download/details.aspx?id=56727

・Git for windows SDK を用いたMSYS2のインストール

https://github.com/git-for-windows/build-extra/releases

・環境変数に「C:\git-sdk-64\mingw64\bin」 を追加

コマンドプロンプトでもgendefやdlltoolコマンドを使えるようにするため

・C:\Program Files (x86)\Microsoft SDKs\MPI\Include\x64内のmpifotr.hを実行フォルダにコピペ

以前入れていた「C:\TDM-GCC-64\bin」のgfortranとパスがケンカして動作不要を起こしている雰囲気があったので、そちらのパスを環境変数から無効化(パス名に[___]を追加して通らないようにした)

⇒その後、gfortranはTDMの方のパスと復活させた

gfortanはTDMの方を使うべし(git-sdkのバージョンが新しすぎてバグがあった!?)

・ 環境変数に「C:\git-sdk-64\usr\bin」 を追加

git-sdk-64 のgfortranが使えるようになる

git-sdk(=mingw64)のgfortranを利用したからエラーやワーニングが発生したっぽい。発見理由は、TDMのgfortranでmpi.f90をコンパイルした後に、mingwのgfortranの方にパスを変更していて、そこからエラーが多発。その後、mpi.f90のコンパイルをやり直したら、mpi.f90すらコンパイルできなかった。そこで、TDMの方に直したらできた。しかも、MPIの実行成功も確認できた。

次に、「mpi.f90」か「mpif.h」のどちらを利用するかでやり方が変わる。

ちなみに、学生時代はmpif.hの方を使っていたけど、環境も全然ちがうし、ワーニングもいっぱい出てくるので「mpi.f90」の方を今後は使おうとおもう。たぶん、有償であるインテルコンパイラとかを使えば、苦労はないのかな?知らんけど

gfortranのコンパイラの選択ミス(かも)。(確認はしてないが)TDMの方のgfortranならmpif.hでも成功するかも

mpi.f90を利用する場合

・C:\Program Files (x86)\Microsoft SDKs\MPI\Include内のmpi.f90を実行フォルダにコピペ

・mpi.f90を編集、その後edit_mpi.f90に変更(書き換えたファイルと区別のため)

変更箇所:「 PARAMETER (MPI_ADDRESS_KIND=INT_PTR_KIND()) 」⇒「 PARAMETER (MPI_ADDRESS_KIND=8) 」

モジュールとして変数を準備する感じ。

>gfortran hello_use.f90 -o uuu libmsmpi.a

>mpiexec -n 4 uuu.exe

mpif.hを利用する場合

C:\Program Files (x86)\Microsoft SDKs\MPI\Include内のmpif.hを実行フォルダにコピペ

mpif.hを編集、その後edit_mpif.hに変更(書き換えたファイルと区別のため)

変更箇所:「 PARAMETER (MPI_ADDRESS_KIND=INT_PTR_KIND()) 」⇒「 PARAMETER (MPI_ADDRESS_KIND=8) 」

>gfortran -fno-range-check -o aaa libmsmpi.a

参考にしたところはこれでいけると書いてあったが、エラーを大量にだされた。

>gfortran -fno-range-check -fallow-invalid-boz hello.f90 -o aaa libmsmpi.a

としたら、一応成功した。

 ただし、以下のようなワーニングが大量にでる。けど、一応使えた。

Warning: BOZ literal constant at (1) is neither a data-stmt-constant nor an actual argument to INT, REAL, DBLE, or CMPLX intrinsic function

>mpiexec -n 4 aaa.exe

で実行

補足

調べてるとケンカするアプリがあるみたいなので、アンインストールが必要っぽい(入ってなかったけど、今後のためにメモ)

・Microsoft HPC Pack 2008 R2 のアンインストール

TDMを利用したgfortran

http://www.compe.media.kyoto-u.ac.jp/syoseki/windows/windows-gfortran.html

参考リンク

http://www.eng.niigata-u.ac.jp/~yamashita/heiretu/gfortran%20%E3%81%A8%20microsoft%20mpi%20%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%20windows%20%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%A7%E3%81%AE%20%E4%B8%A6%E5%88%97%E8%A8%88%E7%AE%97%20%E7%92%B0%E5%A2%83%20%E8%A8%AD%E5%AE%9A%E3%81%AE%E4%B8%80%E4%BE%8B%20.pdf

https://qiita.com/michioga/items/fae993892a808d488648

https://github.com/git-for-windows/build-extra/releases