Top/研究のページ/領域気象モデル/WRFの導入

WRF Ver. 3.4.1 と Ver. 3.5 のインストール

導入についての個人的なまとめ

  Debian/GNU Linux の標準的なパッケージだけで簡単に並列処理で動作するので、Intel のコンパイラなど、Debian 
  非標準のコンパイラでライブラリを作り直す気が失せてしまった。また、MPI よりも SMP の方が少しだけ速いし、
  実行のしかたもちょっとだけ簡単で、1,2次元の計算にも対応している。MPI が推奨されていたりするけれど、特に
  問題が発生しなければ gfortran で SMP (smpar) を使うことになると思う。
使ったWRFのバージョン:Ver. 3.4.1, 3.5
  必要に応じてバージョンによる違いについてコメントした。

WRF 導入準備

  1. 手元のハードウエア環境
    • CPU
      AMD Phenom(tm) II X6 1065T Processor : 6コア, 2.90 GHz

      ※ CPU を含むパソコン本体価格は、44,380 円。
      ※ Phenom II X6 は、6つのコアそれぞれに浮動小数点演算ユニットを持っている(情報源)。
      ※ その後のAMDのCPUであるFX-8350は、8コアである。しかし、浮動小数点ユニットは、2つのコアで共用しているので、全体で4つしかない(例えばここ)。

    • GPGPU
      Nvidia "Geforce GTX 660" with compute capability 3.0
      ※ 装着しているが今のところ使っていない。

  2. 並列処理について

    並列処理が行われると格段にスピードが向上するので、並列処理に関わる情報はある程度知っておく必要がある。あきらめて、少しだけ勉強した。

    近年のコンピュータは、1つの CPU(中央演算処理装置)の中に複数のコア(実際に演算する装置)が埋め込まれていることが多い上に、
    ネットワークを介して複数のコンピュータで仕事を分散して計算することが多い。計算機の処理速度が上がっているのは、主として
    複数の演算処理装置を同時に動かす技術「並列処理」の発達に支えられている。

    ところが、並列処理は、そもそも複雑な操作を行いながらの最適化であるので、何が最適かはハードウエア側の事情によって変わっ
    てくる。そこで、並列処理には、いくつかのハードウエアのモデルを想定し、そのモデルに沿った並列処理用のソフトウエアを用意
    している(多分)。WRFのような複雑で計算量の多い計算ソフトは、あらかじめ、複数の並列処理方法に配慮してプログラムされている。
    具体的には次の三つである。ただし、最後の GPGPU は正式にはサポートされていないし、また、これらの名称は並列で述べられる
    ような概念ではないことに注意が必要である(具体的には、SPMとMPIは組み合わせて利用できる)。

    • MPI (Message Passing Interface)
      ネットワークを介しても並列できるような分散処理のためのソフトウエア。
      Debian の場合、OpenMPI と MPICH2 がある。以下では OpenMPI を使う。

    • SMP (Symmetric Multiprocessing)
      メモリを共有する複数の CPU がある時の並列処理。
      Debian の場合、コンパイラである gcc にその機能が組み込まれている他、libgomp を利用する。
      こちらは OpenMP と呼ばれていて、上述の全く別物の OpenMPI と紛らわしい。
      ※ 現有計算機環境下での結論は SMP(OpenMP) を使うことである。

    • GPGPU (General-purpose computing on Graphics Processing Unit)
      グラフィックス用の演算処理装置を一般の数値計算に利用すること。WRF は基本的には対応していない。

      ここの記述を見ると、一見、GPGPU は圧倒的なパフォーマンスを示しているように見える。
       しかし、よく見ると、Micro Physics のプログラムについてであり、全体のパフォーマンスは 1.25倍であるときちんと書いてある。
       現時点では、WRF 全体で速くなることはほとんどなさそうである。

      ※ ただし、Smiling Life の記事は期待を持たせる。

  3. ソフトウエア環境
    Debian GNU/Linux (squeeze) で、主な導入済みパッケージは次のとおり。(この他にもインストールが必要なものがあるかもしれません。)
    Debian GNU/Linux (wheezy) でも動くようです。ただし、パッケージ名が変わっているものがあります。表に赤色で示しました。
