...

スパコン利用法 - 北海道大学情報基盤センター

by user

on
Category: Documents
19

views

Report

Comments

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
Fly UP