😎

HΦのbuild (Intel Mac編)

2022/02/16に公開

はじめに

\mathcal{H}\Phiは量子多体格子系の数値対角化を行うpackageです.
今回は\mathcal{H}\PhiをmacOSでbuildしてみたいと思います.

環境

今回はIntel Macです.

  • MacBook Pro (2017)
  • macOS Catalina 10.15.7

M1 Macは持っていないので購入する機会があればやってみます.

要件(使用libraryなど)

\mathcal{H}\Phiのbuildには以下のcomplierやlibraryが必要です.

  • C compiler
  • Fortran compiler (付属するK\omegaなどのbuildに使われます)
  • CMake (version 2.8.0以上)
  • BLAS/LAPACK
  • (MPI library)

\mathcal{H}\PhiにはIntel compiler用のCMakeの設定が用意されていますのでそれを使用します.
Intelが開発環境を提供するoneAPIを使用してIntel C/Fortran compilerとLAPACK (Intel MKL)を用意します.

今回はMPIを使用しません.
これはoneAPIがmacOS用のMPI libraryを提供してくれないことに起因していますが, 自分でOpenMPIなどのMPI libraryを自分で用意すればbuildできるはずです(未検証).

CMakeのinstall

brewがあれば

terminal
brew install cmake

するだけです.

参考

oneAPIのinstall

ここからIntel oneAPI Base ToolkitIntel oneAPI HPC Toolkitをdownload & installしてください.
基本的にinstallerの指示に従うだけです.
ただ, Intel Pythonが既に導入されているPython環境を破壊するのでinstallするsoftwareから外した方が良いです.

\mathcal{H}\Phiのdownload & 展開

\mathcal{H}\Phiのsource codeを落としてきて展開します
今回は現在最新版のversion 3.5.0をbuildします.
今後もupdateされると思いますので, 以下のcommand中の3.5.0こちらから最新版(あるいはお好みのversion)を確認して適宜置き換えてください.

terminal
wget https://github.com/issp-center-dev/HPhi/releases/download/v3.5.0/HPhi-3.5.0.tar.gz
tar xvf HPhi-3.5.0.tar.gz

あるいはwgetがなければ

terminal
curl -OL https://github.com/issp-center-dev/HPhi/releases/download/v3.5.0/HPhi-3.5.0.tar.gz
tar xvf HPhi-3.5.0.tar.gz

build

展開するとHPhi-3.5.0 directoryができるので移動してbuildします.

terminal
cd HPhi-3.5.0
cmake -S . -Bbuild -DCONFIG=intel -DENABLE_MPI=OFF
cmake --build build

以上のcommandでHPhi-3.5.0directoryの下にbuild directoryが作成され, その下に\mathcal{H}\Phiがbuildされます.
buildは別のdirectoryでも構いませんのでお好みで変更してください.

PATHを通す

\mathcal{H}\Phiのexcutableはbuild directory下のsrcdirectoryに作成されます.
適宜PATHを通すなどして実行できるようにしてください.

terminal
export PATH=$PATH:SOME_DIR_PATH/HPhi-3.5.0/build/src/

SOME_DIR_PATHは適宜\mathcal{H}\Phiのsource codeを展開したdirectory名に置き換えてください.

buildに失敗したとき

buildに失敗した場合は, build directoryを消してやり直してください.

terminal
rm -r build

buildの確認 & 計算の実行

動作確認

以下ではPATHを通すなどして\mathcal{H}\Phiが実行可能な状態になっているという前提で\mathcal{H}\Phiのbuildに成功したかどうかを確認します(もちろんCMake/makeがerrorを吐いていないというのが前提です).

まず

terminal
HPhi -v


HPhi version 3.5.0 

と返ってくることを確認してください.
実行できなかった場合はPATHを確認するなどしてください.

sampleの実行

次にsampleを実行して動作確認します.
HPhi-3.5.0/samples directoryにtutorial用のinput fileがありますので適宜好きなtutorialを実行してみてください.

\mathcal{H}\Phiを実行するには以下のようにします.

terminal
# standard mode
HPhi -s stan.in

# expert mode
HPhi -e namelist.def

今回はinput fileの書き方などについては触れません.
詳しくは\mathcal{H}\Phiのmanualを参照してください.

あるいは, HPhi-3.5.0 directoryで

terminal
 open doc/userguide_HPhi_ja.pdf

を実行してもmanualが確認できます.

なお, stan.innamelist.defはinput file名で実際の計算やtutorial毎に名前が異なる場合があるので注意してください.

また, tutorialによって前処理/後処理があるものがありますので, 基本的にそれらを含めて行うshell script run.shを実行する方が良いです.

terminal
cd samples/tutorial_1.1
bash run.sh

tutorialの一括実行

tutorialを一括実行するPython 3のscriptがありますのでPython 3があれば使用できます.

terminal
cd samples
python do_all.py ../build/src/HPhi

以下のような出力が出ます.

#########Test 1/14#############
Check: tutorial_1.1
Start calculation.
elapsed_time:1.2598011493682861[sec]
OK  : SOME_DIR_PATH/HPhi-3.5.0/samples/tutorial_1.1
#########Test 2/14#############
.
.
.

全てOKが出れば問題ありません.

自分の場合はTest 13/14(tutorial_4.2)で

dyld: Library not loaded: @rpath/libmkl_intel_lp64.2.dylib
  Referenced from: SOME_DIR_PATH/HPhi-3.5.0/build/src/HPhi
  Reason: image not found

と出てきましたがtestはpassしており, 対応する操作を手でやってみたところ何も問題が発生しなかったので謎です...

まとめ

terminal
wget https://github.com/issp-center-dev/HPhi/releases/download/v3.5.0/HPhi-3.5.0.tar.gz
tar xvf HPhi-3.5.0.tar.gz
cd HPhi-3.5.0
cmake -S . -Bbuild -DCONFIG=intel -DENABLE_MPI=OFF
cmake --build build

なお, makeの-j optionを使う場合はcmake --build buildの前に

export MAKEFLAGS=-j8

とします. この例は8並列です.
https://stackoverflow.com/questions/41684793/from-cmake-setup-make-to-use-j-option-by-default

CMake 3.12以降であれば-j optionをそのまま指定できます.

cmake --build build -j8

Discussion