目次
プログラミングモデル
ＶＩＳＩＭＰＡＣＴ（性能とプログラミングの容易性）
ＶＩＳＩＭＰＡＣＴプログラミングの指針

3.4. プログラミング指針
ーフラットＭＰＩとハイブリッド並列についてー

フラットＭＰＩの性能特性
効果例

富士通株式会社

まとめ【補足資料】 高機能スイッチの位置づけと効果

青木 正樹、 鈴木 清文

1

参考資料
【補足資料】 高機能スイッチの位置づけと効果 「効果例」で使用されている高機能スイッチ（高機能SWあるいはISWと記述）についての解説です。

SMPクラスタWG成果報告書「スカラ並列プログラミング チューニング・ガイド」

プログラミングモデル
プログラミングモデル

http://www.ssken.gr.jp/MAINSITE/activity/workinggroup/s
mpc/guide.html
 スカラSMP計算機(富士通PRIMEPOWERシリーズ)

上でプログラムの性能評価作業およびチューニングを行う際のガイドです。『SMPクラスタWG』の成果として作成されました。(2003/12/25発行)
2

2

3

1

プログラミングモデルと並列実行モデル

並列プログラミング環境

プログラミングモデル（プログラマーの観点）
フラットMPIモデルフラットMPIモデル

MPIMPI-OpenMPハイブリッドモデル
OpenMPハイブリッドモデル!$OCL PARALLEL!$OCL PARALLEL!$OCL END PARALLEL!$OCL END PARALLELMPI通信!$OCL PARALLELMPI通信!$OCL END PARALLEL

プログラミングモデル/
プロセス並列手法!$OCL END PARALLEL

ハイブリッ
ドモデル

並列実行モデル（システム運用の観点）
フラット実行モデル

ハイブリッド実行モデル

Interconnect

Interconnect

Node0
P

Node1
PP

P

core core core core

PP

P

Node1

Node0TP

Process
TTTcore core core core

core core core core

ノード間

ノード内

XPFortran

OpenMP,
自動並列（スレッド並列）!$OCL PARALLEL

T

Process
TTTcore core core core

フラットモ
デル

データ並列
メッセージパッシング

MPI

データ並列

XPFortran

メッセージパッシング

MPI スレッド並列（ノード内）＋プロセス並列（ノード間）

 プロセスのみ１階層で並列化
 マルチコアの場合にプロセス数が増え、プロセス間の2階層で並列化
 マルチコアの場合でもプロセス数が少ないため高通信オーバヘッドにより並列化効果が低下

並列時に有利4

5

プログラミングモデル選択のポイント
モデル

メリット

デメリット

ハイブリッド並列 プロセス数増加を抑える

スレッド並列性能に依存（＋SIMD化）（OpenMP化も考慮）

フラットＭＰＩ

１階層のみの考慮でよい（＋SIMD化）

プロセス数増加の弊害(通信オーバーヘッド増大)

ＶＩＳＩＭＰＡＣＴ
ＶＩＳＩＭＰＡＣＴ（性能とプログラミングの容易性）（性能とプログラミングの容易性）

結局のところ、フラットＭＰＩの性能特性 ＶＳ スレッド並列の”プログラミング”×”性能”がプログラミングモデル選択のポイントとなる。

67

ＶＩＳＩＭＰＡＣＴとは(1)

ＶＩＳＩＭＰＡＣＴとは(2)（VISIMPACT：
VIrtual Single processor by Integrated Multi-core Parallel ArChiTecture）
zコンセプトCPU 技術 マルチコアCPU内の高効率なスレッド並列を実現する技術Îソフトウェアバリアと比較して10倍の高速化

 高効率なハイブリッド並列実行モデルの実現を支援

Îコア数に依存せずに一定のオーバヘッドを実現

MPI + スレッド並列処理(自動並列 /OpenMP)
Proc. L2$ Proc.

L2$

Proc. L2$ Proc.
core

core

Mem.

core

Process
Threadcore
core
L2$ Parallelization
betweencorecores corez狙い マルチコアCPUを高速な一つのCPUを扱うことで……..
 MPI プロセス数を 1/ncore に減らす
