Tutorials:ALPS Fortran Introduction/ja

From ALPS
Jump to: navigation, search

ALPS Fortranのチュートリアルです。ALPSを使ったFortranアプリケーションのコンパイル方法および実行方法について説明しています。なお、このチュートリアルはFortranプログラミングの知識を有する読者を想定しています。

ALPS Fortranインストール

ALPS Fortranのソースコードは、ALPS 本体に含まれています。ALPS Fortranの機能を使うには、ALPSのCMake時に -DALPS_BUILD_FORTRAN=ON を指定します。(必要に応じて、-DCMAKE_Fortran_COMPILER オプションでFortranコンパイラも指定します。)

 cmake -DALPS_BUILD_FORTRAN=ON /somewhere/alps/source/code
 make
 make install

ALPS Fortranが正しくインストールされると以下のファイルが生成されます。

  • ${ALPS_HOME}/lib/libalps_fortran.a
  • ${ALPS_HOME}/include/alps/fortran/alps_fortran.h
  • ${ALPS_HOME}/include/alps/fortran/fortran_wrapper.h
  • ${ALPS_HOME}/include/alps/fortran/fwrapper_impl.h

※${ALPS_HOME}はALPSのインストールフォルダを指します。

サンプルコード

ALPSのソースコードには、サンプルとして、以下のコードが含まれています。

[helloアプリケーション]

  • 計算は行わず、パラメータファイルの内容を標準出力に出力するのみのアプリケーションです。

[isingアプリケーション]

  • Isingモデルの計算を行う簡単なアプリケーションです。

次節より、helloアプリケーションのビルド方法及び実行方法について説明します。isingアプリケーションについてもhelloと同様の手順でビルド・実行できます。

helloアプリケーション

[helloアプリケーション] は以下のファイルから構成されています。

  • hello_impl.f90:アプリケーションの実装
  • hello.C:アプリケーションのエントリポイント
  • hello_params:パラメータファイル
  • CMakeLists.txt:ビルド設定ファイル

helloアプリケーションのコンパイル

helloアプリケーションのコンパイル手順は以下の通りです。

1. ビルド用ワークフォルダの作成 helloアプリケーションのビルド結果を保存するためのワークフォルダを作成します。

$ mkdir –p ${HOME}/alps_fortran_build/hello
$ cd ${HOME}/alps_fortran_build/hello

2. cmakeの実行 ソースコードフォルダを指定してcmakeを実行します。(${ALPS_HOME}はALPSがインストールされているフォルダです)

$ cmake –DALPS_ROOT_DIR=${ALPS_HOME} ${ALPS_HOME}/tutorials/alpsize-10-fortran-scheduler

3. helloアプリケーションのビルド cmakeを実行するとカレントディレクトリにMakefile等、ビルドに必要なファイルが生成されますので、makeを実行します。

$ make

ビルドが完了するとカレントディレクトリに実行ファイルhelloが生成されます。

helloアプリケーションのスレッド並列実行

helloアプリケーションのスレッド並列実行の手順は以下の通りです。

1. ワークフォルダへの移動 helloアプリケーションをビルドする際に作成したワークフォルダに移動します。

$ cd ${HOME}/alpls_fortran_build/hello

なお、ワークフォルダ内に実行結果ファイル(hello_param.out.*)があるとアプリケーションが実行できません。実行結果ファイルがある場合は全て削除してから次の手順に進んでください。

2. パラメータファイルの準備 ${ALPS_HOME}/tutorials/alpsize-10-fortran-schedulerにあるパラメータファイルからXMLファイルを生成します。

$ cp ${ALPS_HOME}/tutorials/alpsize-10-fortran-scheduler/hello_params .
$ parameter2xml hello_params

3. helloアプリケーションの実行 以下のコマンドでアプリケーションを実行します。

$ ./hello hello_params.in.xml

helloアプリケーションを実行すると、hello_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


helloアプリケーションのMPI並列実行

helloアプリケーションのMPI並列実行の手順は以下の通りです。

1. ワークフォルダへの移動 helloアプリケーションをビルドする際に作成したワークフォルダに移動します。

$ cd ${HOME}/alpls_fortran_build/hello

なお、ワークフォルダ内に実行結果ファイル(hello_param.out.*)があるとアプリケーションが実行できません。実行結果ファイルがある場合は全て削除してから次の手順に進んでください。

2. パラメータファイルの準備 ${ALPS_HOME}/tutorials/alpsize-10-fortran-schedulerにあるパラメータファイルからXMLファイルを生成します。

$ cp ${ALPS_HOME}/tutorials/alpsize-10-fortran-scheduler/hello_params .
$ parameter2xml hello_params

3. helloアプリケーションの実行 以下のコマンドでアプリケーションを実行します。

$ mpirun -np 4 -x OMP_NUM_THREADS=1 ./hello --mpi hello_params.in.xml

並列実行の場合もスレッド並列実行時と同様に、hello_paramsの内容が標準出力に出力されます。