### Slide p.53: 準備1 ## まず,sshで obcx.cc.u-tokyo.ac.jp にログイン ## 以下はOBCX上での操作 # Xcryptの利用環境をロード module load xcrypt # ヘルプメッセージが正常に表示されることを確認 xcrypt --help # .bashrc を編集して,次回以降のログイン時に自動的にmodule loadされるようにする # 以下の例では,エディタとしてnanoを使っているが,emacsやviなど使い慣れたものを nano .bashrc # 以下の一行をファイルの末尾などに追加 module load xcrypt # いったんOBCXからログオフし,再度ログインして,以下のコマンドが成功することを確認 xcrypt --help ### Slide p.54: 準備2 # Lustreファイルシステムに移動 # ($USERは自身のアカウント名を意味するが,このまま打ち込んでもOK) cd /work/gt00/$USER # Intel MPI Benchmark (IMB)をダウンロード git clone https://github.com/intel/mpi-benchmarks # lsコマンドで mpi-benchmarks というディレクトリができていることを確認 ls # ソースファイルのディレクトリに移動してmake cd mpi-benchmarks/src_c make # lsコマンドで(少なくとも)IMB-MPI1というファイルができていることを確認 ls # サンプルスクリプトのダウンロード,展開,コピー wget http://ais.sys.i.kyoto-u.ac.jp/~task/xcrypt-tutorial-202210.zip unzip xcrypt-tutorial-202210.zip cp xcrypt-tutorial-202210/*.xcr . # lsコマンドで imb-s.xcr imb-p1.xcr imb-p2.xcr imb-p3.xcr というファイルがあることを確認 ls ### 単一ジョブ実行 ## Slide p.13: imb-s.xcr の内容を確認 cat imb-s.xcr ## Slide p.14: スクリプトの実行 # 少し待たされるが,スライドのようなメッセージが表示されていれば成功 xcrypt imb-s.xcr ## Slide p.15 生成されたファイルを確認 # job-imbs_obcx.bat job-imbs_stderr job-imbs_stdout のファイルがあることを確認 # なお,-ltr はファイルを詳細情報とともに更新が新しいファイルほど末尾に表示するオプション ls -ltr # ファイルの中身を確認 (job-imbs_stderrの中身は空っぽで正しい) cat job-imbs_obcx.bat cat job-imbs_stderr cat job-imbs_stdout ## プロセス数変更 # Slide p.18: imb-s.xcr を編集し,$procs = 28 の 28 を 56 に変更 nano imb-s.xcr # Slide p.19: 以下のコマンドによりジョブが実行**されない**ことを確認 xcrypt imb-s.xcr ## Slide p.20: ジョブのキャンセルおよび再実行 # 以下のいずれかを実行 xcryptdel --cancel job-imbs xcryptdel --clean # 以下のコマンドで,今度はジョブが実行されることを確認 xcrypt imb-s.xcr # ファイルおよびその中身を確認 # 特に,job-imbs_obcx.bat の --mpi proc= の値が 56 になっているかどうか ls -ltr cat job-imbs_obcx.bat cat job-imbs_stderr cat job-imbs_stdout ## Slide p.22: IDによるジョブ同定 # Slide p.19: 以下のコマンドによりジョブが実行**されない**ことを確認 xcrypt imb-s.xcr # imb-s.xcr を編集し,'id' => 'job-imbs' の 'job-imbs' を 'job-imbs-p56' に変更 nano imb-s.xcr # 以下のコマンドで,今度はジョブが実行されることを確認 xcrypt imb-s.xcr # (optional) 以下のコマンドによって,別のIDが振られてジョブが実行されることを確認 xcrypt --genid imb-s.xcr ## Slide p.23: パラメータのデフォルト値 # 設定ファイルのテンプレートをホームディレクトリにコピー cp /work/opt/local/apps/xcrypt/1e8a958966aa/etc/xcryptrc ~/.xcryptrc # ~/.xcrypt を編集. nano ~/.xcryptrc [[修正内容]] --- # JS_limit_time = 3600 JS_queue = queuename JS_group = groupname --- とある行を,それぞれ --- JS_limit_time = "00:05:00" JS_queue = tutorial JS_group = gt00 --- と変更する(コメントアウトを表す"#"も消してください) # imb-s.xcr からキューに関する情報を削除 nano imb-s.xcr [[修正内容]] --- 'JS_limit_time' => '00:05:00', 'JS_queue' => 'tutorial', 'JS_group' => 'gt00', --- とある行を削除または(行の先頭に"#"を置くことで)コメントアウト # 上記の削除を行ってもスクリプトが正常に動くことを確認 xcryptdel --clean xcrypt imb-s.xcr ## 複数ジョブ実行 # Slide p.25: ファイルの内容を確認 cat imb-p1.xcr # Slide p.26: 実行.スライドにあるような表示になることを確認. xcrypt imb-p1.xcr # 生成されたファイルを確認.適宜 cat コマンドで中身も確認してみてください. ls -ltr ## 複数パラメータによるジョブ集合定義 # Slide p.28: ファイルの内容を確認 cat imb-p2.xcr # Slide p.29: 実行.エラーで落ちるかもしれない.落ちなかったとしても適当に Ctrl+C で中断 xcrypt imb-p2.xcr # 先ほど投入したジョブをキャンセルしておく xcryptdel --clean ## Slide p.30: 投入ジョブ数制限 # imb-p2.xcr を編集 nano imb-p2.xcr [[編集内容]] --- use base qw (core); --- を --- use base qw (limit core); --- にして --- # limit::initialize (3); --- のコメントアウトを外す(先頭の"#"を削除する) # Slide p.31: 実行.同時にqueuedまで進むジョブが3つに抑えられていることを確認(preparedまでは全てのジョブが進む) xcrypt imb-p2.xcr # なお,実行終了まではかなり時間がかかる場合があるみたいなので, # 待ってられない場合は適当に Ctrl+C で実行を中断してもらうとよいと思います. # 中断後,xcryptdel --clean してもらうと,投入したジョブも全て中断されます ## ジョブごとにディレクトリを作り,そこでプログラム実行 # Slide p.32: ファイルの内容を確認 cat imb-p3.xcr # Slide p.33: 実行 xcryptdel --clean xcrypt imb-p3.xcr # 実行完了を待つ # (待ってられない場合は,少なくとも1つのジョブがfinishedになるのを待って Ctrl+C で中断) # 生成されたファイルを確認 # ジョブ名に対応するディレクトリが生成されていることを確認 ls -ltr # 生成されたディレクトリを適当に選んで,中身を確認 ls job-imbp-P2-Bcast cat job-imbp-P2-Bcast/job-imbp-P2-Bcast_stdout ## Slide p.34: 結果・状況確認コマンド # 以下のコマンドを実行し,出力を確認してみる xcryptstat xcryptstat --cat stdout xcryptstat --ls stdout --cat stdout xcryptstat --ls stdout --ls batch --cat stdout --cat batch --csv > result.csv cat result.csv xcryptstat --name ".*P4.*" --ls stdout --ls batch --cat stdout --cat batch --csv > result2.csv cat result2.csv # csvファイルは手元のPCにコピーし,Excelなどで内容を確認してみるとよい ## Slide p.35: ジョブのやりなおし xcryptdel --cancel job-imbp-P2-Bcast xcrypt imb-p3.xcr # → job-imbp-P2-Bcast が再実行されることを確認 xcryptdel --cancel ".*P2.*" xcrypt imb-p3.xcr # → P2が名前に含まれるジョブがすべて再実行されることを確認 ## Slide p.36: Tips # いったん最初の状態に戻して,imb-p3.xcr を実行する xcryptdel --clean xcrypt imb-p3.xcr # → Ctrl+C でいったん中断 # → 同じスクリプトをもう一度実行すると,続きから実行されることを確認 xcrypt imb-p3.xcr # いったんOBCXからログアウトしたとしても,再ログインし,もといたディレクトリに戻って再実行可能 cd /work/gt00/$USER cd mpi-benchmarks/src_c xcrypt imb-p3.xcr #################################################### #### BLASの性能測定をしてみよう(スライドにはない例) #### (上記までの演習の少なくとも「.xcryptrcの編集」までをやっておく必要があります) cd xcrypt-tutorial-202210/blas # → サンプルが置いてあるディレクトリに移動 # ここにあるCプログラムは講習前半のサンプルプログラムのうち Mat-Mat-BLAS/C/ にあるものに # 「blasの解答」を埋めたものです(行列積をblasで高速化したプログラム) make ls # → mat-mat-blas ができていることを確認 ## (1) 単一ジョブ実行 cat mat-s.xcr # → 内容を確認 xcrypt mat-s.xcr # → 実行.以下のようなメッセージがでることを確認 # job-mat <= initialized # job-mat <= prepared # job-mat <= submitted # job-mat <= queued # job-mat <= running # job-mat <= done # job-mat <= finished cat job-mat_stdout # → 以下のような結果になることを確認 # N = 8000 # Mat-Mat time = 0.549480 [sec.] # 1863579.076718 [MFLOPS] # OK! ## (2) スレッド数を変えながら性能測定 cat mat-p1.xcr diff -bu mat-s.xcr mat-p1.xcr # → mat-p1.xcr の内容や mat-s.xcr との違いを確認 xcrypt mat-p1.xcr # → 実行.以下のようなメッセージがでることを確認(ただし順不同) # job-mat_8 <= finished # job-mat_56 <= finished # job-mat_32 <= finished # job-mat_1 <= finished xcryptstat --ls stdout --cat stdout # → 結果を一括確認 head -n2 *stdout # → 使い慣れたLinuxコマンドでの確認でもOK ## (3) スレッド数と行列サイズを変えながら性能測定 cat mat-p2.xcr diff -bu mat-p1.xcr mat-p2.xcr # → mat-p2.xcr の内容や mat-p2.xcr との違いを確認 xcrypt mat-p2.xcr # → 実行.これまでと同様だが大量のメッセージが出て,全ジョブがfinishedになるのを確認 xcryptstat --ls stdout --cat stdout head -n2 *stdout # → 結果確認 head -n2 *4000_stdout head -n2 *8000_stdout head -n2 *16000_stdout # → 各行列サイズの結果を個別に確認 head -n2 *_1_*_stdout head -n2 *_8_*_stdout head -n2 *_32_*_stdout head -n2 *_56_*_stdout # → 各スレッド数の結果を個別に確認