用途パッケージ名wheezyのバージョンsqueezeのバージョン説明
全般
gfortran4:4.7.2-14:4.4.5-1The GNU Fortran 95 compiler
gcc4:4.7.2-14:4.4.5-1The GNU C compiler
libnetcdf-dev1:4.1.3-6+b11:4.1.1-5Development kit for NetCDF
libnetcdf6-1:4.1.1-5An interface for scientific data access to large binary data
libnetcdfc71:4.1.3-6+b1-An interface for scientific data access to large binary data
libnetcdff51:4.1.3-6+b1-An interface for scientific data access to large binary data
csh20110502-220070713-2Shell with C-like syntax, standard login shell on BSD systems
dmpar (MPIを使う場合。Distributed Memory Parallel)
libopenmpi-dev1.4.5-11.4.2-4high performance message passing library -- header files
libopenmpi1.31.4.5-11.4.2-4high performance message passing library -- shared library
openmpi-bin1.4.5-11.4.2-4high performance message passing library -- binaries
openmpi-checkpoint1.4.5-11.4.2-4high performance message passing library -- checkpoint support
openmpi-common1.4.5-11.4.2-4high performance message passing library -- common files
smpar (SMPを使う場合。Shared Memory Parallel)
libgomp1:amd644.7.2-5-GCC OpenMP (GOMP) support library
libgomp1-4.4.5-8GCC OpenMP (GOMP) support library



  1. コンパイラの選択

    • gfortran を選択
      WRF を Linux 上で動作させるとき、標準でサポートされているコンパイラは、PGI, Intel, Pathscale, gfortran である。
      このうち、無料で利用できるのは Intel と gfortran であり、さらに、「何の対価もなくプログラム開発するときだけ無償」
      とする Intel のコンパイラは使えない。そこで gfortran を使うことになる。

      なお、Ver. 3.5 では、コンパイル時に次のようなメッセージが現れる。
      ************************** W A R N I N G ************************************
       
      There are some Fortran 20003 features in WRF that your compiler does not recognize
      The IEEE signaling call has been removed.  That may not be enough.
       
      *****************************************************************************
      gfortran が Fortran 2003(20003 というのは次々に現れる規格への皮肉?) に全て対応していないので、うまくいかないかもしれないよ!というメッセージである。
      とりあえず動いているし、Ver 3.4.1 と変わらないようなので、このまま使いつづけることにする。

    • その他の情報とコメント
      ・コンパイラを変更すると、OpenMPI などのライブラリも同じコンパイラでコンパイルしなおす必要がある。
      ・標準的な Debian の環境で WRF を並列処理できるので、環境を破壊してまで他のコンパイラを使う必要性を感じなくなった。
      ・フリーで Open64 というコンパイラの選択肢もある。しかし、情報が極端に少ない。ここの一番最後に、Open64 用の configure.wrf がある。


ダウンロード

コンパイルから試しの実行まで( gfortran serial -並列処理を用いない- で )

   ※ 計測した時間は Ver. 3.4.1 で計測したもの。

  1. configure
    コンパイラとして gfortran を選ぶ。また、CPU は一つのコアだけを用いるとして、serial を選択する。
    実際の入力と出力結果は次の通り。->は入力に関係した行であることを意味する。
    -> [localhost] ~/WRFV3 15:34:15 $ ./configure 
       checking for perl5... no
       checking for perl... found /usr/bin/perl (perl)
       ** WARNING: No path to NETCDF and environment variable NETCDF not set.
       ** would you like me to try to fix? [y]
    -> y
       Enter full path to NetCDF include directory on your system
    -> /usr/include
       Enter full path to NetCDF library directory on your system
    -> /usr/lib
       ...(中略) 
       ------------------------------------------------------------------------
       Please select from among the following supported platforms.
       
          1.  Linux x86_64, PGI compiler with gcc  (serial)
         ...(中略)
         23.  x86_64 Linux, gfortran compiler with gcc   (serial)
         ...(中略)
       
    -> Enter selection [1-34] : 23
       ------------------------------------------------------------------------
    -> Compile for nesting? (0=no nesting, 1=basic, 2=preset moves, 3=vortex following) [default 0]: 0
       
       Configuration successful. To build the model type compile .
       ...(以下省略)
    (更新 : 2013-03-25 (月) 15:48:29)

  2. compile
    具体的に実行可能プログラムを作るには、compile コマンドを実行する。
    -> ./compile
    すると、こんな理想化条件が実行できます、というメッセージが出てくるので、2次元の海陸風モデルを選んで実行する。
    -> ./compile em_seabreeze2d_x
    結構な時間をかけてコンパイルすることになる。一番最後に、コンパイルの所要時間が表示された。
       build started:   2013年  3月 25日 月曜日 15:46:02 JST
       build completed: 2013年 3月 25日 月曜日 15:57:42 JST

    なお、選べるサンプルプログラムは次の通り。
    次元ケースの名称設定
    1em_scm_xysingle column model, 4 km, full physics
    2em_grav2d_xgravity current, 100 m
    2em_hill2d_xflow over a hill, 2 km
    2em_seabreeze2d_xwater and land, 2 km, 20km top, full physics
    2em_squall2d_xsquall line, 250 m
    2em_squall2d_ytranspose of above problemINITIALIZATION
    3em_b_wavebaroclinic wave, 100 km
    3em_firesurface fire, 50 m
    3em_heldsuarezglobal case with polar filtering, 625 km
    3em_leslarge eddy simulation, 100 m
    3em_quarter_sssuper cell, 2 km
    3em_tropical_cyclonehurricane, 15 km


  3. 実行
    -> cd test/em_seabreeze2d_x
    -> csh ./run_me_first.csh
    -> ./ideal.exe
    -> time ./wrf.exe
    最後に
      d01 2007-06-01_17:00:00 wrf: SUCCESS COMPLETE WRF
    と表示されて実行も終了。time で測った所要時間は次のとおり。
       real	4m59.360s
       user	4m50.266s
    (更新 : 2013-03-25 (月) 16:15:02)

