プロファイルツール実行例アプリ para-tcci 2013 年 9 月 19 日日本電気株式会社 はじめに 本ドキュメントでは, アプリ para-tcci のプロファイルツール連携の作業履歴を記載します. 目次 はじめに... 1 1. TSUBAME2.5 通常実行まで... 2 1.1. 環境設定 (MPI ライブラリ & コンパイラ )... 2 1.2. コンパイルとソース修正... 2 1.2.1. makefile.intel ファイルの修正... 2 1.2.2. ジョブスクリプトの準備... 2 1.3. バッチジョブ実行... 3 1.4. 実行結果の確認... 4 2. TSUBAME2.5 Scalasca 連携実行... 6 2.1. Scalasca 環境設定... 6 2.2. Scalasca 連携 コンパイル... 6 2.2.1. コンパイラの設定... 6 2.3. Scalasca 連携 プログラム実行... 7 2.4. Scalasca 連携 実行結果の表示 ( 可視化 )... 8 2.5. その他 ( 未完了項目 )... 8-1 -
1. TSUBAME2.5 通常実行まで 1.1. 環境設定 (MPI ライブラリ & コンパイラ ) まずは para-tcci で使用する環境変数を.bashrc に定義します. 後述の Scalasca で OpenMPI を使用するため, ここでも最新の OpenMPI と Intel コンパイラを使用 するために ${HOME}/.bashrc 等で環境変数 ( パス等 ) を設定します. ~ 設定例 ~ 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. makefile.intel ファイルの修正 TSUBAME2.5 環境に合わせて, コンパイラおよびオプションの修正を行います. 修正対象のファイルは para-tcci のアーカイブを展開したディレクトリ直下にある,makefile.intel となります. LIB で指定される mkl ライブラリのオプションを TSUBAME2.5 環境に合わせて設定します. ~ 修正前 :makefile.intel (2 行目付近 )~ LIB = -L/opt/intel/mkl/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core ~ 修正後 :makefile.intel(2 行目付近 )~ LIB = -mkl=parallel コンパイル時は make の -f オプションを使用して makefile.intel を指定します. ~ コンパイル実行 ~ $ make f makefile.intel 1.2.2. ジョブスクリプトの準備実行ジョブスクリプトはインストールディレクトリ直下にある example 以下のディレクトリに対して用意する必要があります. 入力データファイルは small.inp, medium.inp, large.inp の 3 種類が用意されていますが, 以下 medium.inp を使用する前提とします. 始めに先の手順でコンパイルした実行バイナリを実行ディレクトリにコピーします. - 2 -
~ 実行バイナリ準備 ~ $ cd example $ cp../a.out. 次にジョブ実行用のスクリプトファイル run.sh を作成します.OpenMP の並列数は run.sh 中の OMP_NUM_THREAD で指定します. ~ ジョブ投入スクリプト (run.sh) ~ #!/bin/bash cd ${PBS_O_WORKDIR} 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 export CUDA_ROOT=/opt/cuda/4.1. ${CUDA_ROOT}/cuda.sh export OMP_NUM_THREAD=6 mpirun -np 16 "--report-bindings" "-bysocket -cpus-per-proc 6 -bind-to-core" "-x OMP_NUM_ THREADS" "-hostfile ${PBS_NODEFILE}"./a.out < medium.inp make コマンド実行後にジョブ投入用のスクリプト sub.sh を以下の内容で作成し run.sh と共に 実行権を付けておきます. なお,t2sub コマンドの引数については 1.3 節の説明もご参照ください. ~ ジョブ投入スクリプト (sub.sh) ~ #!/bin/sh t2sub -q S -W group_list=t2g-hp120261 -l walltime=2:00:00 -l select=16:ncpus=6:mpiprocs=2 :mem=53gb -l place=scatter./run.sh 1.3. バッチジョブ実行 コンパイルして作成した実行モジュール a.out と, テストケースが含まれる配布データ一式を 使用して, バッチジョブを実行します. ~ 使用テストケース (large)~ 並列数 1,8,16,32,64 ノード (MPI 1,8,16,32,64 プロセス ) + OMP 1,6 スレッド ~ バッチジョブスクリプト例 (run.sh)~ - 3 -
#!/bin/bash cd ${PBS_O_WORKDIR} ( 中略 ) export OMP_NUM_THREAD=6 mpirun -np 16 "--report-bindings" "-bysocket -cpus-per-proc 6 -bind-to-core" "-x OMP_NUM_TH READS" "-hostfile ${PBS_NODEFILE}"./a.out < medium.inp 作業ディレクトリと同じパス (PBS_O_WORKDIR) に移動し,mpirun を実行します. OpenMP 並列数は環境変数 OMP_NUM_THREAD で指定します. TSUBAME2.5(westmere) は,6 コア *2 ソケットの計 12 個の物理的 CPU 構成となっています. bind に関する記述は Open MPI のオプションであり, ハイブリッド実行時の各プロセスをソケット毎に割り当てる設定となります. その他, バッチジョブの詳細については省略します ( 詳細はマニュアルにて ) ~ バッチジョブ投入スクリプト ( 例 )~ #!/bin/sh t2sub -q S -W group_list=t2g-hp120261 -l walltime=2:00:00 -l select=16:ncpus=6:mpiprocs=2:m em=53gb -l place=scatter run.sh -q でキュー名, -W group_list でグループ名を指定します( ワークショップ用リソース, およびアプリ FS の課題番号の情報に基づいて設定します ) -l select=16:ncpus=6:mpiprocs=2:mem=53gb -l place=scatter で,16 ノード & 各ノード 2 プロセス &53GB&6CPU のチャンクを 16 個分確保します. 結果的に,16 ノード,MPI 32 プロセス,OMP6 スレッドのハイブリッド並列実行の設定となります. 使用時間 ( 上限 ) は, -l walltime で設定します. -l walltime=2:00:00 と記述すると, 2 時間の設定になります. その他, バッチジョブの詳細については省略します ( 詳細はマニュアルにて ) 1.4. 実行結果の確認 バッチジョブのログ (OTHERS.e*,OTHERS.o*) を確認し, プログラムが問題なく動作し, Your calculation finished with 0 warning(s). のメッセージが出ていることを確認します. ~ 実行ログ ( 標準出力 : OTHERS.o*) 抜粋 ~ *************************************************** Quantum chemistry calculation program package Revision 0.1-4 -
written by K. ISHIMURA *************************************************** Wed Jul 31 09:45:00 2013 t2a000139 Molecular Geometry (Angstrom) Atom X Y Z C -0.151854-0.019504 0.291605 N -0.876114-1.013821 0.787674 C -2.221660-0.806368 0.460615 : ( 中略 ) : Computational condition Number of atoms = 26 Number of alpha electrons = 72 Number of beta electrons = 72 Number of basis shells = 136 Number of basis contracted functions = 300 Number of basis primitive functions = 492 Nuclear repulsion energy = 1465.51995596 a.u. ==================== SCF Iteration ==================== Iter SubIt Total Energy Delta Energy Delta Density DIIS Error 1 1-1501.491679680-1501.491679680 58.226778888 2.156020881 2 1-1548.977149354-47.485469674 0.325222969 0.100160974 3 2-1549.550074356-0.572925002 0.117408609 0.060606171 4 3-1549.753721889-0.203647533 0.064540735 0.021539122 5 4-1549.790043608-0.036321719 0.012096105 0.005958200 6 5-1549.792968238-0.002924630 0.008964578 0.002806833 7 6-1549.793948494-0.000980256 0.004376542 0.001354687 8 7-1549.794118704-0.000170210 0.002649974 0.000708625 9 8-1549.794165214-0.000046510 0.000908000 0.000290778 10 9-1549.794172846-0.000007633 0.000327367 0.000158286 11 10-1549.794174490-0.000001643 0.000113821 0.000066163 12 11-1549.794174781-0.000000291 0.000089175 0.000041646 13 12-1549.794174881-0.000000100 0.000032829 0.000015678 14 13-1549.794174898-0.000000017 0.000018454 0.000003905 15 14-1549.794174901-0.000000003 0.000007717 0.000001855 ----------------------------------------- SCF Converged. RHF Energy = -1549.794174901 a.u. ----------------------------------------- - 5 -
Total CPU time : 615.7 seconds Total wall time: 154.4 seconds ( 0 days 0 hours 2 minutes 34.4 seconds) Wed Jul 31 09:47:34 2013 Used memory : 29 MB Your calculation finished with 0 warning(s). 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 PAPI_ROOT=/work0/GSIC/apps/papi-5.0.0 export PATH=${PATH}:${PAPI_ROOT}/bin export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PAPI_ROOT}/lib export LIBRARY_PATH=${LIBRARY_PATH}:${PAPI_ROOT}/lib export FPATH=${FPATH}:${PAPI_ROOT}/include export CPATH=${CPATH}:${PAPI_ROOT}/include export 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 ) を追加するのみです.Makefile.machine ファイルの該当部分を修正します. また,OpenMP の指定は OPT= の行で -openmp により指定されているのと, -fopenmp オプションは Scalasca が認識せずにフラット MPI でコンパイルされてしまう問題があるため, -fopenmp オプションの記述を削除しています. ~ 修正前 : makefile.intel (1~3 行目付近 )~ F90 = mpif90 -DMPI -fopenmp LIB = -L/opt/intel/mkl/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core OPT = -openmp -i8 ~ 修正後 : makefile.intel (1~3 行目付近 )~ - 6 -
F90 = scalasca -instrument mpif90 DMPI LIB = -mkl=parallel OPT = -openmp -i8 2.3. Scalasca 連携 プログラム実行 コンパイルして作成した実行モジュール a.out と, 配布されたデータ一式を使用して, バッチ ジョブを実行します. 使用するケースとジョブの投入方法は, 節 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 16 "--report-bindings" "-bysocket -cpus-per-proc 6 -bind-to-core" "-hostfil e ${PBS_NODEFILE}"./a.out < medium.inp ~ 設定ファイル (EPIK.CONF) の例 ~ EPK_TITLE=fs_para-tcci アーカイブ名 EPK_METRICS=PAPI_SP_OPS:PAPI_DP_OPS:PAPI_VEC_SP メトリックの指定 (PAPIプリセットイベント) ESD_BUFFER_SIZE=100000000 バッファサイズの指定 - 7 -
2.4. Scalasca 連携 実行結果の表示 ( 可視化 ) X Window が使用できるターミナルを立ち上げて, 出力されたアーカイブ (epik_*) に対して. scalasca -examine ( もしくは短縮形 square ) を実行します. ~ コマンド実行例 ~ % square epik_para-tcci ~ 表示画面 ~ 2.5. その他 ( 未完了項目 ) ワークショップでは,TSUBAME/Scalasca がターゲットだが,VampirTrace および京 &FX10 の場合に ついても同様に執筆のつもり? 本ドキュメントもしくは wiki で追加検討 ( 汎用的な部分は Tips として wiki 掲載を励行 ) 代表的な Scalasca のオプションやパラメータ ( コンパイル時 実行時 ) PAPI プリセットイベント (papi_avail 参照 ) ユーザー区間指定 ( 手動 ) の例 PAPI のイベント指定は変更する可能性アリ ( 東工大様への依頼分 ) 各種結果からの分析方法,Vampir サーバーの使い方, 全ツールの評価時間一覧表 ( オーバーヘッド ) - 8 -