0
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS チュートリアル{ アプリケーションの 
ALPS 化 
CMSI ハンズオン 
ALPS Collaboration 
http://alps.comp-phys.org/...
ALPS チュートリアル{ アプリケーションのALPS 化 
Outline 
1 ALPSize (ALPS 化) のすすめ 
2 ALPS ビルド環境 
3 C++プログラミング 
4 ALPS ライブラリの利用 
5 ALPS スケジュー...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPSize (ALPS 化) のすすめ 
ALPS ライブラリを使用する利点 
エラーバーと自己相関時間の自動計算(ALPS/alea) 
自動並列化& ロードバランシング(AL...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPSize (ALPS 化) のすすめ 
ALPS ビルド環境を使用する利点 
コンパイラ& 最適化オプションの自動設定 
MPI & OpenMP 用オプションの自動設定 
ラ...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPSize (ALPS 化) のすすめ 
ALPSize 実習 
00-01 ALPS ビルド環境の利用(Make, CMake) 
02-05 C++プログラミング 
06-0...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
ビルド環境のセットアップ 
環境変数の設定 
ALPS HOME: ALPS がインストールされているディレクトリ 
(例: /opt/nano/alps/a...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
Make の利用 
$ALPS HOME/share/alps/include.mk にMake
le 用の変数設 
定ファイルが用意されている 
Make
le の例 
include $(ALPS_HOME)/share/alps/include.mk 
hello: hello.C 
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o hello 
hel...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
CMake 
クロスプラットフォームなビルドツール 
Windows にも対応 
Make
le を生成 
高速な並列ビルド 
テスト環境 
ビルドルール, ライブラリ, 依存関係などはCMakeLists.txt に 
記述する 
CMake のインストールについては, http://todo.issp. 
u-tokyo.ac.j...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
01 CMake 化 
簡単なプログラムをCMake を利用してビルドする 
$ mkdir $HOME/alpsize-01-cmake 
$ cd $HO...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
CMakeLists.txt の例 
$ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt 
cmake_...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
CMakeLists.txt の例 
$ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt 
cmake_...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
CMakeLists.txt の例 
$ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt 
cmake_...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
CMakeLists.txt の例 
$ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt 
cmake_...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ビルド環境 
テストスクリプト 
add alps test は以下と同等 
$ ./hello $ALPS_HOME/tutorials/alpsize-00-CMake...
ALPS チュートリアル{ アプリケーションのALPS 化 
C++プログラミング 
02 C プログラム 
Wolff アルゴリズム 
2 次元正方格子強磁性Ising 模型のモンテカルロ計算 
ランダムに選んだ点からクラスターを作成し, ス...
ALPS チュートリアル{ アプリケーションのALPS 化 
C++プログラミング 
03 C++プログラム 
Wolff アルゴリズムC++で書きなおす 
ヘッダファイル名, namespace, コメント形式 
for 文中でのループ変数の...
ALPS チュートリアル{ アプリケーションのALPS 化 
C++プログラミング 
04 STL の利用 
STL (C++ Standard Template Library) を利用する 
std::vector : 動的配列 
std:...
ALPS チュートリアル{ アプリケーションのALPS 化 
C++プログラミング 
05 Boost の利用 
Boost ライブラリを利用する 
boost::array : 固定長配列 
boost::random : 擬似乱数生成器, ...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
06 ALPS/parameters 
ALPS/parameter ライブラリを利用する 
標準入力から, 変数名と値のペアを読み込む. 値は「式」で...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/parameter ライブラリ 
プログラムに与えるパラメータを解釈するライブラリ 
LATTICE = "chain lattice"; 
...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/parameter ライブラリ 
プログラムに与えるパラメータを解釈するライブラリ 
LATTICE = chain lattice; 
L ...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/parameter ライブラリの利用法 
#include boost/foreach.hpp 
#include alps/paramete...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/parameter ライブラリの利用法 
#include boost/foreach.hpp 
#include alps/paramete...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
07 ALPS/alea 
ALPS/alea ライブラリを利用する 
マルコフ連鎖における平均値, エラーバー, 自己相関を計算する 
ライブラリ 
...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/alea ライブラリの利用法 
マルコフ連鎖における平均値, 分散, 自己相関を計算するライブラリ 
#include alps/alea.h...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
Tips: 出力を制御する 
// Gnuplot 風出力 
std::cout  1./param[beta]    
 obs[Energy].me...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
08 ALPS/lattice 
ALPS/lattice ライブラリを利用する 
XML により任意の次元の任意の格子(グラフ) を生成可 
サイト数...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/lattice ライブラリの利用法 
#include alps/lattice.h 
... 
class ising : public a...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
格子(graph) の定義 
LATTICE name=square lattice dimension=2 
PARAMETER name=a def...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS ライブラリの利用 
ALPS/lattice ライブラリの便利な関数 
std::vectordouble d(num_sites()); 
std::vectordoub...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (1) 
ALPS には3 種類のスケジューラ. 本講習ではALPS/parapack 
スケジューラを使用 
ユ...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (2) 
メイン文: worker.C) 
int main(int argc, char** argv) { 
...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (3) 
Worker の一生 
初回: コンストラクタ) init observables ) run ) ru...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (4) 
コンストラクタ: worker(alps::Parameters const); 
パラメタの読み込み、...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (5) 
save(alps::ODump) const; 
チェックポイントの書き出し. スピン配位などをバイナ...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (6) 
Worker の基底クラス 
alps::parapack::abstract worker : 最も基...
ALPS チュートリアル{ アプリケーションのALPS 化 
ALPS スケジューラの利用 
09 ALPS Scheduler (7) 
Evaluator: wolff worker.h 
ALPS/parapack スケジューラでは, N...
Upcoming SlideShare
Loading in...5
×

ALPSチュートリアル(7) アプリケーションのALPS化

752

Published on

CMSIハンズオン資料

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
752
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "ALPSチュートリアル(7) アプリケーションのALPS化"

  1. 1. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS チュートリアル{ アプリケーションの ALPS 化 CMSI ハンズオン ALPS Collaboration http://alps.comp-phys.org/ 2014-10-16 1 / 35
  2. 2. ALPS チュートリアル{ アプリケーションのALPS 化 Outline 1 ALPSize (ALPS 化) のすすめ 2 ALPS ビルド環境 3 C++プログラミング 4 ALPS ライブラリの利用 5 ALPS スケジューラの利用 2 / 35
  3. 3. ALPS チュートリアル{ アプリケーションのALPS 化 ALPSize (ALPS 化) のすすめ ALPS ライブラリを使用する利点 エラーバーと自己相関時間の自動計算(ALPS/alea) 自動並列化& ロードバランシング(ALPS/scheduler) チェックポイント作成とリスタート機能(ALPS/scheduler) XML 形式による計算結果の自動出力とこれらを扱うコマンド ラインツール 入力パラメータの柔軟な扱い(ALPS/parameter) 擬似乱数生成器(ALPS/random) 格子の容易な取扱い(ALPS/lattice) 量子ハミルトニアンの容易な取扱い(ALPS/model) 3 / 35
  4. 4. ALPS チュートリアル{ アプリケーションのALPS 化 ALPSize (ALPS 化) のすすめ ALPS ビルド環境を使用する利点 コンパイラ& 最適化オプションの自動設定 MPI & OpenMP 用オプションの自動設定 ライブラリ(Boost, BLAS/LAPACK, HDF5, FFTW, SQLite, Python 等) の自動検出 ALPS ライブラリを利用するためのオプションの自動設定 テスト用スクリプト 京、FX10、その他代表的なスパコン用のビルド環境が整備さ れている Windows 用のバイナリ作成が可能 4 / 35
  5. 5. ALPS チュートリアル{ アプリケーションのALPS 化 ALPSize (ALPS 化) のすすめ ALPSize 実習 00-01 ALPS ビルド環境の利用(Make, CMake) 02-05 C++プログラミング 06-08 ALPS ライブラリの利用 09 ALPS スケジューラの利用 5 / 35
  6. 6. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 ビルド環境のセットアップ 環境変数の設定 ALPS HOME: ALPS がインストールされているディレクトリ (例: /opt/nano/alps/alps-20131104-r7230) PATH: ツール(parameter2xml) のパスを追加 LD LIBRARY PATH: ALPS ライブラリのパスを設定 PYTHONPATH: ALPS Python モジュールのパスを追加 ALPS がプレインストールされている環境では、上記の設定を 行うシェルスクリプトが用意されている. 例) $ source /opt/nano/alps/alpsvars.sh 6 / 35
  7. 7. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 Make の利用 $ALPS HOME/share/alps/include.mk にMake
  8. 8. le 用の変数設 定ファイルが用意されている Make
  9. 9. le の例 include $(ALPS_HOME)/share/alps/include.mk hello: hello.C $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o hello hello.C $(LIBS) 実習 $ cp -r $ALPS_HOME/tutorials/alpsize-00-make $HOME $ cd $HOME/alpsize-00-make $ make CMake の利用を推奨 7 / 35
  10. 10. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 CMake クロスプラットフォームなビルドツール Windows にも対応 Make
  11. 11. le を生成 高速な並列ビルド テスト環境 ビルドルール, ライブラリ, 依存関係などはCMakeLists.txt に 記述する CMake のインストールについては, http://todo.issp. u-tokyo.ac.jp/ja/search?SearchableText=cmake 8 / 35
  12. 12. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 01 CMake 化 簡単なプログラムをCMake を利用してビルドする $ mkdir $HOME/alpsize-01-cmake $ cd $HOME/alpsize-01-cmake $ cmake $ALPS_HOME/tutorials/alpsize-01-cmake $ make $ ctest $ ./hello CMake ではソースディレクトリ($ALPS HOME/tutorials/alpsize-01-cmake) とビルドディレクトリ ($HOME/alpsize-01-cmake) は別にする 9 / 35
  13. 13. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 CMakeLists.txt の例 $ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(hello NONE) # find ALPS Library find_package(ALPS REQUIRED PATHS ${ALPS_ROOT_DIR} $ENV{ALPS_HOME} NO_SYSTEM_ENVIRONMENT_PATH) message(STATUS "Found ALPS: ${ALPS_ROOT_DIR} (revision: ${ALPS_VERSION})") include(${ALPS_USE_FILE}) # enable C and C++ compilers enable_language(C CXX) # rule for generating 'hello world' program add_executable(hello hello.C) target_link_libraries(hello ${ALPS_LIBRARIES}) add_alps_test(hello) 10 / 35
  14. 14. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 CMakeLists.txt の例 $ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(hello NONE) # find ALPS Library find_package(ALPS REQUIRED PATHS ${ALPS_ROOT_DIR} $ENV{ALPS_HOME} NO_SYSTEM_ENVIRONMENT_PATH) message(STATUS "Found ALPS: ${ALPS_ROOT_DIR} (revision: ${ALPS_VERSION})") include(${ALPS_USE_FILE}) # enable C and C++ compilers enable_language(C CXX) # rule for generating 'hello world' program add_executable(hello hello.C) target_link_libraries(hello ${ALPS_LIBRARIES}) add_alps_test(hello) 10 / 35
  15. 15. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 CMakeLists.txt の例 $ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(hello NONE) # find ALPS Library find_package(ALPS REQUIRED PATHS ${ALPS_ROOT_DIR} $ENV{ALPS_HOME} NO_SYSTEM_ENVIRONMENT_PATH) message(STATUS "Found ALPS: ${ALPS_ROOT_DIR} (revision: ${ALPS_VERSION})") include(${ALPS_USE_FILE}) # enable C and C++ compilers enable_language(C CXX) # rule for generating 'hello world' program add_executable(hello hello.C) target_link_libraries(hello ${ALPS_LIBRARIES}) add_alps_test(hello) 10 / 35
  16. 16. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 CMakeLists.txt の例 $ALPS HOME/tutorials/alpsize-01-cmake/CMakeLists.txt cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(hello NONE) # find ALPS Library find_package(ALPS REQUIRED PATHS ${ALPS_ROOT_DIR} $ENV{ALPS_HOME} NO_SYSTEM_ENVIRONMENT_PATH) message(STATUS "Found ALPS: ${ALPS_ROOT_DIR} (revision: ${ALPS_VERSION})") include(${ALPS_USE_FILE}) # enable C and C++ compilers enable_language(C CXX) # rule for generating 'hello world' program add_executable(hello hello.C) target_link_libraries(hello ${ALPS_LIBRARIES}) add_alps_test(hello) 10 / 35
  17. 17. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ビルド環境 テストスクリプト add alps test は以下と同等 $ ./hello $ALPS_HOME/tutorials/alpsize-00-CMake/hello.ip > $ diff -u $ALPS_HOME/tutorials/alpsize-00-CMake/hello.op hello.tmp $ rm hello.tmp 実行結果(出力) をhello.op と比較 $ cat $ALPS_HOME/tutorials/alpsize-00-CMake/hello.op hello, world 11 / 35
  18. 18. ALPS チュートリアル{ アプリケーションのALPS 化 C++プログラミング 02 C プログラム Wolff アルゴリズム 2 次元正方格子強磁性Ising 模型のモンテカルロ計算 ランダムに選んだ点からクラスターを作成し, スピン反転 ソースコード: wolff.c ビルドと実行 $ mkdir $HOME/alpsize-02-original-c $ cd $HOME/alpsize-02-original-c $ cmake $ALPS_HOME/tutorials/alpsize-02-original-c $ make $ ./wolff 12 / 35
  19. 19. ALPS チュートリアル{ アプリケーションのALPS 化 C++プログラミング 03 C++プログラム Wolff アルゴリズムC++で書きなおす ヘッダファイル名, namespace, コメント形式 for 文中でのループ変数の宣言 iostream を用いた結果の出力 修正点: wolff.diff ビルドと実行 $ mkdir $HOME/alpsize-03-basic-cpp $ cd $HOME/alpsize-03-basic-cpp $ cmake $ALPS_HOME/tutorials/alpsize-03-basic-cpp $ make $ ./wolff 13 / 35
  20. 20. ALPS チュートリアル{ アプリケーションのALPS 化 C++プログラミング 04 STL の利用 STL (C++ Standard Template Library) を利用する std::vector : 動的配列 std::stack : pop, push, top, empty メンバ関数 修正点: wolff.diff ビルドと実行 $ mkdir $HOME/alpsize-04-stl $ cd $HOME/alpsize-04-stl $ cmake $ALPS_HOME/tutorials/alpsize-04-stl $ make $ ./wolff 14 / 35
  21. 21. ALPS チュートリアル{ アプリケーションのALPS 化 C++プログラミング 05 Boost の利用 Boost ライブラリを利用する boost::array : 固定長配列 boost::random : 擬似乱数生成器, 確率分布 boost::timer : ポータブルなタイマー 修正点: wolff.diff ビルドとテスト $ mkdir $HOME/alpsize-05-boost $ cd $HOME/alpsize-05-boost $ cmake $ALPS_HOME/tutorials/alpsize-05-boost $ make $ ctest 15 / 35
  22. 22. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 06 ALPS/parameters ALPS/parameter ライブラリを利用する 標準入力から, 変数名と値のペアを読み込む. 値は「式」でも 良い alps::Parameter, alps::Parameters, alps::ParameterList デフォルト値の設定 修正点: wolff.diff ビルドとテスト $ mkdir $HOME/alpsize-06-parameters $ cd $HOME/alpsize-06-parameters $ cmake $ALPS_HOME/tutorials/alpsize-06-parameters $ make $ ctest 16 / 35
  23. 23. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/parameter ライブラリ プログラムに与えるパラメータを解釈するライブラリ LATTICE = "chain lattice"; L = 16, SEED = 2873 // C++ style comment SWEEPS = 4096; THERMALIZATION = SWEEPS/8; /* C style comment */ { T = 2; Sq = 2*PI/3; } { T = 1.8; } 四則演算可能 を文字で指定 空行も正しく認識 C 風, C++風のコメント f g で囲んだ変数は異なるセット 空白を適切に認識 改行, セミコロン, コンマで変数 を区別 17 / 35
  24. 24. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/parameter ライブラリ プログラムに与えるパラメータを解釈するライブラリ LATTICE = chain lattice; L = 16, SEED = 2873 // C++ style comment SWEEPS = 4096; THERMALIZATION = SWEEPS/8; /* C style comment */ { T = 2; Sq = 2*PI/3; } { T = 1.8; } 四則演算可能 を文字で指定 空行も正しく認識 C 風, C++風のコメント f g で囲んだ変数は異なるセット 空白を適切に認識 改行, セミコロン, コンマで変数 を区別 17 / 35
  25. 25. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/parameter ライブラリの利用法 #include boost/foreach.hpp #include alps/parameter.h ... int main(int argc, char** argv) { ... alps::ParameterList plist = read_param(argc, argv); BOOST_FOREACH(alps::Parameters p, plist) { double a = p[a]; double b = p.value_or_default(b, 0.5); ... } ... } 18 / 35
  26. 26. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/parameter ライブラリの利用法 #include boost/foreach.hpp #include alps/parameter.h ... int main(int argc, char** argv) { ... alps::ParameterList plist = read_param(argc, argv); BOOST_FOREACH(alps::Parameters p, plist) { double a = p[a]; double b = p.value_or_default(b, 0.5); ... } ... } 18 / 35
  27. 27. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 07 ALPS/alea ALPS/alea ライブラリを利用する マルコフ連鎖における平均値, エラーバー, 自己相関を計算する ライブラリ 非線形な量についても, ジャックナイフ法を用いて正しいエ ラーバーを評価可能(例: Binder 比⟨m2⟩2=⟨m4⟩) 修正点: wolff.diff ビルドとテスト $ mkdir $HOME/alpsize-07-alea $ cd $HOME/alpsize-07-alea $ cmake $ALPS_HOME/tutorials/alpsize-07-alea $ make $ ctest 19 / 35
  28. 28. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/alea ライブラリの利用法 マルコフ連鎖における平均値, 分散, 自己相関を計算するライブラリ #include alps/alea.h ... alps::ObservableSet obs; ... obs alps::RealObservable(Energy); ... for (int i = 0; i != N; ++i) { double e = energy(); // calclulate something obs.reset(i == THERM); // when thermalized obs[Energy] e; } ... std::cout obs[Energy]; 20 / 35
  29. 29. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 Tips: 出力を制御する // Gnuplot 風出力 std::cout 1./param[beta] obs[Energy].mean() obs[Energy].variance() std::endl; 21 / 35
  30. 30. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 08 ALPS/lattice ALPS/lattice ライブラリを利用する XML により任意の次元の任意の格子(グラフ) を生成可 サイト数, ボンド数, 全サイト, 全ボンド, 最近接サイト, etc へ のアクセス関数 修正点: wolff.diff ビルドとテスト $ mkdir $HOME/alpsize-08-lattice $ cd $HOME/alpsize-08-lattice $ cmake $ALPS_HOME/tutorials/alpsize-08-lattice $ make $ ctest 22 / 35
  31. 31. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/lattice ライブラリの利用法 #include alps/lattice.h ... class ising : public alps::graph_helper { public: ising(alps::Parameters const p) : graph_helper(p) {} ... }; 23 / 35
  32. 32. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 格子(graph) の定義 LATTICE name=square lattice dimension=2 PARAMETER name=a default=1/ BASISVECTORa 0/VECTORVECTOR0 a/VECTOR/BASIS RECIPROCALBASISVECTOR2*pi/a 0/VECTORVECTOR0 2*pi/a/VECTOR/RECIPROCALBASIS /LATTICE UNITCELL name=simple2d dimension=2 VERTEX/ EDGESOURCE vertex=1 offset=0 0/TARGET vertex=1 offset=0 1//EDGE EDGESOURCE vertex=1 offset=0 0/TARGET vertex=1 offset=1 0//EDGE /UNITCELL LATTICEGRAPH name = square lattice FINITELATTICE LATTICE ref=square lattice/ PARAMETER name=W default=L/ EXTENT dimension=1 size=L/ EXTENT dimension=2 size=W/ BOUNDARY type=periodic/ /FINITELATTICE UNITCELL ref=simple2d/ /LATTICEGRAPH 24 / 35
  33. 33. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS ライブラリの利用 ALPS/lattice ライブラリの便利な関数 std::vectordouble d(num_sites()); std::vectordouble J(num_bonds()); ... double energy = 0.; BOOST_FOREACH(site_descriptor s, sites()) { BOOST_FOREACH(bond_descriptor b, neighbor_bonds(s)) { energy += J[b] * d[source(b)] * d[target(b)]; } } ... boost::mt19937 rng; boost::uniform_int dst(0, num_bonds()-1); J[bond(dst(rng))] = 0; Jtemp = param[J + bond_type(b)]; sites(), bonds() はBOOST FOREACH と組み合わせる index(s) やindex(b) で数字に変換 bond(n) やsite(n) で* descriptor に変換 25 / 35
  34. 34. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (1) ALPS には3 種類のスケジューラ. 本講習ではALPS/parapack スケジューラを使用 ユーザのシミュレーションコードをWorker クラスにカプセル 化(例: hello worker.h) Worker クラスが実装しなければならない関数 コンストラクタ、init obserbables メンバー関数 run メンバー関数 is thermalized progress メンバ関数 save load メンバ関数 PARAPACK REGISTER WORKER マクロを用いてWorker を スケジューラに登録(例: hello worker.C) 実行時にALGORITHM パラメータでWorker を選択できる 26 / 35
  35. 35. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (2) メイン文: worker.C) int main(int argc, char** argv) { return alps::parapack::start(argc, argv); } ビルド, テスト, (マルチスレッド) 実行 $ mkdir $HOME/alpsize-09-scheduler $ cd $HOME/alpsize-09-scheduler $ cmake $ALPS_HOME/tutorials/alpsize-09-scheduler $ make $ ctest $ parameter2xml $ALPS_HOME/.../wolff_params wolff_params $ ./wolff wolff_params.in.xml 27 / 35
  36. 36. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (3) Worker の一生 初回: コンストラクタ) init observables ) run ) run ) run ) ) save ) デストラクタ チェックポイントリスタート後: コンストラクタ) load ) run ) run ) run ) ) save ) デストラクタ init observables は初回のみ呼び出される progress の返り値が1 に達するor 制限時間に達するまでrun が繰り返し呼ばれる 定期的にsave 関数が呼ばれる 28 / 35
  37. 37. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (4) コンストラクタ: worker(alps::Parameters const); パラメタの読み込み、配列の初期化など init observables(alps::Parameters const, alps::ObservableSet obs); 物理量の宣言 登録 run(alps::ObservableSet); 何らかの計算を1 ステップだけ実行 bool is thermalized() const; この値がtrue の間だけ物理量が保存される. (false からtrue に 変わった時点でリセットされる) double progress() const; 進捗状況を[0,1] で返す 29 / 35
  38. 38. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (5) save(alps::ODump) const; チェックポイントの書き出し. スピン配位などをバイナリ形式 (xdr) で保存する alps::ODump には, int, doulbe, std::vector 等ほとんど何でも書 き込める ユーザが宣言した構造体, クラスのインスタンスを書き込みた い場合には, 演算子をオーバーロードする dp mcs spin sz; load(alps::IDump); チェックポイントからの読み込み 書き出しと同じ順序で読み込む dp mcs spin sz; 30 / 35
  39. 39. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (6) Worker の基底クラス alps::parapack::abstract worker : 最も基本的な基底クラス alps::parapack::mc worker : alps::rng helper を継承. 乱数生成 器が利用可. 乱数生成器の状態のチェックポイントリスタート も自動的に行われる alps::parapack::lattice mc worker⟨⟩ : alps::graph helper を継承. ALPS/lattice ライブラリの関数が利用可 alps::parapack::latticemodel mc worker⟨⟩ : alps::protected model helper⟨⟩ を継承. ALPS/model ライブラリの関数が利 用可 31 / 35
  40. 40. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (7) Evaluator: wolff worker.h ALPS/parapack スケジューラでは, NUM CLONES パラメータ を指定することで, 同じパラメータセットで乱数の種だけが異 なるシミュレーション(Clone) を複数並列実行可(ばかパラ) 同じパラメータセットに属するClone の測定量は, 終了時に自 動的にマージされる 非線形な物理量(例: ビンダー比, 相関長) の計算は、Clone の マージが終わった後に行う必要がある Evaluator をWorker と同じ名前でスケジューラに登録しておく と, Clone のマージ後にevaluate 関数が呼び出される 32 / 35
  41. 41. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 09 ALPS Scheduler (8) Worker の並列化(OpenMP 並列) CMake 時に, -DALPS ENABLE OPENMP WORKER=ON が 指定されていれば、Worker の中でOpenMP 利用可 Worker の並列化(MPI 並列) Worker のコンストラクタを修正 worker(mpi::communicator const, alps::Parameters const ) コンストラクタに渡されたmpi::communicator の中は自由に 使ってよい. PARAPACK REGISTER PARALLEL WORKER マクロを用い てWorker を登録 実行時に-r オプションと-p オプションで, 総スレッド数と Worker あたりのスレッド数を指定 33 / 35
  42. 42. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 10,11 ALPS Fortran Fortran プログラムをALPS に組み込む クラスの代わりにサブルーチン群を作成する(alps init, alps init observable, alps run, など) サブルーチン間の状態の受け渡しは, common またはmodule を利用する C++ポインタの受け渡しにinteger(2) を使う(caller 変数) チュートリアル ALPS Fortran Introduction ALPS Fortran Application Development 34 / 35
  43. 43. ALPS チュートリアル{ アプリケーションのALPS 化 ALPS スケジューラの利用 実習 逐次プログラムのALPS 化 オリジナルコード: ising.C 並列プログラムのALPS 化 オリジナルコード: ising parallel.C 35 / 35
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×