Alpsize-02 Fortran 入門
本章では ALPS Fortran のインストール方法と使い方を説明します。読者が Fortran プログラミングの基本的な知識を持っていることを前提としています。
動作環境
ALPS Fortran は ALPS システム上で Fortran コードを実行するためのラッパーライブラリです。使用には以下の環境が必要です。
| ALPS | 動作環境の要件とインストール手順については ALPS インストールページ を参照してください。 |
| CMake | バージョン 3.18 以降。ALPS Fortran とクライアントコードのコンパイルに使用します。 |
| Fortran コンパイラ(GNU/Intel/Fujitsu) | ALPS のビルドに使用したものと同じコンパイラが必要です。インストール手順は各コンパイラのマニュアルを参照してください。 |
インストール
ALPS Fortran は ALPS ソースツリーに適用するパッチファイルとして提供されます。
パッチのダウンロード
ALPS リポジトリ から ALPS Fortran アーカイブをダウンロードして展開します:
$ cd ~/ $ wget http://xxx.xxx/alps_fortran.tar.gz $ tar -zxvf alps_fortran.tar.gz以下のファイルとディレクトリが作成されます:
alps_fortran/ + alps_fortran.patch + samples/ + hello/ + ising/ + looper-2/ + tutorial/パッチの適用
ALPS ソースディレクトリ(
${ALPS_SRC})に移動し、パッチを適用します:$ cd ${ALPS_SRC} $ patch -p0 < ~/alps_fortran/alps_fortran.patchALPS のビルドとインストール
インストールドキュメント に従って ALPS をビルドしてください。ALPS Fortran は ALPS と同時にインストールされ、以下のファイルが生成されます(
${ALPS_ROOT}は ALPS のインストールプレフィックス):${ALPS_ROOT}/lib/libalps_fortran.a${ALPS_ROOT}/include/alps/fortran/alps_fortran.h${ALPS_ROOT}/include/alps/fortran/fortran_wrapper.h${ALPS_ROOT}/include/alps/fortran/fwrapper_impl.h
サンプルソースコード
ALPS Fortran には 3 つのサンプルアプリケーションが含まれています:
- “hello” — 計算は行わず、パラメータファイルの内容を標準出力に表示するだけのアプリケーション。
- “ising” — Ising モデル計算のサンプルアプリケーション。
- “looper-2” — 外部ライブラリの使用例を示すサンプルアプリケーション。
以降のセクションでは hello アプリケーションのビルドと実行方法を説明します。ising と looper-2 も同じ手順でビルド・実行できます。
“hello” アプリケーション
hello アプリケーションは以下のファイルで構成されています:
hello_impl.f90— メインプログラムhello.C— エントリポイントの設定hello_params— パラメータファイルCMakeLists.txt— ビルド設定
コンパイル
ビルドディレクトリの作成
$ mkdir -p ${HOME}/alps_fortran_build/hello $ cd ${HOME}/alps_fortran_build/helloCMake の実行
ソースディレクトリを指定して cmake を実行します(
${SAMPLES}は ALPS Fortran アーカイブを展開して生成されたサンプルフォルダ):$ cmake -DALPS_ROOT:PATH=${ALPS_ROOT} \ > ${SAMPLES}/helloビルド
$ makeビルドが完了すると、カレントディレクトリに実行ファイル
helloが生成されます。
スレッドレベルの並列化
ビルドディレクトリへの移動
$ cd ${HOME}/alps_fortran_build/hello前回の実行結果ファイル(
hello_param.out.*)が残っている場合は、次のステップに進む前にすべて削除してください。パラメータファイルの準備
パラメータファイルから XML 入力ファイルを生成します:
$ cp ${SAMPLES}/hello/hello_params . $ parameter2xml hello_paramsparameter2xmlコマンドの詳細は ALPS ドキュメント を参照してください。実行
$ ./hello hello_params.in.xmlhello_paramsで定義されたパラメータが標準出力に表示されます。実行結果の例:##### alps_init() ##### parameter X = 3.2000000000000002 parameter Y = 0 parameter WORLD = world defined parameter Z = 1[2011-May-13 11:45:42]: dispatching a new clone[1,1] on threadgroup[3]
##### alps_init() ##### parameter X = -3.1000000000000001 parameter Y = 6 parameter WORLD = alps defined parameter Z = 0[2011-May-13 11:45:42]: dispatching a new clone[2,1] on threadgroup[8]
##### alps_init() ##### parameter X = 1.00000000000000002E-003 parameter Y = -100 parameter WORLD = looper defined parameter Z = 0[2011-May-13 11:45:43]: dispatching a new clone[3,1] on threadgroup[7] [2011-May-13 11:45:43]: clone[3,1] finished on threadgroup[7]
##### alps_init() ##### parameter X = 100.00000000000000 parameter Y = 2 parameter WORLD = japan defined parameter Z = 0[2011-May-13 11:45:43]: dispatching a new clone[4,1] on threadgroup[1] [2011-May-13 11:45:43]: clone[4,1] finished on threadgroup[1]
##### alps_init() ##### parameter X = 3.0000000000000000 parameter Y = 0 parameter WORLD = wistaria defined parameter Z = 0
MPI 並列化
ビルドディレクトリへの移動
$ cd ${HOME}/alps_fortran_build/hello上記と同様に、実行前に結果ファイル(
hello_param.out.*)が残っていないことを確認してください。パラメータファイルの準備
$ cp ${SAMPLES}/hello/hello_params . $ parameter2xml hello_paramsMPI での実行
$ mpirun -np 4 -x OMP_NUM_THREADS=1 ./hello --mpi hello_params.in.xmlhello_paramsで定義されたパラメータが標準出力に表示されます(スレッドレベルの例と同様)。