コンテンツにスキップ
自作コードと ALPS の統合

自作コードと ALPS の統合

多くの研究グループはすでに動作するシミュレーションコード――多くの場合、何年もかけて蓄積された C、C++、Fortran のコード――を持っており、それを一から書き直すよりも ALPS と統合することを望んでいます。ALPS ライブラリにリンクし、CMake でビルドをパッケージ化すれば、既存のプログラムは、ごく控えめな構造の変更だけで、ALPS の Parameters ファイル形式、Alea 測定・誤差解析ライブラリ、そして Parapack スケジューラを利用できるようになります。その見返りとして、プログラムはパラメータに基づく並列化、チェックポイント/リスタートのサポート、結果の自動集約、そしてノートパソコンからスーパーコンピュータまで、変更を加えずにどこでも実行できる能力を得ます。以下のチュートリアルでは、この統合の過程を最初から最後まで順に説明します。小さなモンテカルロプログラムを段階的に移行する C/C++ の実例、すべてをまとめ上げる CMake ビルドシステムの詳しい解説、そして Fortran コードについて同じ過程を扱う 2 つのチュートリアルです。

Integration-00: 導入と概要

ALPS スケジューラとその利点を紹介し、続いて、Wolff クラスターモンテカルロアルゴリズムの素の C 実装を、ALPS に完全に統合されたプログラムへと段階的に移行していく 9 段階のチュートリアルパッケージ(00_cmake から 08_scheduler まで)を順に説明します。各段階はそれぞれ独立にビルド可能なディレクトリになっています。CMake + ALPS のツールチェーンの確認、コードの慣用的な C++ への変換、STL コンテナと Boost ライブラリの採用、ALPS/parameters によるシミュレーションパラメータの読み込み、ALPS/alea による測定値の蓄積、ALPS/lattice によるシミュレーションの幾何構造の記述、そして最後に、プログラム全体を ALPS/Parapack スケジューラの下で動作する Worker クラスで包むところまでを扱います。

Integration-01: CMake によるパッケージ化

チュートリアルシリーズ全体で使われる CMake ビルドシステムを詳しく見ていきます。ALPS プロジェクトの CMakeLists.txt の構成――ALPSConfig.cmake と UseALPS.cmake の取り込み、実行ファイルのターゲットとその依存関係の宣言、CTest へのテストの登録――を説明し、-DALPS_ROOT_DIR または環境変数 $ALPS_HOME を使って CMake に ALPS のインストール先を指定する方法を示します。

Integration-02: Fortran 入門

Fortran プログラムを ALPS スケジューラの下で実行できるようにするラッパーライブラリ、ALPS Fortran のインストールと基本的な使い方を扱います。必要なビルド環境、ALPS Fortran パッチを適用して ALPS と一緒にビルドする方法を説明し、付属のサンプルアプリケーション hello を、スレッドレベルと MPI の両方の並列化の下でコンパイルして実行する手順を順に説明します。

Integration-03: Fortran アプリケーション開発

ALPS Fortran のサブルーチンインターフェースの全体――必須のコールバック(alps_init、alps_run、alps_progress、alps_is_thermalized、alps_save/alps_load、alps_finalize)と、パラメータの読み込みや観測量の記録のために ALPS Fortran が提供するサブルーチン――を解説し、それを完全な実例に適用します。この実例では、従来のイジングモデルのプログラム(ising_original.f)を、チェックポイント/リスタートやマルチスレッドのサポートも含めて ALPS Fortran フレームワークへ移植します。