Comments
Description
Transcript
スパコン利用法 - 北海道大学情報基盤センター
スパコンシステム利用法 利用講習会資料 速習 スパコン利用法 北海道大学 情報基盤センター 大型計算機システム HITACHI SR11000 model K1 1 スパコンシステム利用法 短期集中講座内容 システムの特徴を知る コンパイルとリンク (FORTRAN および C言語) TSS処理によるジョブの実行 バッチ処理(LoadLeveler)によるジョブの実行 IBMコンパイラを用いたコンパイル,リンク および 実行 2 スパコンシステム利用法 速習 -その1- システムの特徴を知る 33 スパコンシステム利用法 スーパーコンピュータ HITACHI SR11000 model K1 総合演算性能5.4Tflops,主記憶容量5TB,40ノード構成 ノード構成:Power5+(2.1GHz)×16way,主記憶容量128GB,理論演算性能 134.4 Gflops 4 スパコンシステム利用法 計算機リソース 基本サービス TSS利用 汎用 コンピュータ バッチ利用 TSS・アプリ 実行 (wine) 計算サーバ malt1 malt2 malt3 定額制サービス TSS・アプリ 実行(wine) ノードロック アプリ実行 パック利用 パック利用 サービス スーパーコンピュータ ノード占有利用 34ノード程度 (hop02~) FORTRAN, C/C++ コンパイラ 数値計算ライブ ラリ (corn) HITACHI Superdome HITACHI SR11000/K1 5 スパコンシステム利用法 システム構成 40ノード (同一構成・同一性能) SGI SAN Server S600 SANRISE 9585V 外部ネットワーク 1000Base-T 1 演算装置(ノード) 外部磁気ディスク 100 TB 3 演算装置 39 I/Oノード Processor: 16 way Memory: 128GB 演算装置 hop00 hop02 hop38 High Performance Switch (HPS) (8 GB/s単方向 × 2) 2 hop01 演算装置 4 hop03 演算装置 40 演算装置 hop39 6 スパコンシステム利用法 演算装置の構成 Power5+(2.1GHz) × 16way (Peak Performance: 134.4 Gflops) PE0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 L1 命令 64kB データ32kB L2 L2 L2 L2 L2 L2 L2 L2 1.875MB/2PE L3 L3 L3 L3 L3 L3 L3 L3 36MB/2PE Memory Memory Memory Memory 128GB/node DDR2-533 スイッチ Memory Memory Memory Memory High Performance Switch (HPS) 7 スパコンシステム利用法 キャッシュを活用 レジスタ L3キャッシュ 36MB/2CPU L1キャッシュ 32kB/1CPU B L2キャッシュ 1875kB/2CPU キャッシュアウト メモリアクセス 128バイト単位 A 主記憶装置 8 スパコンシステム利用法 システム利用法 ユーザ端末 MS Windows Linux ログインホスト TSSノード (front-end nodes) wine.hucc.hokudai.ac.jp バッチ処理専用ノード (back-end nodes) hop02 hop04 LoadLeveler コンパイル・リンク TSSでの実行 バッチジョブ 実行 バッチジョブ投入 ssh接続 アプリ実行 corn.hucc.hokudai.ac.jp https接続 InterCompass hop03 hop05 コンパイル・リンク TSSでの実行 バッチジョブ投入 アプリ実行 ファイル転送 scp/sftp front-end nodes back-end nodes 9 スパコンシステム利用法 ジョブ,プロセス,スレッド ジョブ ノードに対応 CPUに対応 プロセス(ランク)0 プロセス(ランク)1 プロセス(ランク)2 スレッド 0 スレッド 1 スレッド 0 スレッド 1 スレッド 0 スレッド 1 スレッド 2 スレッド 3 スレッド 2 スレッド 3 スレッド 2 スレッド 3 分散メモリ型 (DMPまたはMPI)並列 共有メモリ型 (SMP)並列 10 スパコンシステム利用法 TSSノード並列処理実行法 TSSノード(2台) hop00.hucc.hokudai.ac.jp 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 hop01.hucc.hokudai.ac.jp 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 プロセスあたり主記憶容量 8 GBまで利用可能. MPIプログラムは,プロセス数×8 GBとなります. SMP並列では,スレッド数の初期値を 4 に設定. 1 CPUを利用した逐次処理 2~4 CPUを利用したSMP 小規模 並列処理 2~4 MPI並列処理 2 MPI+2 SMP並列処理 商用アプリケーションソフトウエアの利用 11 スパコンシステム利用法 バッチノード並列処理実行法 hop02 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ex.1 ノード占有実行 16 CPU/100 GB ex.2 ex.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 MPI並列(ノード内SMP並列) 複数ノード占有実行 hop03 0 大規模SMP 中規模MPI並列 単一ノード占有実行 4 CPUを利用したSMPで,4 MPI並列 ex.4 小規模MPI並列 単一ノード占有実行,16 MPI並列 12 スパコンシステム利用法 基本ソフトウエア オペレーティングシステム AIX 5L (UNIX SystemV準拠) コンパイラ 日立製作所製 IBM社製 FORTRAN 最適化FORTRAN90 XL Fortran Enterprise Edition for AIX 5L C/C++ 最適化C 最適化標準C++ XL C/C++ Enterprise Edition for AIX 5L ライブラリ MATRIX/MPP, MATRIX/MPP/SSS MSL2 BLAS, LAPACK, ScaLAPACK IMSL Fortranライブラリ IBM ESSL for AIX 5L IBM Parallel ESSL for AIX 5L IMSL Fortran/C ライブラリ NAG FORTRAN SMP Library/Cヘッダ 並列プログラム 開発環境 IBM Parallel Environment for AIX 5L ジョブ実行管理 IBM LoadLeveler for AIX 5L 13 スパコンシステム利用法 速習 -その2- コンパイルおよびリンク FORTRAN および C言語 14 スパコンシステム利用法 フローチャート ユーザ開発 プログラム 最適化FORTRAN 最適化C/C++ (日立コンパイラ) XL FORTRAN XL C/C++ (IBMコンパイラ) 参考:サンプルコードを /tmps/2008/* または /tmps/2009/* に置いています. 実行 オブジェクト バッチ処理 (LoadLeveler) バッチジョブ定額制 TSS処理 (インタラクティブ) 基本サービス経費に含む 解析結果 15 スパコンシステム利用法 最適化FORTRAN90: SMP FLAGS LD LDFLAGS LIBS OBJS LOGS PROGRAM SRCS all: = = = = = = = = -64 -model=K1 -Oss -nolimit -noscope –hf95 –loglist /opt/ofort90/bin/f90 -64 -parallel $(SRCS:.f90=.o) $(SRCS:.f90=.log) main.exe main.f90 sub01.f90 sub02.f90 sub03.f90 $(PROGRAM) $(PROGRAM): $(OBJS) @echo "Linking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done" .f90.o: $(SRCS) $(LD) $(FLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(LOGS) $(PROGRAM) core .SUFFIXES: .f90 16 スパコンシステム利用法 最適化FORTRAN90: MPI FLAGS LD LDFLAGS LIBS OBJS LOGS PROGRAM SRCS all: = = = = = = = = -64 -model=K1 -Oss -nolimit -noscope –hf95 -loglist /usr/local/bin/mpif90 -64 -parallel $(SRCS:.f90=.o) $(SRCS:.f90=.log) main.exe main.f90 sub01.f90 sub02.f90 sub03.f90 $(PROGRAM) $(PROGRAM): $(OBJS) @echo "Linking $@ ..." $(LD) $(LDFLAGS) $(OBJS) –o $@ $(LIBS) @echo "done" .f90.o: $(SRCS) $(LD) $(FLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(LOGS) $(PROGRAM) core .SUFFIXES: .f90 17 スパコンシステム利用法 最適化FORTRAN90オプション コンパイルオプション (1) オプション 機 能 -32 32ビットアドレッシングモードのオブジェクト作成 -64 64ビットアドレッシングモードのオブジェクト作成 -model=K1 ハードウエアモデルに適したオブジェクト作成 オプション 機 能 -O3 プログラム全体で大域的な最適化 -O4 制御機構および演算順序の変換などを含むプログラム全体の最適化 -Os 実行速度が速くなるように,ループ融合などのループ構造の変換を 含めたプログラム全体の最適化 -Oss -Osに加えて,さらに実行速度が速くなるように最適化 18 スパコンシステム利用法 最適化FORTRAN90オプション コンパイルオプション (2) 機 オプション 能 -parallel=0 または -noparallel 要素並列化を抑止 -parallel=2 または -parallel SECTION型要素並列化と自動並列化を行う ・変数および配列のプライベート化 ・リダクション変数要素並列化 -parallel=3 上記のほかに, ・ループ分配,ループ分割,ループの一重化 ・サイクリック分割による要素並列化 -parallel=4 上記のほかに, ・パイプライン要素並列化 ・条件下のインダクション要素並列化 19 スパコンシステム利用法 最適化FORTRAN90オプション リンク時のオプション オプション 機 能 -32 32ビットアドレシングモード -64 64ビットアドレシングモード -parallel 要素並列化用ライブラリをリンク -noparallel 要素並列化用ライブラリのリンクを抑止 コンパイル時にも,このオプションを指定する必要があります. 20 スパコンシステム利用法 デバッグオプション プログラムの異常終了をチェック $ f90 -64 -Oss -s,TRACE test.f90 -o test.exe エラーが発生したモジュールからメインプログラムまでをトレースバック 異常終了する箇所を特定することに有効 プログラムのデバッグ $ f90 -64 -Oss -debug test.f90 -o test.exe 引数の型,次元数,個数や配列サイズのチェック バグを特定することに有効 21 スパコンシステム利用法 最適化C: SMP CFLAGS LD LDFLAGS LIBS OBJS LOGS PROGRAM SRCS = = = = = = = = -64 -model=K1 -Os -nolimit -noscope –loglist /opt/optc/bin/cc -64 -parallel -lc -lm $(SRCS:.c=.o) $(SRCS:.c=.log) fd1d.exe fd1d.c all: $(PROGRAM) $(PROGRAM): $(OBJS) @echo "¥nLinking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done ¥n" .c.o: $(SRCS) $(LD) $(CFLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(LOGS) core $(PROGRAM) 22 スパコンシステム利用法 最適化C: MPI CFLAGS LD LDFLAGS LIBS OBJS LOGS PROGRAM SRCS = = = = = = = = -64 -model=K1 -Os -nolimit -noscope –loglist /usr/local/bin/mpicc_r -64 -parallel -lc -lm $(SRCS:.c=.o) $(SRCS:.c=.log) main.exe main.c sub1.c sub2.c sub3.c all: $(PROGRAM) $(PROGRAM): $(OBJS) @echo "¥nLinking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done ¥n" .c.o: $(SRCS) $(LD) $(CFLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(LOGS) core $(PROGRAM) 23 スパコンシステム利用法 速習 -その3- TSSジョブの実行 24 スパコンシステム利用法 TSS処理 SMP (4 スレッド) ./main.exe -F'prunst(threadnum(4))' #!/bin/csh -f setenv HF_PRUNST_THREADNUM 4 ./main.exe コマンドラインオプション -F'prunst(threadnum(4))' と環境変数設定は同一効果 25 スパコンシステム利用法 速習 -その4- バッチジョブの実行 LoadLevelerを使いこなそう! 26 スパコンシステム利用法 ジョブキュー IBM Load Leveler V3.3 for AIX 5Lでジョブ管理 ユーザの申告により,ジョブクラスy(時間無制限)に変更可能 ジョブ区分 バッチジョブ キュー 演算時間 (時 間) a 1 b 24 c 72 標 準 最 大 ノード数 ノード数 1 16 最大主 記憶容量 1ノード 128GB ラージページ 100GB 27 スパコンシステム利用法 LoadLevelerのコマンド コマンド 機 能 使用方法 llsubmit バッチジョブの投入 llsubmit <opt> <script file> llq ジョブの表示(実行されているジョブ および待ち状態のジョブを表示) llq <opt> <job number/name> llstatus マシンの状態に関する情報を表示 llstatus <opt> <host name> llclass 利用可能なジョブクラスの表示 llclass <opt> <class name> llcancel バッチジョブの取り消し,強制終了 llcancel <opt> <job number/name> <opt>: オプションの設定例 $ llq -u <user ID> $ llq -f %o %nh %dd %c %id | sort 自分のジョブ情報のみを表示 各種情報をソートして表示 28 スパコンシステム利用法 ジョブスクリプトの作成(SMP) ジョブコマンドファイル(job command file)の作成!! 16スレッドによるSMP並列処理(ノード占有) ラージページ(メモリページ)を指定する sample.cmd #!/bin/csh –f #@job_type = parallel #@class = a #@output = $(jobid).out #@error = $(jobid).err #@queue :cshシェルスクリプトであることを宣言 :ジョブタイプを並列処理に設定 :ジョブクラス a を指定(a,b,cを設定必須) :標準出力ファイル名を指定(必須) :標準エラーファイルを指定(必須) :ジョブステップの実行(必須) setenv LANG C setenv LC_MESSAGES C setenv LDR_CNTRL LARGE_PAGE_DATA=M ./sample.exe -F'prunst(threadnum(16))' :言語を C (英語表記)に設定 :出力メッセージの言語を C (英語)に設定 :ラージページメモリの使用を指定 :実行用オブジェクト(16SMP)の実行 29 スパコンシステム利用法 バッチジョブの投入 $ llsubmit sample.cmd llsubmit: Processed command file through Submit Filter: "/var/home/loadl/llfilter.sh". KBGT60003-I Budget function authenticated x12345. x12345 is not assigned account number. llsubmit: The job “hop01.2946” has been submitted. ジョブIDが2946で受け付けられた. $ llq Id Owner Submitted ST PRI Class Running On ------------- ------- ------------ --- ---- ------ ----------hopc01.2946.0 user 12/26 16:44 R 50 a hopc01.2950.0 x12345 12/26 16:52 I 50 b hopc04 2 job step(s) in queue, 1 waiting, 0 pending, 1 running, 0 held, 0 preempted ST (ステータス): R (実行中),I (実行待ち) Running On: ジョブが実行されているノード名 $ llcancel hopc01.2946.0 llcancel: Cancel command has been sent to the central manager ジョブID2946を指定して,ジョブを取り消しまたは強制終了させる. 30 スパコンシステム利用法 MPI並列処理(例1) poe: IBM AIX Parallel Operating Environment sample01.jcf ノード内では要素並列(共有メモリ型並列処理) 4プロセス×16スレッドによるMPI並列処理(4ノード占有) #!/bin/csh -f :cshシェルスクリプトであることを宣言 #@class = a :ジョブクラスaを指定(必須) #@job_type = parallel :ジョブタイプを並列に指定(必須) #@bulkxfer=yes :バルクデータ転送 #@network.MPI=sn_all,,US,,instances=2 :ノード間高速ネットワークを使用 :使用ノード数を指定(必須) #@node = 4 #@node_usage = not_shared :ノードあたりのプロセス数 :ノードの占有利用 (他のプロセスを排除) #@output = $(jobid).out :標準出力ファイル名を指定(必須) #@error = $(jobid).err :標準エラーファイルを指定(必須) #@queue :ジョブステップの実行(必須) setenv LANG C :言語を C (英文表示)を指定 setenv LC_MESSAGES C :出力メッセージの言語を C (英語)に設定 setenv LDR_CNTRL LARGE_PAGE_DATA=M :ラージページメモリの使用を指定 :poeを使用してオブジェクトの実行 #@tasks_per_node = 1 poe ./sample.exe -F'prunst(threadnum(16))' 31 スパコンシステム利用法 ノード内8MPI並列処理(例2) 8プロセス×2スレッド (合計16CPU使用) $ mpif90 -Os -64 -parallel sample.f -o sample.exe sample02.jcf #!/bin/csh -f #@ class = a #@ job_type = parallel #@ node = 1 #@ total_tasks = 8 #@ resources = ConsumableCpus(2) #@ output = $(jobid).out #@ error = $(jobid).err #@ queue setenv LANG C setenv LC_MESSAGES C setenv LDR_CNTRL LARGE_PAGE_DATA=M poe ./sample.exe -F'prunst(threadnum(2))' :cshシェルスクリプトであることを宣言 :ジョブクラス a を指定(必須) :ジョブタイプを並列に指定(必須) :使用ノード数 1 を指定(必須) :実行プロセス数 8を指定 :プロセスあたりのCPU数を 2 に指定 :標準出力ファイル名を指定(必須) :標準エラーファイルを指定(必須) :ジョブステップの実行(必須) :言語を C (英文表示)を指定 :出力メッセージの言語を C (英語)に設定 :ラージページメモリの使用を指定 :poeを使用してオブジェクトの実行 32 スパコンシステム利用法 ノード内16MPI並列(例3) コンパイルオプションとして,-noparallel を指定し, 要素並列化(SMP並列)を行わない $ mpif90 -noparallel sample.f -o sample.exe sample03.jcf 16プロセスによるMPI並列処理(1ノード占有) #!/bin/csh -f #@class = a #@job_type = parallel #@node = 1 #@total_tasks = 16 #@resources = ConsumableCpus(1) #@output = $(jobid).out #@error = $(jobid).err #@queue setenv LANG C setenv LC_MESSAGES C setenv LDR_CNTRL LARGE_PAGE_DATA=M poe ./sample.exe :cshシェルスクリプトであることを宣言 :ジョブクラス a を指定(必須) :ジョブタイプを並列に指定(必須) :使用ノード数 1 を指定(必須) :実行プロセス数 16 を指定 :プロセスあたりのCPU数を 1 に指定 :標準出力ファイル名を指定(必須) :標準エラーファイルを指定(必須) :ジョブステップの実行(必須) :言語を C (英文表示)を指定 :出力メッセージの言語を C (英語)に設定 :ラージページメモリの使用を指定 :poeを使用してオブジェクトの実行 33 スパコンシステム利用法 3ノード48MPI並列処理(例4) 48プロセスによるMPI並列処理(3ノード占有,SMP並列なし) sample04.jcf #!/bin/csh -f #@ class = a #@ job_type = parallel #@ node = 3 #@ total_tasks = 48 #@ resources = ConsumableCpus(1) #@ output = $(jobid).out #@ error = $(jobid).err #@ queue setenv LANG C setenv LC_MESSAGES C setenv LDR_CNTRL LARGE_PAGE_DATA=M poe ./sample.exe :cshシェルスクリプトであることを宣言 :ジョブクラス a を指定(必須) :ジョブタイプを並列に指定(必須) :使用ノード数 3 を指定(必須) :実行プロセス数 48 を指定 :プロセスあたりのCPU数を 1 に指定 :標準出力ファイル名を指定(必須) :標準エラーファイルを指定(必須) :ジョブステップの実行(必須) :言語を C (英文表示)を指定 :出力メッセージの言語を C (英語)に設定 :ラージページメモリの使用を指定 :poeを使用してオブジェクトの実行 34 スパコンシステム利用法 MPI並列処理を実行 6プロセス×16スレッドによるMPI並列処理(6ノード占有,最大主記憶容量600GB使用) sample.cmd #!/bin/csh -f #@job_type = parallel #@class = a #@bulkxfer = yes #@network.MPI = sn_all,,US,,instances=2 #@node = 6 #@tasks_per_node = 1 #@node_usage = not_shared #@output = $(jobid).out #@error = $(jobid).err #@queue unlimit setenv LANG C setenv LC_MESSAGES C setenv MP_INFOLEVEL 0 setenv MP_PROCS 6 setenv LDR_CNTRL LARGE_PAGE_DATA=M poe ./main.exe -F'prunst(threadnum(16))' :cshシェルスクリプトを宣言 :ジョブタイプを並列に指定(必須) :ジョブクラスaを指定(必須) :バルクデータ転送 :ノード間高速ネットワーク :使用ノード数を指定(必須) :ノードあたりのプロセス数 :ノードの占有利用 :標準出力ファイル名を指定(必須) :標準エラーファイルを指定(必須) :ジョブステップの実行(必須) :環境変数 :ラージページ(最大100GB/ノード)を利用 :poeを使用してオブジェクトの実行 35 スパコンシステム利用法 使用頻度の高いステートメント 構 ステートメント 文 機 能 class class = <job queue> ジョブクラスを指定a,b,c(またはy) job_type job_type = <serial/parallel> 逐次または並列 node node = <1 - 16> 使用ノード数 resources ConsumableCpus(16) プロセスあたりのCPU数を指定 tasks_per_node 1 - 16 ノードあたりのプロセス数を指定 input input=<file name> 標準入力ファイル output output=<file name> 標準出力ファイル error error=<file name> 標準エラー出力先ファイル queue queue ジョブステップの実行 コマンドライン・オプション オプション PRUNST(THREADNUM(N)) 機 能 SMP並列スレッド数を N に指定 36 スパコンシステム利用法 実行時環境変数 環境変数 機 能 LDR_CNTRL=LARGE_PAGE_DATA=M 仮想メモリページサイズにLargePage(100GB)を使用 LDR_CNTRL=MAXDATA=N プログラムが使用する動的メモリ容量をNで指定 HF_900PTS=“F[実行時オプション]” 実行時オプションを指定 HF_OPEN装置番号=“BUFLESS(YES)” 装置番号に対する書式なし入出力はバッファレス入出力 にする LANG=C 言語をCロケールに設定. コマンドpoeを使用するときは必須 LC_MESSAGES=C メッセージをCロケールに設定 コマンドpoeを使用するときは必須 MP_INFOLEVEL=N MPI並列実行時のインフォメーションレベル MP_EAGER_LIMIT=N メッセージサイズの閾値 MP_PROCS=N MPI並列実行時のプロセス数 MP_SHARED_MEMORY=yes ノード内MPIでメモリ共有 FT装置番号F001=ft.10 装置番号の入出力装置に割り当てるファイル 注 ラージページの設定はノードあたり100GBになっています! 37 スパコンシステム利用法 速習 -その5- IBM XL Enterprise コンパイラ FORTRAN および C言語 コンパイル,リンク および実行 38 スパコンシステム利用法 IBM XL Fortranコンパイラ コマンド 説 明 xlf_r Fortran77で記述されたプログラムをコンパイルし, SMP実行用バイナリを生成する.オプションを指定す ることによって,プログラムの自動並列化を行う. xlf90_r Fortran90で記述されたプログラムをコンパイルし, SMP実行用バイナリを生成する.オプションを指定す ることによって,プログラムの自動並列化を行う. mpxlf_r MPIライブラリを使用して記述されたFortranプログラ ムをコンパイルし,実行用バイナリを生成する. (注1) xlf, xlf90, mpxlf, mpxlf90 は逐次処理オブジェクトを生成 (注2) *_r はSMP並列処理オブジェクトを生成(オプション-qsmpまたは-qsmp=auto). (注3) xlf, xlf_r, mpxlf, mpxlf_r はサフィックス .f (FORTRAN77)で使用 (注4) xlf90, xlf90_r, mpf90, mpxlf90_r はサフィックス .f90 (FORTRAN90)で使用 39 スパコンシステム利用法 IBM XL Fortranオプション オプション 説 明 -O3, -O4, -O5 最適化 -qhot ループに関する高度最適化 -qarch=auto アーキテクチャに適した最適化 -qtune=auto 命令選択,スケジューリングにおいて指定したハード ウエア固有の最適化 -qsuffix=f=f90 プログラムのファイル名拡張子がf90であることを指定 -q64 64ビット対応の実行ファイルを作成 -blpdata ラージページを使用することを指定 -lmass MASSライブラリを使用 -qsmp SMPで並列化可能なループを自動的に並列化 -qsource コンパイルリストにソースコードを追加 40 スパコンシステム利用法 IBM XL Fortran: SMP FLAGS LD LDFLAGS LIBS OBJS PROGRAM SRCS all: = = = = = = = -q64 -O4 -qsmp=auto /usr/bin/xlf_r -O4 -q64 -qsmp=auto $(SRCS:.f90=.o) main.exe main.f90 sub01.f90 sub02.f90 sub03.f90 $(PROGRAM) $(PROGRAM): $(OBJS) @echo "Linking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done" .f90.o: $(SRCS) $(LD) $(FLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(PROGRAM) core .SUFFIXES: .f90 41 スパコンシステム利用法 IBM XL Fortran: MPI FLAGS LD LDFLAGS LIBS OBJS PROGRAM SRCS all: = = = = = = = -q64 -O3 -qsmp=auto /usr/bin/mpxlf_r -O3 -q64 -qsmp=auto $(SRCS:.f90=.o) main.exe main.f90 sub01.f90 sub02.f90 sub03.f90 $(PROGRAM) $(PROGRAM): $(OBJS) @echo "Linking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done" .f90.o: $(SRCS) $(LD) $(FLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) $(PROGRAM) core .SUFFIXES: .f90 42 スパコンシステム利用法 IBM XL Cコンパイラ コマンド 説 明 xlc_r ANSI C89準拠で記述されたプログラムをコンパイルし, SMP実行用バイナリを生成する.プログラムの自動並 列化を行う. xlc ANSI C89準拠で記述されたプログラムをコンパイルし, 逐次実行用バイナリを生成する. mpcc_r mpcc MPIライブラリを使用して記述されたANSI C89準拠プ ログラムをコンパイルし,ノード内SMP並列処理を行 うハイブリッド実行用バイナリを生成する.プログラ ムの自動並列化を行う. ANSI C89準拠で記述されたプログラムをコンパイルし, 逐次実行用バイナリを生成する.プログラムの自動並 列化は行われず,ノードあたり1プロセスの処理. 43 スパコンシステム利用法 IBM XL C: SMP CFLAGS = -q64 -O3 -qsmp=auto LD = /usr/vac/bin/xlc_r LDFLAGS = -q64 -qsmp=auto LIBS = -lc -lm OBJS = $(SRCS:.c=.o) PROGRAM = main.exe SRCS = main.c sub1.c sub2.c sub3.c all: $(PROGRAM) $(PROGRAM): $(OBJS) @echo "¥nLinking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done ¥n" .c.o: $(SRCS) $(LD) $(CFLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) core $(PROGRAM) 44 スパコンシステム利用法 IBM XL C: MPI CFLAGS = -q64 -O3 -qsmp=auto LD = /usr/bin/mpcc_r LDFLAGS = -O3 -q64 -qsmp=auto LIBS = -lc -lm OBJS = $(SRCS:.c=.o) PROGRAM = main.exe SRCS = main.c sub1.c sub2.c sub3.c all: $(PROGRAM) $(PROGRAM): $(OBJS) @echo "¥nLinking $@ ..." $(LD) $(OBJS) $(LDFLAGS) -o $@ $(LIBS) @echo "done ¥n" .c.o: $(SRCS) $(LD) $(CFLAGS) -c $< clean:; @rm -f $(OBJS) core clobber:; @rm -f $(OBJS) core $(PROGRAM) 45 スパコンシステム利用法 TSS領域でのSMP実行用ファイル SMP (4 スレッド) 4SMP設定と スレッド待機中の動作設定 #!/bin/csh –f setenv XLSMPOPTS "spins=0:yields=0:parthds=4" ./main.exe または #!/bin/csh –f setenv OMP_NUM_THREADS 4 ./main.exe 46 スパコンシステム利用法 TSS領域でのMPI実行用シェルファイル MPI (4 プロセス) ノードリストの設定ファイル を環境変数に設定 #!/bin/csh –f setenv LANG C setenv LC_MESSAGES C setenv MP_HOSTFILE ./host.list ./main.exe –procs 4 4プロセス並列処理 ノードリストの設定ファイル(host.list) localhost localhost localhost localhost … … ログインノードを 使用する場合 localhost を 16 行分を記入する. hop00 hop01 hop01 hop00 … … TSS 領域をすべて 利用する場合, hop00 または hop01 をプロセス数だけ 並べて記述する. 47 スパコンシステム利用法 バッチ領域でのMPI並列実行 8プロセス×2スレッドによる並列処理(1ノード占有) sample.cmd #!/bin/csh -f #@job_type = parallel #@class = a #@network.MPI = sn_all,,US,,instances=2 #@node = 1 #@tasks_per_node = 8 #@resources = ConsumableCpus(2) #@node_usage = not_shared #@output = $(jobid).out #@error = $(jobid).err プロセスのスレッド数(CPU数)は初期値が #@queue 16です。プロセスがそれ以下のスレッド数 の場合、下記の行を追加します。 #@resources = ConsumableCpus(2) ただし、スレッド数が2の場合 setenv LANG C setenv LC_MESSAGES C setenv MP_PROCS 8 setenv XLSMPOPTS "spins=0:yields=0:parthds=2" setenv LDR_CNTRL LARGE_PAGE_DATA=M poe ./main.exe -procs 8 48 スパコンシステム利用法 実行時環境変数 環境変数 機 能 OMP_NUM_THREADS=N OpenMPで記述されたプログラムの実行時スレッド数 OMP_SCHEDULE=‘GUIDED,34’ OpenMPのSCHEDULEで指定したRUNTIMEスケジューリング LANG=C 言語を英語に設定. コマンドpoeを使用するときは必須 LC_MESSAGES=C メッセージを英語表示に設定 コマンドpoeを使用するときは必須 MP_PROCS=N MPI並列実行時のプロセス数 MP_SHARED_MEMORY=yes ノード内MPIでメモリ共有 注 ラージページの設定はノードあたり100GBになっています! 49 スパコンシステム利用法 初 版 第2版 第3版 第4版 第5版 第6版 平成 17 年 12 月 27 日 平成 18 年 1 月 5 日 平成 18 年 1 月 12 日 平成 18 年 1 月 26 日 平成 21 年 11 月 16 日 平成 22 年 6 月 8 日 50