Î並列処理効率を向上
 メモリアクセスを軽減

(ns)

L2$

core

700
600
500
400
300
200
1000

CPU CHIPCPU CHIPMem.

 コア間のハードバリア機能

H/W Barrier
S/W Barrier

SPARC64TM VII
2
4Barrier Overhead 共有L2キャッシュメモリ (6 MB)Îキャッシュ間のメモリ交換を軽減
Îキャッシュメモリの利用を効率化

zコンパイラ技術

z技術的挑戦 コア間のスレッドレベル並列処理のオーバヘッドをどう減らすか?

 ベクトル化の技術を適用した、高効率なスレッド並列(自動並列、OpenMP) を実現

89

ＶＩＳＩＭＰＡＣＴループ処理の考え方
Vector処理
DO J=1,N
V DO I=1,M
V A(I,J)=A(I,J+1)*B(I,J)
V END
END

VISIMPACTの効果

z 従来の並列処理

z 今回の並列処理(疎粒度並列)(細粒度並列)PPPP
PVector

DO J=1,N
DO I=1,M
A(I,J)=A(I,J)*B(I,J)
END
END

SerialDO J=1,N
P DO I=1,M
P A(I,J)=A(I,J+1)*B(I,J)
P END
END

Parallel 適用範囲は狭い(広範 適用範囲は広い

 同期は頻繁だが低囲な分析が必要)
 同期は少ない 同期は頻繁 キャシュ間のデータの取り合いが頻繁に発生
ＶＩＳＩＭＰＡＣＴ が対処

従来のスレッド並列化の問題
プロセス並列やベクトル化に比べ並列オーバヘッドが大きい。
そのため細粒度並列では並列効果が低くスレッド並列が利用しずらかった。
⇩ ⇩ ⇩ ⇩VISIMPACTにより解決⇩ ⇩ ⇩ ⇩並列処理のオーバヘッド（同期、ﾌｫﾙｽｼｭｱ）削減の結果、コンパイラによる細粒度並列化が可能となった。
逐次実行
並列化可能部分

SerialParallel

Serial 適用範囲は広い

コスト

並列化
困難部分

逐次実行
10

# of cores

Real quad-core CPU for
Technical Computing(2.5 GHz, 40 GFlops/chip)•並列効果が得られないため、並列化できなかった部分

VISIMPACTの従来のスレッド並列化

並列実行
11

スレッド並列化

並列実行

参考：ＪＡＸＡセンターでのハイブリッド並列の利用状況

容易なハイブリッド実行の実現
VISIMPACT
高効率なCPUチップ内(コア間)自動スレッド並列で、複数コアの仮想単一
仮想単一CPU
マルチコアCPU
CPU化を実現ﾌﾟﾛｾｽ
ﾌﾟﾛｾｽL2$
L2$
CPUコア
CPUコア

Mem.

VISIMPACT コンパイル時ログの情報から利用状況を判断 情報採取期間：2009.1～2009.9、コンパイル実施者数：１４５人

プロセス
CPUコア CPUコア
L2$ (コア間スレッド並列)

Mem.

ﾌﾟﾛｾｽ
ﾌﾟﾛｾｽ
L2$
L2$
CPUコア
CPUコア

 情報数に重複あり（１人の利用者が異なるスタイルでｺﾝﾊﾟｲﾙした場合）（１人の利用者が異なるスタイルでｺﾝﾊﾟｲﾙした場合）
 センター既定の設定は、VISIMPACT使用となっている。
センター既定の設定は、VISIMPACT使用となっている。

CPUコア CPUコア

全体

 VISIMPACTによるフラットMPIプログラムのハイブリッド化

MPI

プログラミングモデル
フラットMPIモデル

MPI-OpenMPハイブリッドモデル

MPI通信!$OCL PARALLEL!$OCL PARALLEL!$OCL END PARALLEL!$OCL END PARALLEL!$OCL PARALLELMPI通信!$OCL END PARALLELVISIMPACTVISIMPACTハイブリッドプログラムハイブリッドプログラム
をより高速化
をより高速化

フラット実行モデル

ハイブリッド実行モデル

Interconnect

Interconnect

Node0
P

