プロファイルツール実行例 アプリ「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 -
© Copyright 2025 ExpyDoc