Mac用McMaille の変更点


#author("2024-03-09T07:49:13+09:00","default:masami","masami")
#author("2024-03-09T07:52:41+09:00;2024-03-09T07:49:13+09:00","default:masami","masami")
*Mac用McMaille(回折パターンの指数付けプログラム)のコンパイル (2015/01/28) [#x74fe928]
**前書き [#n92ca1b2]
-McMailleはLe Bail先生のグリッドサーチとモンテカルロ法を使った粉末回折パターンの指数付けプログラムである。mailleはフランス語でcellのこと。McMailleはmacmyと発音する。ソースが公開されており、Windows用の実行ファイルも手に入る(コマンドラインから使うタイプ)。開発自体は2006年くらいで止まっている。先生は引退されているが、Twitterで時々つぶやかれている。粉末X線回折法による結晶構造解析総合プログラムのEXPOでは、2014版からそれまでのNTREORに加えて、Dicvol06とともにMcMailleが組み込まれてる。しかしEXPO2014のMac版ではまともに動かない([[EXPO2014使ってみた]]参照)(2015年9月リリース版ではMcMailleは動くようになった)。Windows版の実行ファイルはLe Bail先生のウェブページで手に入るので、Wine(Windows用プログラムの実行環境)を使って、Macのターミナル上で単独で使うことはできる。しかし2006年時点でコンパイルされた古いもので(Mac版EXPO2014付属のものもそれ)、またMac nativeの実行ファイルがあった方がいいので、今回Intel Fortran (MacOS X用Composer XE 2013)でコンパイルしてみた。使ったMacはMacbook Airで、OSバーションはYosemite。現在のEl Capitanでも動いている。
 McMailleはLe Bail先生のグリッドサーチとモンテカルロ法を使った粉末回折パターンの指数付けプログラムである。mailleはフランス語でcellのこと。McMailleはmacmyと発音する。ソースが公開されており、Windows用の実行ファイルも手に入る(コマンドラインから使うタイプ)。開発自体は2006年くらいで止まっている。先生は引退されているが、Twitterで時々つぶやかれている。粉末X線回折法による結晶構造解析総合プログラムのEXPOでは、2014版からそれまでのNTREORに加えて、Dicvol06とともにMcMailleが組み込まれてる。しかしEXPO2014のMac版ではまともに動かない([[EXPO2014使ってみた]]参照)(2015年9月リリース版ではMcMailleは動くようになった)。Windows版の実行ファイルはLe Bail先生のウェブページで手に入るので、Wine(Windows用プログラムの実行環境)を使って、Macのターミナル上で単独で使うことはできる。しかし2006年時点でコンパイルされた古いもので(Mac版EXPO2014付属のものもそれ)、またMac nativeの実行ファイルがあった方がいいので、今回Intel Fortran (MacOS X用Composer XE 2013)でコンパイルしてみた。使ったMacはMacbook Airで、OSバーションはYosemite。現在のEl Capitanでも動いている。
-論文:A. Le Bail, Monte Carlo indexing with McMaille, Powder Diffraction, 19, 249-254, 2004 
**コンパイル [#wb1fe9d3]
-[[こちら:http://www.cristal.org/McMaille/short-manual.html]]から一式(Ver.4)をダウンロードできる。Fortranソースがsingle CPUと並列用(openmp)の2種付属しているので、まずsingle CPU版をIntel Fortranでコンパイルしてみた。1つのFortranソースファイルからなるので、コンパイルは以下のように簡単。
 > ifort -O3 McMaille.for -o mcmaille
 [[こちら:http://www.cristal.org/McMaille/short-manual.html]]から一式(Ver.4)をダウンロードできる。Fortranソースがsingle CPUと並列用(openmp)の2種付属しているので、まずsingle CPU版をIntel Fortranでコンパイルしてみた。1つのFortranソースファイルからなるので、コンパイルは以下のように簡単。
 % ifort -O3 McMaille.for -o mcmaille
ifortはIntelのコンパイラ。-O3は最適化オプション。-oはコンパイルした実行ファイルをその後に指定した名前とするオプション。
しかしコンパイルの途中でエラーで止まる。DFLIBがないと怒られている。調べてみるとこれはLe Bail先生がコンパイルに使っていたVisual Fortranの固有ライブラリーであり、Intel Fortranでは使えないが、代替のライブラリーが用意されていることを見つけた。この場合、機能からIFCOREが対応すると当たりをつけて、DFLIBをIFCOREに変更してコンパイルすると、今度はエラーが消えた。なお、DFLIBは実行途中で止めるためのキー入力監視のために使っているだけなので、他コンパイラでこれが問題になる時は、キー入力部分をコメントアウトして、ライブラリを使わないようにすればいいだろう。
-並列版(OpenMP)もコンパイルできた。上記の変更(IFCORE)に加えて、コンパイル時のオプションで-openmpを追加するだけと簡単。
 > ifort -openmp -O3 McMaille.for -o pmcmaille
-私の場合は、並列版の実行時にlibiomp5.dylibが見つからないと怒られたが、実際にはIntelコンパイラのlibディレクトリ内にある。そこでそのディレクトリを DYLD_LIBRARY_PATH=...で設定してexportする。.bash_profileにそれを追加した。
-並列版オリジナルのままだと、全プロセッサー(実core数ではなくてhyperthread分込み)を使って実行する。私のMacbook Airだと実coreは2だが、4core扱いとなる。iMacなどで使うコア数を変えたいときは、プログラム中のPROCSという変数がプロセッサー数を規定しているので、そこを変えてやればよい。または、環境変数か、実行時に引数として与える等の実装が考えられる。並列版を実行してみると、シングル版よりもCPU分速くなっている。モンテカルロ法は並列に適しているからだろう。こういう計算ではhyperthreadingは意味がないので、Macbook Airの場合、2coreを指定しても、4core(hyperthreading)と速度に違いはない。
-付属のexample dataをいくつか実行して、正常に動作することを確認。single CPU版でも、Wineで古いWindows用実行ファイルを使うよりは倍近く速い感じだ。
-計算終了後に何かキー入力をしないと実行が終わらないのは煩わしいと感じたので、その部分をコメントアウトした(3955 FORMAT文の前後の行)。
 % ifort -openmp -O3 McMaille.for -o pmcmaille
 私の場合は、並列版の実行時にlibiomp5.dylibが見つからないと怒られたが、実際にはIntelコンパイラのlibディレクトリ内にある。そこでそのディレクトリを DYLD_LIBRARY_PATH=...で設定してexportする。.bash_profileにそれを追加した。
 並列版オリジナルのままだと、全プロセッサー(実core数ではなくてhyperthread分込み)を使って実行する。私のMacbook Airだと実coreは2だが、4core扱いとなる。iMacなどで使うコア数を変えたいときは、プログラム中のPROCSという変数がプロセッサー数を規定しているので、そこを変えてやればよい。または、環境変数か、実行時に引数として与える等の実装が考えられる。並列版を実行してみると、シングル版よりもCPU分速くなっている。モンテカルロ法は並列に適しているからだろう。こういう計算ではhyperthreadingは意味がないので、Macbook Airの場合、2coreを指定しても、4core(hyperthreading)と速度に違いはない。
 付属のexample dataをいくつか実行して、正常に動作することを確認。single CPU版でも、Wineで古いWindows用実行ファイルを使うよりは倍近く速い感じだ。
 計算終了後に何かキー入力をしないと実行が終わらないのは煩わしいと感じたので、その部分をコメントアウトした(3955 FORMAT文の前後の行)。
**McMailleの使い方 [#iee21910]
-ダウンロードしたファイルにマニュアルや論文が入っている。テストデータも豊富。black boxモードで使う場合は、とりあえずshort-manual.htmlをウェブブラウザーを使って最初に読んでおく。モンテカルロ法なので計算によっては時間がかかる。実行中に途中で止めるにはKキーを押す(Kill)。実はこのキー入力処理のためにDFLIB(IFCORE)を使っている。
-McMailleは強度も情報として使うため、入力データには回折ピーク位置だけではなく、ピーク強度も必要である。そのため、TREOR, Dicvolの入力データはそのままでは使えない。強度情報がない場合は、姑息であるが、強度を全て100とする。
-EXPO2014を使うと、粉末回折データからMcMaille用入力データを作ることが可能。方法は[[EXPO2014使ってみた]]を見てください。
-定性分析用ソフトのQualX2はピークサーチした結果をリスト(角度、強度)で出力できるので、これの出力が使えるかもしれない。FOXは指数付けが出来てないと強度の抽出がそもそもできないので、この目的には使えない。
-個人的に回折データ処理のプログラムをPythonで作っているので、McMailleの入力用ファイルもオプションで出力できるようにする予定。
 ダウンロードしたファイルにマニュアルや論文が入っている。テストデータも豊富。black boxモードで使う場合は、とりあえずshort-manual.htmlをウェブブラウザーを使って最初に読んでおく。モンテカルロ法なので計算によっては時間がかかる。実行中に途中で止めるにはKキーを押す(Kill)。実はこのキー入力処理のためにDFLIB(IFCORE)を使っている。
 McMailleは強度も情報として使うため、入力データには回折ピーク位置だけではなく、ピーク強度も必要である。そのため、TREOR, Dicvolの入力データはそのままでは使えない。強度情報がない場合は、姑息であるが、強度を全て100とする。
 EXPO2014を使うと、粉末回折データからMcMaille用入力データを作ることが可能。方法は[[EXPO2014使ってみた]]を見てください。
 定性分析用ソフトのQualX2はピークサーチした結果をリスト(角度、強度)で出力できるので、これの出力が使えるかもしれない。FOXは指数付けが出来てないと強度の抽出がそもそもできないので、この目的には使えない。
 個人的に回折データ処理のプログラムをPythonで作っているので、McMailleの入力用ファイルもオプションで出力できるようにする予定。