Node1
PP

P

P

core core core core

XPFortran

VISIMPACTVISIMPACT

フラットMPI
MPIプログラムプログラム
フラットフラットMPIプログラム
を自動的にハイブリッを自動的にハイブリッ
ド実行
ド実行

並列実行モデル!$OCL PARALLEL!$OCL END PARALLEL

P

P

Node1

Node0TP

Process
TTTcore core core core

core core core core

T

ProcessT
T

MPI+OpenMP
７７％がハイブリッド並列を利用
７７％がハイブリッド並列を利用

T

core core core core

12

13

検証：スレッド並列のオーバーヘッド

検証：並列化のオーバヘッド実測と推定

 スレッド並列のオーバーヘッドでFX1は他システムを圧倒
OpenMPディレクティブコスト比較

 大規模SMP(HPC2500),T2Kスパコン(HX600),FX1(SPARC64Ⅶ)で並列化のオーバヘッドの詳細検証用プログラム(n=900)を実測（４スレッド）。

5.00
VISIMPACT(2.52GHz)

4.50

並列オーバーヘッド比較

WoodCrest(3.00GHz) 2並列
WoodCrest(3.00GHz) 4並列

バリア
フォールスシェアリング
粒度計算時間プログラム固有時間

4.5E-06

3.50

HX600(2.3GHz)

4.0E-06

3.00

Harpertown(3.16 GHz)

3.5E-06

2.50

HPC2500(1.3 GHz)

3.0E-06
時間

μsec

4.00

2.00

2.5E-06

t0 = wclock()!$omp parallel private(j,jsw)
Do j = 1, nrep
jsw = jswitch( krit, indj, j )!$omp do
Do i = 1, ny(i,jsw) = y(i,jsw) + c0*x1(i)End Do!$omp end do
End Do!$omp end parallelt1 = wclock() - t0

2.0E-06
1.5E-061.50

1.0E-06

1.00

5.0E-07
0.0E+00

0.50

大規模SMP

T2Kスパコン

FX1

次期スパコン

0.00
PARALLELDO

DO

バリア
14

REDUCTION
15

これからのアプリ開発者は、スレッドへ並列のオーバヘッドを気にする必要なし！

スレッド並列化プログラミングの容易性

高い並列化能力(*)を持つ自動並列化コンパイラ（＋OpenMP指示行）がプログラミングを支援。
 従来自動並列化（疎粒度並列）外側ループで並列化を行ってきた。

 VISIMPACTの自動並列化（細粒度/疎粒度並列）
細粒度でも並列化効果あるた
め内側ループ(*)でも外側ループでも並列化可能。

自動並列化能力
ハードウェアのサポート（ＶＩＳIMPACT）により、ベクトル化より広い範囲に適用！

データ依
存関係

ループの演算内容

ベクトル化

VＩＳＩＭＰＡＣＴスレッド並列(計画)

現行スレッド並列

範囲○（最内ループ）◎（最内ループ＋手続き）△（外側ループ）

データ型○（４/８バイト型）

◎（全て）

◎（全て）

依存なし

○

○

○

順方向依存

○

○

×

逆方向依存

×

○

×

四則演算

○

○

○

リダクション演算

○

○

○

収集・拡散

○

○ （計画）

×ＤＯブランチ○○ （計画）

×○（ﾙｰﾌﾟ長数十）○（ﾙｰﾌﾟ長数十）

×（ﾙｰﾌﾟ長数千）

粒度＊ベクトル化と同様に内側ループを並列化（細粒度）

ＡＮＬベクトル化コンテストプログラム（全１３５ループ）を用いて、各種ループの解析能力を比較→技術的に確立しているベクトル化並みの高い自動並列化率が可能

ベクトル化、並列化可能なループ数ベクトル化

VISIMPACTレッド並列（計画）

現行スレッド並列

86ループ

89ループ以上

67ループ

1617

スレッド並列化支援：スレッド並列化の確認情報
言語開発環境において以下を支援。
実行時情報：スレッド並列化率
ソースコード情報：並列化（Ｐソース）表示

