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でも成功するかも
・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
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