Geant4.9.5のMPI | emacsのブログ

emacsのブログ

いろいろ。

超久々に更新

最近まったく使っていなかったので、備忘録的なことも書くことにしました。

Geant4.9.4まではMPIで並列化して動かしていたが、9.5からcmakeになったせいかうまく動かなかったが動かし方がわかったのでメモ

ライブラリーのインストールはreadmeに従えばいいはず。

サンプルのコンパイルが上手く行かなかった。
exMPI01の例:
exMPI01ディレクトリと並んでexMPI01-buildディレクトリを作ってそこでcmakeする。
もとのディレクトリは弄りたくないのでこの方がいいんじゃないかな。
cmakeはreadmeに従ってやる。

cmakeするとmakeファイルができるのでmake
ここでエラーが出ていた。
エラーの内容は
geant4.9.6.p02-install/lib/Geant4-9.6.2/../libG4mpi.so: undefined reference to `G4VBasicShell::GetCurrentWorkingDirectory() const'
とか
geant4.9.6.p02-install/lib/Geant4-9.6.2/../libG4mpi.so: undefined reference to `G4VUIshell::~G4VUIshell()'
などG4VBasicShellとG4VUIshell関連
これは/exMPI01-build/CMakeFiles/exMPI01.dir の中にあるlink.txtが原因だった。
link.txtにはライブラリーのフルパスが書いてあったのだが、よくわかんないけど読み込む順番のせいでG4VBasicShellとG4VUIshell関連のlibG4interfaces.soがうまく読み込まれていなかったらしい。
なのでlink.txtの最後にlibG4interfaces.soのフルパスをもう一度書いたらmakeが通った。
ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

make後 make install をすれば(cmakeのオプションで)指定したディレクトリ(指定していなければ/usr/local/bin)に実行ファイルがコピーされるけど、makeの段階でビルドディレクトリに実行ファイルができるのでやらなくてもいい。

流れとしては
0. ライブラリーのインストール (readmeに従う 1回だけ)
1. MPI用にソースを書く
2. buildディレクトリを作る
3. buildディレクトリでcmake (cmakeファイルはexMPI01などから流用)
4. make (エラーがでたらlink.txtを疑う)
5. make install (やらなくてもいい)
6. 実行
という感じ。

OpenMPIを使っているのでそれのインストールも後で書く。

Geant4は今後はcmakeでいくらしいのでcmakeを勉強した方がいいんだろうな。
makeすらよくわかんないけど(´・ω・`)