スレッド並列化支援： OpenMP指示行の自動生成機能
翻訳オプションに-Qmを指定することで、コンパイルリストに加え、自動並列化の状況をOpenMP指示行により表現した原始プログラムを生成します。（プラットフォーム無依存コードを開発するための支援機能）
frt -Kparallel -Qm sample.f90

表示例

PPマーク:並列化対象のループ

Pマーク:並列化対象の文

以下に、生成されるソースの例を示します。

(line-no.)(nest)(optimize)
78
9
10
11

1
2
2
2
1p
pp 8p8p8p

sample.omp.f90 （生成されるソースファイル）

do i=2,ndo j=2,na(i,j)=a(i,j)+b(i,j)*c
enddo
enddo

備考：最適化情報として「ＳＩＭＤ化」「ループ交換」「一重化」「prefetch情報」等もあり
18

例：オリジナルソース (sample.f90)

例：生成されるソース （sample.omp.f90）

parameter(imax=124, jmax=124)
real*4 array( imax, jmax)

parameter(imax=124, jmax=124)
real*4 array( imax, jmax)

do 10 j = 1, jmax
do 10 i = 1, imax
array(i,j) = array(i,j) + (i*j)
10 enddo
end!$OMP PARALLEL DO PRIVATE(i) !FRT
do 10 j = 1, jmax
do 10 i = 1, imax
array(i,j) = array(i,j) + (i*j)
10 enddo
end19

スレッド並列化（まとめ）：容易に高性能プログラミングが可能
 プログラミングの容易性
自動ベクトル化 ≒ VISIMPACTの自動並列化
ベクトル化プログラミングは容易：万人が認知。
なぜ、ベクトル化プログラミングは容易なのか？
①細粒度のループを対象②対象ループは、ループ繰り返しによるデータ依存性なし
VISIMPACTの自動並列化の基本ﾌﾟﾛｸﾞﾗﾐﾝｸﾞもﾍﾞｸﾄﾙ化に類似
 演算性能向上への相乗効果
