科学技術計算の配列データ読み書きでよく用いられているHDF5を以前から導入したいと思っていました。しかし、Pythonの記事は多くあるものの実際にシミュレーションで使用するC++での利用について触れられた資料があまりなかったので導入に少し苦戦しました。シミュレーションでHDF5を使ってみたいと考えている方の役に立てばと思います。
導入の経緯
3Dシミュレーションなどを行っていると、粒子の座標情報など非常に大きなデータを吐き出す場面が多々あります。このような情報をテキストデータとして書き出してもよいのですが、ファイルへの書き出しとプロット時の読み込みが遅いことを不満に感じていた。
HDF5について
いきなりインストール方法について書いてもよいが、せっかくなのでHDF5の特徴について少しだけ触れておきたいと思います。
- 階層構造を持ったデータを保存できる。例えば、分子シミュレーションなどでステップごとに粒子配置のファイルを生成する必要がなく一つの.h5ファイルに保存することができる。
- バイナリ形式で保存されるため、テキストファイルと比較すると非常に早く読み書きできる。
- 計算を行う際のパラメータなどを属性として保存できるので、どのような条件で計算して得られたデータであるのか把握しやすい。
インストール
科学技術計算では通常、ローカルマシンからリモート(計算機サーバー)にジョブを投げる形でシミュレーション計算を行います。そこで今回は、計算機サーバーにHDF5をインストールしたいと思います。動作環境は以下の通り。
- OS: CentOS 6.10 x86_64
- CPU: Intel(R) Xeon(R) CPU E5-1650 6コア 3.2GHz
- メモリ: 16GB
Linuxであればapt-getやyumなどのパッケージマネージャによりHDFをインストールすることができますが、今回はroot権限のない計算機サーバーを想定して、ソースコードからインストールします。
サーバーにログインしたら、コマンドラインに次のように入力しソースコードをダウンロード・解凍します。
$> cd $HOME/Downloads
$> wget https://support.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.10.5.tar.bz2
$> tar -zxf hdf5-1.10.5.tar.bz2 -C $HOME/local/src
$HOME/local/src
に展開していますが、展開先・インストール先はお好みの場所で構いません。
次に、ビルド・インストールを行います。
$> cd $HOME/local/src/hdf5-1.10.5
$> ./configure --prefix=$HOME/local --enable-cxx
$> make && make install
最後に、$HOME/.bash_profile
に以下の文を追加するとHDFライブラリを利用できるようになります。
export LD_LIBRARY_PATH=$HOME/local:$LD_LIBRARY_PATH
コンパイル、実行時の注意
コンパイルの際、以下のようにライブラリを指定してあげる必要があります。
g++ hogehoge.cpp -lhdf5_cpp -L($HOME)/local/lib -I($HOME)/local/include
また、計算機から他の計算機にジョブを投げる際にはジョブを投げるスクリプトに$HOME/.bash_profile
同様にライブラリパスを追記する必要があります。
次回は配列の書き出し方について書きたいと思います。