...

並列化の基礎知識

by user

on
Category: Documents
5

views

Report

Comments

Transcript

並列化の基礎知識
並列化の基礎(言葉の意味)
並列実行には、複数のタスク実行主体が必要
• 共有メモリ型システム(SMP)での並列
• プロセスを使用した並列化
• スレッドとは?スレッドを使用した並列化
• 分散メモリ型システムでの並列
• メッセージパッシングによる並列化
並列アーキテクチャ関連の言葉を押さえよう
21
SofTek Systems, Inc.
プロセスを使用した並列処理
並列処理を行うためには複数のプロセスの生成必要
プロセスとは、プログラム実行のための能動実態
メモリ空間
親プロセス
子プロセス
しかし、プロセスレベルの
Process
Process
Table
Table
並列処理はオーバヘッド多し
Program
Text
共有
Data
Area
コピー
Data
Area
Stack
Area
コピー
Stack
Area
スレッドの活用
アドレス空間のコピー
は時間がかかる
Process FORK
22
SofTek Systems, Inc.
スレッドの生成と並列処理
軽量プロセス = 生成時のコストが小さい
(オーバヘッド)
メモリ空間
マスタ
Process
Table
スレッド
Program
Text
共有
Data
Area
共有
Stack
Area
Stack
Area
プロセス
Thread生成
複数のスレッドを生成し
並列処理を行う
Stack areaは、並列時
独自に使用
Dynamicなallocation
システムコール
23
SofTek Systems, Inc.
スレッドとは
プロセスから実行主体(スレッド)を抽出し
テキスト、データ等は共有する
プロセス=(メモリ空間+資源情報)+ プログラム実行主体
人間 = 肉体(物理的な体) + 意志(思考形態)
ピアノ
左手 スレッド1
人
右手 スレッド2
24
SofTek Systems, Inc.
スレッドの実行形態と並列実行
Applications
Single process
並列実行ライブラリ
スレッド対応
Multi thread
物理CPU数以上の
スレッドの存在OK
Operating System
渡り歩く
P
P
P
P
P
P
P
P
Hardware (SMP)
P Processor
P
Process
25
Thread
SofTek Systems, Inc.
メッセージパッシングとは
同じ並列プログラム
Applications
データの送受、
同期処理は
プログラム明示
Single process
メッセージの交換
独立の
ハードウェア
OS
OS
OS
P
P
P
P
P
P
Hardware
Hardware
Hardware
MPI
通信路
P Processor
P
Process
26
SofTek Systems, Inc.
スレッド並列+MPI (Hybrid)
同じ並列プログラム
Applications
MPI
実装
Single process
Multi thread
メッセージの交換
OS
SMP
Cluster
P
P
P
P
Hardware
OS
P
P
P
P
Hardware
OS
P
P
スレッド並列
message Passing
P
P
Hardware
通信路
P Processor
P
Process
27
Thread
SofTek Systems, Inc.
並列化についての話
• 並列プログラムはどのように動くのか?
• 並列プログラミングのモデル (SPMD)
• どのように並列化するのか?
• 並列化のための言語と性能
• OpenMP、HPF、MPI
• 並列の効果、Scalabilityの考え方
• どんなものが並列化可能なのか?
• 並列プログラミング環境
28
SofTek Systems, Inc.
並列動作の形態
単体処理型
P
P
Memory
Process
逐次処理
並列可能
逐次処理
共有メモリ型
P
P
P
P
P
P
分散メモリ型
P
P
Memory
P
P
P
P
Memory
Process
Process
Process
Process 時間
Thread 生成
同期処理
スレッド
P Processor
P
29
同期
冗長実行処理
Message Passing
割当てたデータ部のみ処理
必要であればデータ交換
SofTek Systems, Inc.
並列プログラミングモデル
SPMD =Single Program Multi Data
同一プログラムモジュール
Load
プログラムの
条件文で扱う
データを制御
Load
Load
if Node0
if Node1
if Node2
I=1,2
の計算
I=3,4
の計算
I=5,6
の計算
node0
node1
node2
共有メモリ型&分散メモリ型
30
SofTek Systems, Inc.
SPMDによる並列モジュール構築
スレッド並列でもメッセージパッシングでも基本はSPMD
• 共有メモリ型システム
• スレッドを使用した並列化モジュール
• コンパイラシステムが自動的にSPMD型 並列モジュールを作成可能
• 分散メモリ型システム
• MPI (Message Passing Interface)ライブラリ
を用いたSPMD型プログラミング必要
31
SofTek Systems, Inc.
どのように並列化するの?
• DO Loopレベルを分割並列(細粒度並列性)
• コンパイラによる自動並列 on SMP
– Directive/Pragmaによる並列指示
– OpenMP directiveによる並列指示
• HPF (High Performance Fortran)による並列化
• コンパイラによる自動並列可能
• 細かな並列指示=directive用意
• MPI (API)を用いた並列化
• 全て、人がプログラミング(同期処理等も自
分で考える)
32
SofTek Systems, Inc.
プログラム言語とその対応システム
分散メモリ型システム
MPI
粗粒度並列性
細粒度並列性
(DO Loopレベル)
HPF
(要並列計算量)
(計算領域分割)
OpenMP
共有メモリ型システム
33
SofTek Systems, Inc.
OpenMP = SMP Parallel Fortran/C/C++
1) 自動並列
2) directiveを使って細かな並列
Fork/Join Model
F90
F77
C
F95
C++
omp_get_num_threads()
omp_get_num_threads()
omp_set_num_threads()
omp_set_num_threads()
omp_get_thread_num()
omp_get_thread_num()
omp_in_parallel()
omp_in_parallel()
omp_set_dynamic()
omp_set_dynamic()
!OMP$
!OMP$ PARALLEL
PARALLEL [clauses]
[clauses]
<< redundant
redundant work
work >>
!OMP$
!OMP$ DO
DO [clauses]
[clauses]
DO
I
DO I == 1,
1, NN
<< parallel
parallel work
work >>
!$OMP
!$OMP ATOMIC
ATOMIC
X(IDX)
X(IDX) == X(IDX)+1
X(IDX)+1
ENDDO
ENDDO
!$OMP
END
!$OMP END DO
DO
<< redundant
redundant work
work >>
!$OMP
!$OMP END
END PARALLEL
PARALLEL
Parallel Regions/Constructs
Query Functions
34
SofTek Systems, Inc.
自動並列処理による性能向上
-2CPU on SMP Pentium Pro : 2CPUs
Memory access
軽い
アプリケーションの
計算特性に依存する
・メモリアクセス量
・多重演算の度合い
出展: Kuck & Associates, Inc.
http://www.KAI.com/のページより
35
SofTek Systems, Inc.
自動並列処理による性能向上
- 4CPU on SMP Pentium Pro : 4CPUs
分割処理量の均衡
・Load balancing
バランス崩れると
性能飽和
出展: Kuck & Associates, Inc.
http://www.KAI.com/のページより
36
SofTek Systems, Inc.
LS-DYNA under OpenMP
Speedup
2
5458 Elements
25000 Degrees of Freedom
1 CPU Time = 4446 Seconds
2 CPU Time = 2393 Seconds
Dual 450Mhz PII Xeon
1.5
1
0.5
0
1
2
Processors
• LSDYNA = Over 750,000 lines of Fortran and C source code
• 1.86X Speedup on 2 processors
• Parallelized using PGI Fortran and OpenMP
37
SofTek Systems, Inc.
HPF = Standard Parallel Fortran
配列の陽的並列分割
1) 自動並列
2) directiveを使って細かな並列
配列分割
処理分割
!HPF$
!HPF$ INDEPENDENT
INDEPENDENT
DO
DO II == 1,
1, NN
A(IDX(I))
A(IDX(I)) == B(I)
B(I)
ENDDO
ENDDO
Parallel Constructs
Data Distribution
HPF
共有メモリ型
両方対応
分散メモリ型
自動生成
SMP
38
MPI RPM
各種通信系
SofTek Systems, Inc.
MPI = Message Passing Fortran/C/C++
自分のノード番号に
従った部分の計算を
行う
F90
SPMD Model
F77
C
F95
C++
mpi_send()
mpi_send()
mpi_recv()
mpi_recv()
mpi_allgather()
mpi_allgather()
mpi_barrier()
mpi_barrier()
Point-to-point and collective
communications
call
call MPI_INIT(ierr)
MPI_INIT(ierr)
call
call MPI_COMM_RANK(…)
MPI_COMM_RANK(…)
call
call MPI_COMM_SIZE(…)
MPI_COMM_SIZE(…)
if
(myid
if (myid .eq.
.eq. 0)
0) then
then
<get
input>
<get input>
endif
endif
call
call MPI_BCAST(…)
MPI_BCAST(…)
...
...
do
do II == myid+1,
myid+1, n,
n, numprocs
numprocs
xx == hh ** (dble(I)
(dble(I) -0.5d0)
-0.5d0)
sum
=
sum
+f(x)
sum = sum +f(x)
enddo
enddo
mypi
mypi == hh ** sum
sum
call
call MPI_REDUCE(…)
MPI_REDUCE(…)
……
Explicit messaging
39
SofTek Systems, Inc.
MPI-粗粒度計算の例
領域分割法
解析領域
CPU 2
CPU 1
逐次処理
CPU 0
CPU 1
CPU 3
CPU 0
CPU 2
データの交換
CPU 3
各CPUに割り当てる
計算領域を分割
領域境界での
データの交換必要
並列処理
40
SofTek Systems, Inc.
並列の効果(どの位?)
並列化不可
並列化可能
20
80
単体実行(1CPU)
並列ジョブ
並列 1CPU
並列 2CPU
20
20
2
20
20
2
並列化率
並列による性能向上分
並列 3CPU
並列 4CPU
0
20
20
2
並列オーバヘッドもあるよ
20
20
2
高々100/40=2.5倍
20
ロードバランス良好の時
40
41
(分)
60
80
100
SofTek Systems, Inc.
並列の効果 (Scalability)
アムダールの法則=並列化率P%の時の効果は
= 100 / (100-P) : 理想値
並列化効率
並列化率
60.0%
70.0%
80.0%
85.0%
90.0%
91.0%
92.0%
93.0%
94.0%
95.0%
96.0%
97.0%
98.0%
99.0%
99.5%
2
1.43
1.54
1.67
1.74
1.82
1.83
1.85
1.87
1.89
1.90
1.92
1.94
1.96
1.98
1.99
Number of CPU
4
6
8
1.82
2.00
2.11
2.11
2.40
2.58
2.50
3.00
3.33
2.76
3.43
3.90
3.08
4.00
4.71
3.15
4.14
4.91
3.23
4.29
5.13
3.31
4.44
5.37
3.39
4.62
5.63
3.48
4.80
5.93
3.57
5.00
6.25
3.67
5.22
6.61
3.77
5.45
7.02
3.88
5.71
7.48
3.94
5.85
7.73
42
12
2.22
2.79
3.75
4.53
5.71
6.03
6.38
6.78
7.23
7.74
8.33
9.02
9.84
10.81
11.37
16
2.29
2.91
4.00
4.92
6.40
6.81
7.27
7.80
8.42
9.14
10.00
11.03
12.31
13.91
14.88
SofTek Systems, Inc.
並列手法による並列効果の違い
並列手法(共有メモリ/分散メモリ)による
並列効果の違い
並列効果(Scalability)
25
MOM-3,PIPE
Seismicベース
Coarse Grained Parallel
20
MPI
( 分散メモリ対応)
15
Fine Grained Parallel
( 共有メモリ対応)
10
現POMベース
SMP
5
現MOM/Seismicベース
0
0
4
8
12
16
20
24
28
32
並列CPU数
43
SofTek Systems, Inc.
どんなものが並列化可能か(1)
• 細粒度並列(SMP:自動並列化含む)
• 基本的にDO Loopが対象
• 多重DO Loopも対象
• ループ反復間に変数の依存関係がない
• I/O処理、配列の動的割付等を行っていない
• ループの反復中にループを抜け出さない
• 依存関係のあるサブルーチンコールを含んで
いないこと
• 間接メモリ参照がない、曖昧なポインタがない
44
SofTek Systems, Inc.
どんなものが並列化可能か(2)
• 並列効果の高いアプリケーションソルバー
• 差分法 : レッド・ブラックSOR法、パイプライン法
: ICCG法はパイプライン法へ
• モンテカルロ法、分子動力学等の粒子を扱うもの
• ニューロンの計算: 行列・ベクトル計算が主体
• 境界要素法: 密行列の連立一次方程式に帰着
• 並列効果が低いソルバー
• 有限要素法(陰解法):粗行列、計算量少ない
: 領域分割法へ変換
45
SofTek Systems, Inc.
並列最適化における注意点
• 並列化を行う前に単体性能の向上重要
• 並列化率が高くなければ、並列化効果、
scalabilityは期待できない。
• 単体性能の最適化では、それだけで数倍の
性能向上も期待できる
• アプリケーションの特性で並列化手法が変
わる。適切な手法をまず考える。
46
SofTek Systems, Inc.
並列プログラム開発環境での問題
• 見たいものが見えない
• 並列デバッグ時の問題箇所の特定が難しい
• MPI開発では、演算・通信の状況が見えない
並列プログラミング環境必須
業界標準のデバッガ&ツール
マルチプロセスデバッガ
: TotalView
MPI プログラムの性能解析
Sun
Prism
: VAMPIR
47
SofTek Systems, Inc.
並列デバッガ TotalView
• 業界標準並列デバッガ
• 操作性に優れたGUIにより効率よく使用できる
• マウスのボタン操作で主要なコマンドを実行可能
• 多様な分散、並列プログラミングモデルをサポート
• 巨大で、複雑なプログラムもデバッグ可能
• 様々な言語、プラットフォーム、アーキテクチャで利用
可能 (MPIのデバッキング可能)
48
SofTek Systems, Inc.
TotalView の実行状況
Root
ウィンドウ
Data ウィンドウ
右クリック
Process
ウィンドウ
ダイブによりプロセスの
内部を表示可能
49
SofTek Systems, Inc.
TotalView データの可視化
• 分散配列の可視化
Visualize array distribution
50
SofTek Systems, Inc.
VAMPIRの特徴
• MPI (及びアプリケーションイベント)のオフライ
ントレース解析
• VAMPIRtrace ツールによるトレース生成
•
•
•
•
•
扱いやすいユーザインタフェース
スケーラブル(時間とプロセッサ空間)
秀逸なズーミング、フィルタリング機能
高性能グラフィックス
MPIとアプリケーションイベントの表示、解析:
• MPI ルーチン
• 1対1 、集団通信
51
SofTek Systems, Inc.
VAMPIR GUI (1)
MPIの動作挙動が見える
52
SofTek Systems, Inc.
VAMPIR GUI (2)
MPICH(p4)による通信状況のスナップショット
53
SofTek Systems, Inc.
VAMPIR GUI (3)
通信のサマリチャート(二つの結果の同定例)
MPICH
MPI/GAMMA
54
SofTek Systems, Inc.
Fly UP