Tutorials:ALPS Fortran Introduction/ja

From ALPS
Revision as of 09:49, 9 February 2012 by Kota (talk | contribs) (Created page with "{{Languages|Tutorials:ALPS Fortran Introduction}} ALPS Fortranのチュートリアルです。ALPS Fortranのインストール方法及び利用方法について説明して…")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

ALPS Fortranのチュートリアルです。ALPS Fortranのインストール方法及び利用方法について説明しています。なお、このチュートリアルはFortranプログラミングの知識を有する読者を想定しています。

動作環境 

ALPS FortranはALPS(Algorithms and Libraries for Physics Simulations)上でFortranコードを実行するためのラッパライブラリです。したがって、ALPS Fortranを利用するためには以下の環境が必要になります。

ALPS ALPS本体の動作環境及びインストール手順につきましては、こちらをご参照ください。
CMake ALPS Fortranのコンパイル及びクライアントコードのコンパイルにはCMakeを利用します。対応バージョンは2.8.0以上です。
Fortranコンパイラ(Gnu/Intel/Fujitsu) ALPS本体と同じコンパイラが必要になります。コンパイラのインストール手順につきましては各コンパイラのマニュアルをご参照ください。


ALPS Fortranインストール

ALPS Fortranはパッチファイルとして提供されており、ALPS 本体にパッチを適用することでALPS Fortranが利用できます。 APLS Fortranパッチの適用手順は以下の通りです。


① パッチのダウンロード 以下の場所より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.patch

③ ALPS本体のビルド・インストール 通常のALPS同様、公式HPの内容に従ってビルド・インストールを行うとALPS Fortranも一緒にインストールされます。 ALPS Fortranが正しくインストールされると以下のファイルが生成されます。

  • ${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_ROOT}はALPSのインストールフォルダを指します。


サンプルコード

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


helloアプリケーション

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

isingアプリケーション

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

looper-2アプリケーション

  • 外部のライブラリを利用したアプリケーションの例です。


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


helloアプリケーション

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

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


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

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

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

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

② cmakeの実行 ソースコードフォルダを指定してcmakeを実行します。(${SAMPLES}はALPS Fortranを解凍して生成されるsamplesフォルダです)

$ cmake –DALPS_ROOT:PATH=${ALPS_ROOT} \
>       ${SAMPLES}/hello

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

$ make

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


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

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


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

$ cd ${HOME}/alpls_fortran_build/hello

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


② パラメータファイルの準備

${SAMPLES}/helloにあるパラメータファイルからXMLファイルを生成します。
$ cp ${SAMPLES}/hello/hello_params .
$ parameter2xml hello_params

parameter2xmlコマンドにつきましてはALPS本体の公式HPをご参照ください。

③ 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並列実行の手順は以下の通りです。 ① ワークフォルダへの移動 helloアプリケーションをビルドする際に作成したワークフォルダに移動します。

$ cd ${HOME}/alpls_fortran_build/hello

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

② パラメータファイルの準備

${SAMPES} /helloにあるパラメータファイルからXMLファイルを生成します。
$ cp ${SAMPLES}/hello/hello_params .
$ parameter2xml hello_params

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

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

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