NICAM-DC

プロファイルツール実行例
アプリ「NICAM-DC」
2013 年 9 月 13 日
日本電気株式会社
はじめに
本ドキュメントでは,アプリ「NICAM-DC」の 20130823 版におけるプロファイルツール連携の作業
履歴を記載します.
目次
はじめに ................................................................................. 1
1.
TSUBAME2.5‐通常実行まで ............................................................. 2
1.1. 環境設定(MPI ライブラリ&コンパイラ).............................................. 2
1.2. コンパイルとソース修正 ........................................................... 2
1.2.1. Makedef ファイルの修正 ....................................................... 2
1.2.2. ジョブスクリプトの準備 ....................................................... 3
1.3. バッチジョブ実行 ................................................................. 4
1.4. 実行結果の確認 ................................................................... 5
2.
TSUBAME2.5‐Scalasca 連携実行 ........................................................ 8
2.1. Scalasca 環境設定 ................................................................ 8
2.2. Scalasca 連携‐コンパイル ........................................................ 8
2.2.1. コンパイラの設定 ............................................................. 8
2.3. Scalasca 連携‐プログラム実行..................................................... 9
2.4. Scalasca 連携‐実行結果の表示(可視化)............................................ 10
2.5. その他(※未完了項目) ............................................................ 10
- 1 -
1. TSUBAME2.5‐通常実行まで
1.1.
環境設定(MPI ライブラリ&コンパイラ)
まずは NICAM-DC で使用する環境変数を.bashrc に定義します.
環境変数 NICAM_SYS で,実行するマシン・コンパイラを指定する値を設定します.20130823 版で
は PGI コンパイラ対応の設定なども増えていますが,ここでは 20130331 版の指定に相当する値を設
定しています.
~設定例~
export NICAM_SYS=Linux64-intel-mpich2
後述の Scalasca で OpenMPI を使用するため,ここでも最新の OpenMPI と Intel コンパイラを使用
するために${HOME}/.bashrc 等で環境変数(パス等)を設定します.なお,NICAM-DC の設定ファイルに
Intel Compiler + OpenMPI 用の設定はありませんが,以下の手順で OpenMPI のケースでも make が可
能です.
~設定例~
export SELECT_MPI=/usr/apps/openmpi/1.6.3 /intel
export PATH=${SELECT_MPI}/bin:$PATH
export LD_LIBRARY_PATH=${SELECT_MPI}/lib:$LD_LIBRARY_PATH
. /usr/apps/isv/intel/2013.0.079/bin/compilervars.sh intel64
※2013 年 8 月現在,デフォルトの Intel コンパイラの ver.は 13.0 です.
1.2.
コンパイルとソース修正
TSUBAME2.5 環境におけるプログラム移植のための修正を記載します.
1.2.1. Makedef ファイルの修正
TSUBAME2.5 環境に合わせて,コンパイラおよびオプションの修正を行います.修正対象のファ
イルは NICAM-DC のアーカイブを展開したディレクトリ以下にある,sysdep/Makedef.Linux64intel-mpich2 となります.コンパイラオプションから,Intel Compiler 2013 使用時にメモリ消費
の異常な増大による SEGV エラーの原因となる-heap-arrays オプションを削除します.
~修正前:Makedef.Linux64-intel-mpich2(11 行目付近)~
FFLAGS_FAST = -fpp3 -O3 -xHost -ip
-assume byterecl -convert big_endian
-ftz -fp-model precise -pc 80
-mcmodel=medium -shared-intel
-heap-arrays -fno-alias
- 2 -
\
\
\
\
~修正後:Makedef.Linux64-intel-mpich2(11 行目付近)~
FFLAGS_FAST = -fpp3 -O3 -xHost -ip
-assume byterecl -convert big_endian
-ftz -fp-model precise -pc 80
-mcmodel=medium -shared-intel
-fno-alias
\
\
\
\
・ Intel コンパイラ ver.13.0 の「-heap-arrays」オプションに関する補足
Ø
一般的に,stack 領域が不足した場合の改善を目的として使用されています.
Ø
他にも原因に応じて,システム側の stack サイズ拡張(ulimit -s 等)や,OpenMP スレ
ッド毎の stack サイズ拡張(環境変数 OMP_STACKSIZE)等で回避が可能です.TSUBAME2.0
の計算ノードでは,予めシステム側の stack サイズが「unlimited」となっています.
Ø
エラーに関する参考情報(URL):http://software.intel.com/en-us/articles/intelfortran-compiler-increased-stack-usage-of-80-or-higher-compilers-causessegmentation-fault
1.2.2. ジョブスクリプトの準備
実行ジョブスクリプトはインストールディレクトリを基準として test/case/{gravitywave,
heldsuarez, jablonowski, mountainwave, traceradvection}以下のディレクトリに対してそれぞ
れ用意する必要があります.ここでは gravitywave を使用する前提で記載します.
始めにディレクトリ内で make, make jobshell コマンドを順次実行することによりサブディレク
トリが作成され、その配下に実行スクリプト run.sh が生成されます.
~make コマンド実行例 ~
$ cd test/case/gravitywave
$ make
make -C ../../../src || exit 1
make[1]: Entering directory `/work1/t2g-hp120261/XXXXXXXX/NICAM-DC_20130823/src'
mkdir -p ../bin
mkdir -p ../lib
install driver-dc mkmnginfo mkrawgrid mkhgrid mkvlayer mkllmap ../bin/
ln -svf
../bin/driver-dc ../bin/nhm_driver
`../bin/nhm_driver' -> `../bin/driver-dc'
##### nhm_driver is Installed Successfully #####
make[2]: Entering directory `/work1/t2g-hp120261/XXXXXXXX/NICAM-DC_20130823/src/tool'
install ico2ll fio_dump fio_ico2ll fio_ico2ll_mpi ../../bin
##### Tools are Installed Successfully #####
make[2]: Leaving directory `/work1/t2g-hp120261/XXXXXXXX/NICAM-DC_20130823/src/tool'
make[1]: Leaving directory `/work1/t2g-hp120261/XXXXXXXX/NICAM-DC_20130823/src'
$ make jobshell
mkdir -p gl05rl00z40pe10
##### Run configuration #####
- 3 -
+system
+testcase
+glevel
+rlevel
+MPI process
+zlayer
+vgrid
+large step max
+DTL
+diffusion coef.
+history steps
:
:
:
:
:
:
:
:
:
:
:
Linux64-intel-mpich2
nhm_driver
5
0
10
40
vgrid40_24000-600m.dat
0
1200
1.29D16
0
sh ../../../sysdep/Mkjobshell.Linux64-intel-mpich2.sh 5 0 10 40 vgrid40_24000-600m.dat ..
/../../.. nhm_driver
sh Mkconf.nhm_driver.sh
5 0 10 40 vgrid40_24000-600m.dat ../../../.
. nhm_driver 0 1200 '1.29D16' 0
$ cd gl05rl00z40pe10
$ ls
ico2ll.sh nhm_driver.cnf run.sh
$ chmod +x run.sh
make コマンド実行後にジョブ投入用のスクリプト sub.sh を以下の内容で作成し、run.sh と共に
実行権を付けておきます.なお,t2sub コマンドの引数については 1.3 節の説明もご参照ください.
~ジョブ投入スクリプト(sub.sh) ~
#!/bin/sh
t2sub -q S -W group_list=t2g-hp120261 -l walltime=01:00:00 -l select=10:ncpus=1:mpiprocs=
1:mem=53gb -l place=scatter ./run.sh
1.3.
バッチジョブ実行
コンパイルして作成した実行モジュール「nhm_driver」と,テストケースが含まれる配布データ
一式を使用して,バッチジョブを実行します.
~使用テストケース~
並列数
ステップ数
10ノード(MPI 10プロセス)
100ステップ (nhm_driver.cnfのLSTEP_MAXで変更可能)
~ステップ数指定箇所(赤字強調部分)~
###--- for FULL
&TIMEPARAM
DTL
INTEG_TYPE
LSTEP_MAX
SSTEP_MAX
RUN (11 days): LSTEP_MAX = 792
=
=
=
=
4.D0,
"RK3",
100,
6,
- 4 -
SPLIT
start_year
start_month
start_day
=
=
=
=
.true.,
1000,
1,
1,
/
~バッチジョブスクリプト例(run.sh)~
#!/bin/bash
cd ${PBS_O_WORKDIR}
(中略)
mpirun -np 10 “--report-bindings” “-bysocket -cpus-per-proc 6 -bind-to-core” “-hostfile ${PB
S_NODEFILE}” ./nhm_driver || exit
・ 作業ディレクトリと同じパス(PBS_O_WORKDIR)に移動し,mpirun を実行します.
・ TSUBAME2.5(westmere)は,6 コア*2 ソケットの計 12 個の物理的 CPU 構成となっています.
bind に関する記述は Open MPI のオプションであり,ハイブリッド実行時の各プロセスをソ
ケット毎に割り当てる設定となります.
※ その他,バッチジョブの詳細については省略します(詳細はマニュアルにて)
~バッチジョブ投入スクリプト(例)~
#!/bin/sh
t2sub -q S -W group_list=t2g-hp120261 -l walltime=01:00:00 -l select=10:ncpus=1:mpiprocs=1:
mem=53gb -l place=scatter ./run.sh
・ 「-q」でキュー名,「-W group_list」でグループ名を指定します(ワークショップ用リソー
ス,およびアプリ FS の課題番号の情報に基づいて設定します)
・ 「-l select=10:ncpus=1:mpiprocs=1:mem=53gb -l place=scatter」で,10 プロセス&53GB
のチャンクを 10 個分確保します.結果的に,10 ノード,MPI 10 プロセスの実行の設定と
なります.
・ 使用時間(上限)は,「-l walltime」で設定します.jablonowski では実行時間が 1 時間を超
えるため “-l walltime=02:00:00”と,2 時間程度に設定します.
※ その他,バッチジョブの詳細については省略します(詳細はマニュアルにて)
1.4.
実行結果の確認
バッチジョブのログ(OTHERS.e*,OTHERS.o*)と NICAM-DC の実行ログ(msg.pe000XX)を確認し,プ
ロ グ ラ ム が nhm_driver.cnf で 指 定 し た ス テ ッ プ 数 ま で 問 題 な く 動 作 し , ” MPI process has
normally finished.”の正常終了メッセージが出ていることを確認します.
- 5 -
~実行ログ(msg.pe00000)抜粋~
############################################################
#
#
#
NICAM : Nonhydrostatic ICosahedal Atmospheric Model
#
#
#
############################################################
+++ Module[adm]/Category[common share]
&ADMPARAM
GLEVEL =
5,
RLEVEL =
0,
VLAYER =
40,
RGNMNGFNAME
= rl00-prc10.info
,
ADM_HGRID_SYSTEM
= ICO
:
(中略)
:
### TIME =0000/01/01-00:06:40 ( step =
100 )
### HISTORY num_output =
6
###
date-time = 0000/01/01-00:06:40
[ml_u
] max= 2.05191127342726247E+01, min=-2.89313419731474369E-02
[ml_v
] max= 1.03934911852128842E+00, min=-1.03967582708538187E+00
[ml_w
] max= 4.99150930969809337E-01, min=-1.32168588743427229E+00
[ml_pres
] max= 9.63625810175771185E+04, min= 1.77136414153784563E+03
[ml_tem
] max= 2.97691014736732711E+02, min= 1.20763378520201329E+02
[sl_ps
] max= 9.97218069838358642E+04, min= 9.94401515465747652E+04
====== data range check : prognostic variables ======
--- pre
: max= 9.63625810175771185E+04, min= 1.77136414153784563E+03
--- tem
: max= 2.97691014736732711E+02, min= 1.20763378520201329E+02
--- vx
: max= 1.99486482358846793E+01, min=-2.00156436012568655E+01
--- vy
: max= 1.99642285118565468E+01, min=-2.04036589858609076E+01
--- vz
: max= 8.57983300921663639E-01, min=-8.58230820907723513E-01
--- w
: max= 5.01832845836001296E-01, min=-1.32270939909474050E+00
--- qv
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- qc
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- qr
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- passive1
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- passive2
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- passive3
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
--- passive4
: max= 0.00000000000000000E+00, min= 0.00000000000000000E+00
*** [FIO] File registration : WRITE2
*** filename: restart_all_GL05RL00z40.pe000000
##### finish main loop #####
:
(中略)
:
*** Computational Time Report
*** ID=001 : Total
T(avg)=
43.558, T(max)=
43.610, T(min
)=
43.436, N=
1
*** ID=002 : Setup ALL
T(avg)=
0.714, T(max)=
0.766, T(min
- 6 -
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
)=
***
0.591,
ID=003 :
0.112,
ID=004 :
0.168,
ID=005 :
0.039,
ID=006 :
2.047,
ID=007 :
1.078,
ID=008 :
0.350,
ID=009 :
42.841,
ID=010 :
41.303,
ID=011 :
39.450,
ID=012 :
3.175,
ID=013 :
1.543,
ID=014 :
4.929,
ID=015 :
7.437,
ID=016 :
3.291,
ID=017 :
0.911,
ID=018 :
0.184,
ID=019 :
0.240,
ID=020 :
26.341,
ID=021 :
5.397,
ID=022 :
2.536,
ID=023 :
1.153,
ID=024 :
0.203,
ID=025 :
1.929,
ID=026 :
0.051,
ID=027 :
0.128,
ID=028 :
N=
1
FILEIO in
N=
10
FILEIO out
N=
140
COMM var
N=
24
COMM data_transfer
N= 5229
++++OPRT_gradient
N= 2102
++++OPRT_horizontalize_vec
N= 3202
Main ALL
N=
1
+Atmos
N=
100
++Dynamics
N=
100
+++Large step
N=
300
++++src_advection_convergence_m
N=
300
++++src_advection_convergence
N= 3400
++++src_flux_convergence
N= 5900
++++OPRT_divergence
N= 5900
++++numfilter_hdiffusion
N=
100
++++OPRT_laplacian
N= 1000
++++OPRT_diffusion
N=
200
+++Small step
N=
300
++++numfilter_divdamp
N= 1400
++++OPRT3D_divdamp
N= 1400
++++OPRT_divdamp
N= 1400
++++numfilter_divdamp_2d
N= 1400
++++src_gradient
N= 1400
++++src_buoyancy
N=
300
++++vi_rhow_update_matrix
N=
300
++++vi_path2
T(avg)=
0.149, T(max)=
0.304, T(min
T(avg)=
0.206, T(max)=
0.243, T(min
T(avg)=
0.183, T(max)=
0.249, T(min
T(avg)=
6.492, T(max)=
8.597, T(min
T(avg)=
1.101, T(max)=
1.128, T(min
T(avg)=
0.352, T(max)=
0.356, T(min
T(avg)=
42.843, T(max)=
42.845, T(min
T(avg)=
41.428, T(max)=
41.488, T(min
T(avg)=
39.652, T(max)=
39.934, T(min
T(avg)=
3.268, T(max)=
3.556, T(min
T(avg)=
1.636, T(max)=
1.862, T(min
T(avg)=
5.070, T(max)=
5.317, T(min
T(avg)=
7.652, T(max)=
7.987, T(min
T(avg)=
3.335, T(max)=
3.385, T(min
T(avg)=
1.311, T(max)=
1.731, T(min
T(avg)=
0.185, T(max)=
0.186, T(min
T(avg)=
0.245, T(max)=
0.248, T(min
T(avg)=
26.735, T(max)=
26.875, T(min
T(avg)=
6.244, T(max)=
6.707, T(min
T(avg)=
2.600, T(max)=
2.714, T(min
T(avg)=
1.159, T(max)=
1.171, T(min
T(avg)=
0.253, T(max)=
0.289, T(min
T(avg)=
1.999, T(max)=
2.134, T(min
T(avg)=
0.059, T(max)=
0.069, T(min
T(avg)=
0.154, T(max)=
0.178, T(min
T(avg)=
11.188, T(max)=
12.011, T(min
- 7 -
)=
10.603, N= 1100
*** ID=029 : ++++vi_rhow
)=
0.892, N= 1100
*** ID=030 : +++Tracer Advection
)=
7.521, N=
300
*** ID=031 : +History
)=
1.261, N=
100
T(avg)=
0.921, T(max)=
0.977, T(min
T(avg)=
7.585, T(max)=
7.689, T(min
T(avg)=
1.319, T(max)=
1.443, T(min
MPI process going to STOP...
MPI process has normally finished.
############################################################
2. TSUBAME2.5‐Scalasca 連携実行
2.1.
Scalasca 環境設定
Scalasca は,アプリ FS 共用にインストールしたパッケージを使用します.節 1.1 の環境設定に加
えて,${HOME}/.bashrc 等で環境変数(パス等)を設定します.
~設定例~
export PATH=/work1/t2g-hp120261/fs_share_tool/scalasca-1.4.3/bin:${PATH}
export
export
export
export
export
export
export
PAPI_ROOT=/work0/GSIC/apps/papi-5.0.0
PATH=${PATH}:${PAPI_ROOT}/bin
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PAPI_ROOT}/lib
LIBRARY_PATH=${LIBRARY_PATH}:${PAPI_ROOT}/lib
FPATH=${FPATH}:${PAPI_ROOT}/include
CPATH=${CPATH}:${PAPI_ROOT}/include
MANPATH=${MANPATH}:${PAPI_ROOT}/man
※2013 年 8 月現在,Scalasca は ver.1.4.3 がインストールされています.
※HW カウンタの情報は,PAPI を利用して採取しています.PAPI の環境設定は不要ですが,異なる
PAPI の ver.を設定している場合には,削除する必要があります.
2.2.
Scalasca 連携‐コンパイル
2.2.1. コンパイラの設定
Scalasca を利 用し たコン パイ ルは ,基本 的には mpif90 等 コン パイ ラのコ マン ドの 前に
「scalasca -instrument」(もしくは短縮形「skin」)を追加するのみです.Makedef ファイルの該
当部分を修正しました.
~修正個所: Makedef.Linux64-intel-mpich2 (20 行目・35 行目付近)~
#FC
FC
= mpif90
= skin mpif90
#CC
CC
= mpicc
= skin mpicc
- 8 -
2.3.
Scalasca 連携‐プログラム実行
コンパイルして作成した実行モジュール「nhm_driver」と,配布されたデータ一式を使用して,
バッチジョブを実行します.使用するケースとジョブの投入方法は,節 1.2, 1.2.2 の通常実行と同
じです.
Scalasca を利用したプログラム実行は,実行モジュール(逐次)や mpirun(MPI 並列)コマンドの前
に「scalasca -analyze」(もしくは短縮形「scan」)を追加して行います.
TSUBAME2.5 のバッチジョブでの実行では,Scalasca と mpirun のオプションが正しく識別できな
いため,mpirun のオプションを「”(ダブルクォーテーション)」で囲う必要があります.混同を避け
るため,Scalasca 側のオプションを指定する場合は,設定ファイル(EPIK.CONF)に書くことをお勧め
します.
~バッチジョブスクリプトの例(run.sh)~
#!/bin/bash
cd ${PBS_O_WORKDIR}
(中略)
scan mpirun -np 10 "--report-bindings" "-bysocket -cpus-per-proc 6 -bind-to-core" "-hostfil
e ${PBS_NODEFILE}" ./npm_driver || exit
~設定ファイル(EPIK.CONF)の例~
EPK_TITLE=fs_nicam-dc
★アーカイブ名
EPK_METRICS=PAPI_SP_OPS:PAPI_DP_OPS:PAPI_VEC_SP ★メトリックの指定(PAPIプリセットイベント)
ESD_BUFFER_SIZE=100000000
★バッファサイズの指定
- 9 -
2.4.
Scalasca 連携‐実行結果の表示(可視化)
X Window が使用できるターミナルを立ち上げて,出力されたアーカイブ(epik_*)に対して.
「scalasca -examine」(もしくは短縮形「square」)を実行します.
~コマンド実行例~
% square epik_fs_nicam-dc
~表示画面~
2.5.
その他(※未完了項目)
ワークショップでは,TSUBAME/Scalasca がターゲットだが,VampirTrace および京&FX10 の場合に
ついても同様に執筆のつもり?
・ 本ドキュメントもしくは wiki で追加検討(汎用的な部分は Tips として wiki 掲載を励行)
Ø
代表的な Scalasca のオプションやパラメータ(コンパイル時・実行時)
Ø
PAPI プリセットイベント(papi_avail 参照)
Ø
ユーザー区間指定(手動)の例
Ø
PAPI のイベント指定は変更する可能性アリ
Ø
(東工大様への依頼分)各種結果からの分析方法,Vampir サーバーの使い方,全ツール
の評価時間一覧表(オーバーヘッド)
- 10 -