コンパイルから試しの実行まで( gfortran dmpar -MPIによる並列化- で )

   ※ 計測した時間は Ver. 3.4.1 で計測したもの。

  1. configure
    コンパイラとして gfortran を選ぶ。また、CPU の複数コアを用いる MPI を利用するとして、dampr を選択する。
    実際の入力と出力結果(ほとんど省略)
    -> [localhost] ~/WRFV3 15:34:15 $ ./configure 
       ...(中略)
       ------------------------------------------------------------------------
       Please select from among the following supported platforms.
       
          1.  Linux x86_64, PGI compiler with gcc  (serial)
         ...(中略)
         25.  x86_64 Linux, gfortran compiler with gcc   (dmpar)
         ...(中略)
       
    -> Enter selection [1-34] : 25
       ------------------------------------------------------------------------
       ...(以下省略)

  2. compile
    2次元の海陸風モデルは、MPIに対応していない。そこで、3次元の傾圧不安定波を選んで実行する。
    -> ./compile em_b_wave
    結構な時間をかけてコンパイルすることになる。一番最後に、コンパイルの所要時間が表示された。
       build started:   2013年  3月 25日 月曜日 17:19:28 JST
       build completed: 2013年 3月 25日 月曜日 17:31:53 JST

  3. 実行
    -> cd test/em_b_wave
    -> csh ./run_me_first.csh
    -> mpirun -n 5 ./ideal.exe
    -> time mpirun -n 5 ./wrf.exe
    ログは表示されない。mpirun を使って実行するところがミソ。この場合、5個のコアを使っている。time で測った所要時間は次のとおり。
       real	3m21.428s
       user	16m32.850s
       sys	0m2.952s
    同じプログラムを serial で実行すると、dmpar では2〜3倍の速さで動いていることがわかる。
       real	9m19.641s
       user	9m2.306s
       sys	0m14.033s
    (更新 : 2013-03-25 (月) 18:37:30)

コンパイルから試しの実行まで( gfortran smpar -SMPによる並列化- で )

   ※ 計測した時間は Ver. 3.4.1 で計測したもの。

  1. configure
    コンパイラとして gfortran を選ぶ。また、CPU の複数コアを用いる OpenMP(SMP) を利用するとして、sampr を選択する。
    実際の入力と出力結果(ほとんど省略)
    -> [localhost] ~/WRFV3 15:34:15 $ ./configure 
       ...(中略)
       ------------------------------------------------------------------------
       Please select from among the following supported platforms.
       
          1.  Linux x86_64, PGI compiler with gcc  (serial)
         ...(中略)
         24.  x86_64 Linux, gfortran compiler with gcc   (smpar)
         ...(中略)
       
    -> Enter selection [1-34] : 24
       ------------------------------------------------------------------------
       ...(以下省略)

  2. compile
    3次元の傾圧不安定波を選んで実行する。
    -> ./compile em_b_wave
         ...(中略)
       build started:   2013年  3月 28日 木曜日 12:17:18 JST
       build completed: 2013年 3月 28日 木曜日 12:28:56 JST

  3. 実行
    環境変数 OMP_NUM_THREADS でコアの数を与えるのがミソ。
    -> cd test/em_b_wave
    -> csh ./run_me_first.csh
    -> export OMP_NUM_THREADS=5
    -> ./ideal.exe
    -> time ./wrf.exe
         ...(中略)
       real	3m13.938s
       user	15m12.773s
       sys	0m28.894s

    serial で実行するよりも、2〜3倍の速い。
    (更新 : 2013-03-28 (木) 14:43:09)

最適化あれこれ

   ※ 計測した時間は Ver. 3.4.1 で計測したもの。


トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-19 (月) 11:19:11