コア内の演算器を効率良く使うためには、ＩＬＰ(*)を最大限に高める必要がある。
ＩＬＰ：命令レベルの並列性(Instruction-level parallelism）
利用者は、細粒度の並列性を意識すること（上記②）によりスカラＣＰＵの演算性能を最大限引き出すことが可能→ループ繰り返しによるデータ依存なくなりループ中の命令スケジューリングやＳＩＭＤ化が促進

ＶＩＳＩＭＰＡＣＴプログラミングの指針
ＶＩＳＩＭＰＡＣＴプログラミングの指針（自動並列化プログラミング）（自動並列化プログラミング）

20

自動並列化プログラミングのポイント
 並列化率の向上
 大きな並列化粒度
 メモリアクセス競合の削減
 ＣＰＵ負荷の分散

逐次処理

並列化率の向上アムダールの法則

n=8(理想的な8並列処理)の場合

プログラム全体の性能向上率

981(1 − p ) + pn7性 能 向 上 率 (%)=65432並列化
不可

並列化可能部分100×(1/n)
並列処理21

 p: 並列化率(並列化可能部分の割合)

オーバーヘッド n: 並列化された部分の速度向上率⇒並列化率の向上が重要！
22

23

20

4060

並列化率(%)

80

100120並列化の粒度を大きく

メモリアクセス競合の削減
ループ回転数による性能推移

スカラ計算機
ベクトル機

８並列時
7000

DO I=1,N

6000

A(I)=EXP(B(I))
5000

評価ループソース
EXP関数を25演算と仮定

MFLOPS

ENDDO

メモリアクセス（キャッシュ）競合の発生例と改善策
real(8)a(256,256),b(256,256),c(256,256),d(256,256),e(256,256),f(256,256)

real(8)a(257,256),b(257,256),c(257,256),d(257,256),e(257,256),f(257,256)

do j=1,256
do i=1,256a(i,j)=b(i,j)+c(i,j)*d(i,j)+e(i,j)*f(i,j)
enddo
enddo

do j=1,256
do i=1,256a(i,j)=b(i,j)+c(i,j)*d(i,j)+e(i,j)*f(i,j)
enddo
enddo

4000
3000
2000
1000
0256 512 1024 2048 4096 8192 16384
一般に、ループ長（粒度）がループ回転数小さいと並列化オーバヘッドの影響大⇒粒度を大きく（外側で並列化）⇒ただし、VISIMPACTでは影響小24

キャッシュ機構の特性から2のべき乗のデータサイズを持つ大きなデータ間でキャッシュの競合が発生しやすい。

改善策：
配列の１次元目の大きさ変更（＋１）（または、 -Karraypad系オプション指定）
25

ＣＰＵ負荷の分散
ＣＰＵ負荷の分散
特定のＣＰＵの負荷（実行時間）が大きいと、全体の実行時間がそのＣＰＵの実行時間にひきづられる。

⇒各ＣＰＵの負荷（分担）は均等になるのが望ましい【三角ループ】不均等例１【IF文を含むループ】不均等例２DO J=1,M ←均等分割で並列化

DO J=1,M ←並列化

DO I=1,J ★Jの値より処理量が変化

DO I=1,N

A(I,J)=…

IF (L(I,J)) THEN ★L(I,J)の値により
ｊ

ENDDO
ENDDO

…

フラットＭＰＩの性能特性
フラットＭＰＩの性能特性（プロセス数増加時の課題）（プロセス数増加時の課題）

処理量が変化

ENDIF

ｉ

ENDDO
ENDDO
2627

フラットＭＰＩの性能特性

OSジッターについて

フラットＭＰＩで実行した場合のプロセス数増加における性能面への課題は以下。
通信のオーバヘッド（時間）増加

 ノード毎にバラバラに発生するOSノイズ(システム処理)が、ノード間の同期処理によって、アプリ全体として累積し、実行性能を低下させる現象
 理想
•同期

アプリケーションが利用できるメモリ量減少
ＯＳジッタの影響

•同期

•同期

RANK#0

アプリ

アプリ

アプリ

RANK#1

アプリ

アプリ

アプリ

 現実
性能低下

RANK#0アプリ

ノイズ

RANK#1アプリ

待ち＋ 最内ループに対しては、やはりＳＩＭＤ化のプログラミングが必要。

待ち ノイズアプリ

アプリ ノイズ アプリ•同期•同期アプリアプリ

待ち•同期➔ハイブリッド並列化によってプロセス並列数を減少させることで、OSジッターの影響を低減させることが可能
28

29

姫野BMT：ＦＸ１での性能検証
 ＭＰＩ多次元分割、通信はMPI_allreduce使用、最内ループを自動並列。
通信時間と演算時間（ＣＰＵ時間）の推移を確認。
姫野BMT IMPACT，ISWの効果と通信時間の推移 (grid=M)
5.0E+06
通信時間(cycle)
4.5E+06

効果例
効果例

4.0E+06

CYCLE

3.5E+06

通常SW+
フラットＭＰＩ

高機能SW+フラットＭＰＩ

3.0E+06
2.5E+06

演算時間(cycle)

高機能SW+
ハイブリッド並列

2.0E+06
1.5E+06
1.0E+06
5.0E+05+ISIMWPACT25+6ISIMW
PACT51+2ISIMWPAC
10T
24+ISIMW
PACT+ISW

128+

1024+

51
2ISWISW

ISW+

25
6

102412851
225
6128

0.0E+00

3031

ＬＩＮＰＡＣＫのDGEMM：共有キャッシュを利用
行列積AB→Cの計算では、行列をブロックに分けて計算
 行列AのブロックをL2 cacheに乗せる。ブロックが大きいほうが高効率➔フラットＭＰＩではL2 cacheサイズがブロックが実質 1/コア数 となる→効率Down➔スレッド並列では、ブロックを共有してL2 cache 全体を活用→効率Up

効果

まとめ
まとめ

 DGEMMで～２%の性能向上を推定
全てのコアで同じ作業域を参照

Ａのブロックコピー•A•core •core•core•…
•0•1•7•core •core•core•0•1 •… •7•→•×•B•L2 cache

•C

32

33

プログラミングモデル まとめ
富士通は、ハイブリッド並列プログラミングを推奨。
➔ハードウェア/ソフトウェアの両面で利用者を支援
狙い：ＭＰＩでのみ記述されたフラットＭＰＩ実行アプリを自動でハイブリッド並列化へ（自動化できない部分のみOpenMPディレクティブで記述）【補足資料】
高機能スイッチの位置づけと効果

フラットＭＰＩについても否定するものではない。
ただし、通信オーバーヘッドに注意する必要あり。

34

2009.5.23（2010.1.12改版）
富士通株式会社 清水 俊幸

35

高機能スイッチの位置づけと効果

コレクティブ通信高速化方法比較

 高並列アプリケーションの実行性能を高めるために，高機能スイッチを開発した
 高機能スイッチの概要については，2008年2月18日にＰＳＩシンポ

ジュームのプロトタイプの発表を参照

http://www.psi-project.jp/images/event/toshiyuki_shimizu_20080218.pdf

 高機能スイッチの位置づけと効果について考察した

Host上のソフト
O(log(N))

O(log(N))O(1)

OS処理による通信処理中断の影響

あり

なし

なし

課題

レイテンシ削減 レイテンシ削減
上記影響軽減ハードコスト低減
マルチユーザ対応

備考

ハード追加なし ハード追加なし
Myrinetなどでの実装例

専用ハード
BlueGeneで実現（2パス） 演算誤差について高機能スイッチが採用した1パス演算方式は最も誤差が小さいことを確認した
 実行速度のバラツキについて，ソフトによる1対1通信による実現の測定結果より，メッセージハンドリングを多数伴うソフトインプリは実行速度バラツキが大きいことを確認した

 今後の取り組み
 大規模アプリケーションでの効果の確認などを行う

PSI 2-1では、新アルゴリズム考案により、原理的に従来方式の2倍高速化を実現
高機能スイッチ実現に必要なハード量は少なく、将来の超並列システムへの埋め込みが容易

36372Mノードまでサポートするデータフォーマット
↓グループ間の距離
52+80+21 = 153 < 154↑2Mノードでもオーバフローしない
80 x 2 = 160 > 154↑2グループ分の桁上がりを防ぐ
E’= floor((E –1023)/ 80)
1bit

5bit

SE’

IEEE double floating point format
F(52 bit)ES

演算方式による誤差（有効ビット数）
データ数

2K

IEEE倍精度

5050

4949 54-log(logN)

2パス方式

43

4037

34 54-log(N-1)

1パス方式

54545454 Min(81-log(N-1),54)

16K 128K

z有効ビット数は、1パス方式＞IEEE倍精度＞2パス方式となる

1F

102 bit

0・・・・・・・・・・・052 bitF’

z2パス方式では、2k/16k/128k/1Mデータについてそれぞれ64/67/70/73ビットの計算を実施すると想定
z1パス方式では、154ビットの計算を実施すると想定（2Mノードまで適用可能）

Radix point- S: 符号- E’: 変換後の指数部（グループを表現）- F’: 変換後の仮数部（固定小数点として計算可能）
38

1M 式

((E - 1023)%80)ビット分左シフト

160bit154bit0・・・・・・・・・・・・・・・・・0

高機能スイッチ中継回数

 実装方式と将来性について分析し，ハード量は少なく、将来の超並列システムへの埋め込みが容易であることを確認した

NIC上のマイクロ39

ソフトリダクションのバラツキ

参考：オーバーヘッドのオーダー(BG/L）

us

ソフトによる一対一通信を用いたリダクション演算は，試行毎に実行時間がバラつく（性能比較には最大値なども考慮する事が重要）

事象
キャッシュミスTLB ミス
IO 割り込み
PTE ミス
タイマー割り込み
ページフォールト
スワップイン
プリエンプション

816

17
40

ノード

時間のオーダー
100ns
100ns
1us
1us
1us
10us
10ms
10ms

備考

ネットワーク含む“minor fault”“major fault”
DISK IO有り
プロセス切り替え出典：“Exploring Petascale Linux Operating Systems - ZeptoOS”
http://www.cs.unm.edu/~fastos/06meeting/ZeptoOS-PImtg-BostonUsenix-2006.pdf
ZeptoOS は、Argonne National Lab. が開発中の BG/L ハード上で動作する軽量Linux

41