スパコンでHPXをbuildする
はじめに
HPXはC++ 並列・並行計算libraryです.
とりあえず動いたので試したい人にこれでbuildできたという情報を共有します.
ちなみにvcpkg/Spack/dnfとか使える場合はこんなことしなくて良いです↓.
環境はRed Hat Enterprise Linux release 8.6 (Ootpa)で, CPUは128論理コアのものを使っています.
buildに必要なもの
buildにはCMakeを使います.
buildに必要なlibraryはBoostとhwlocです.
TCMallocは使わなくてもbuildは可能ですが使わないと遅いとキレられるので入れます[1][2].
HPXのbuildに関する詳細な情報はこちらです.
やること
- CMakeの準備(省略)
- Boostのdownload
- hwlocのbuild
- tcmallocのbuild
- HPXのbuild
Boostのdownload
公式websiteから落とします.
Boostを置きたい場所で以下を実行します.
wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz
tar xvf boost_1_81_0.tar.gz
versionは適宜読み替えてください.
Boostのbuildの必要性
HPXはAsioを要求するのですが, Boost.Asioを使いたい場合はBoostのbuildが必要です.
最初はBoost.Asioを使おうとしていたのですがBoost.Asioのversion情報がうまく渡せなくて動かなかったので, -DHPX_WITH_FETCH_ASIO=ON
を指定してHPXに落としてきてもらいました.
HPXに落としてもらう場合はBoostのbuildは不要です.
この設定を使うとAsioを落とすために外部と通信する必要があるため, 計算nodeではbuildの設定ができないことに注意してください.
hwlocのbuild
公式websiteから落としてGNU Autotoolsでbuildします.
hwlocのsourceを置きたい場所で以下を実行します.
wget https://download.open-mpi.org/release/hwloc/v2.9/hwloc-2.9.0.tar.gz
tar xvf hwloc-2.9.0.tar.gz
mkdir hwloc-2.9.0/build && cd hwloc-2.9.0/build
../configure --prefix=$HOME
make
make install
versionは適宜読み替えてください.
--prefix
にはhwlocのbinaryを置く場所を指定してください.
恐らくdefaultが/usr/local/
でスパコンuserは使えないと思うのでどこか使える場所を指定してください.
またbuild directoryをbuild
にしていますが, 他の名前でも問題ありません.
tcmallocのbuild
gperftoolsのreleaseから落としてbuildします.
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz
tar xvf gperftools-2.10.tar.gz
cd gperftools-2.10
cmake -S . -Bbuild
cmake --build build
versionは適宜読み替えてください.
説明が見つからなくて適当にやったので間違っていたら教えてください.
HPXのbuild
HPXのdownload
まずHPXのリリースを落として展開します.
wget https://github.com/STEllAR-GROUP/hpx/archive/refs/tags/1.8.1.tar.gz
tar xvf 1.8.1.tar.gz
versionは適宜読み替えてください.
buildの設定
展開したHPXのdirectoryに移動して以下を実行します.
cmake -S . -Bbuild -DCMAKE_INSTALL_PREFIX=$HOME -DBOOST_ROOT=$HOME/boost_1_81_0 -DHPX_WITH_FETCH_ASIO=ON -DHWLOC_ROOT=$HOME/hwloc-2.9.0/build/hwloc/.libs -DTCMALLOC_ROOT=$HOME/gperftools-2.10/build -DTCMALLOC_INCLUDE_DIR=$HOME/gperftools-2.10/build/gperftools -DHPX_WITH_MORE_THAN_64_THREADS=ON -DHPX_WITH_MAX_CPU_COUNT=128 -DHPX_WITH_PARCELPORT_MPI=ON -DHPX_WITH_PARCELPORT_TCP=OFF
変数に渡している値は私が用いたものですので, 実行する際は適宜書き換えてください.
各変数については以下で説明します.
変数の説明
ここに登場していない変数も多数ありますので他の変数が気になる方はこちらを読んでください.
-S
, -B
-S
はsourceのdirectory, -B
はbuild directoryを指定します.
build directoryの名前はbuild
以外でも構いませんので-Bhoge
などのように変更できます.
-DCMAKE_INSTALL_PREFIX
HPXのbinaryを置く場所を指定します.
default設定が/usr/local/
でスパコンuserは使えないと思うのでどこか使える場所を指定してください.
-DBOOST_ROOT
そのままですがBoostのrootの場所を指定します.
-DHPX_WITH_FETCH_ASIO=ON
AsioをHPXに落としてもらう場合に指定します.
Boost.Asioを使う場合はこの変数の指定は不要です.
-DHWLOC_ROOT
そのままですがhwlocのrootの場所を指定します.
-DTCMALLOC_ROOT
そのままですがTCMallocのrootの場所を指定します.
-DTCMALLOC_INCLUDE_DIR
そのままですがTCMallocのincludeする場所を指定します.
-DHPX_WITH_MORE_THAN_64_THREADS=ON
65 thread以上の計算を走らせるには-DHPX_WITH_MORE_THAN_64_THREADS=ON
を指定します.
64 thread以下の計算しか行わない場合はこの変数の指定は不要です.
-DHPX_WITH_MAX_CPU_COUNT
-DHPX_WITH_MAX_CPU_COUNT
はHPXで扱える最大CPU数を指定します.
defaultは64で論理coreの数以上にした方が良いようです.
論理coreの数が64以下の場合はこの変数の指定は不要です.
-DHPX_WITH_PARCELPORT_MPI=ON
/-DHPX_WITH_PARCELPORT_TCP=OFF
通信にMPIを使う場合に指定するoptionです.
defaultは-DHPX_WITH_PARCELPORT_MPI=DFF
/-DHPX_WITH_PARCELPORT_TCP=ON
ですが遅いのでMPIを使った方が良いそうです.
MPIを使わない場合これらの変数の指定は不要です.
buildの実行
設定が完了したらbuildを実行します.
cmake --build build --target install
以上です.
実際にHPXを動かしてみたい方はHPXのhello worldなどを見てください.
-
gperftoolsのものとGoogle repositoryのものがあります.
後者のbuildにBazelというbuilderが必要で面倒なので前者にします. ↩︎ -
ちなみに必ずしもTCMallocである必要はなく, jemalloc, mimalloc, tbbmallocにも対応しているようです. ↩︎
Discussion