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