スーパーコンピュータとアプリケーションの性能
2016年4月
国立研究開発法人理化学研究所
計算科学研究機構�運用技術部門
ソフトウェア技術チーム�チームヘッド
南�一生
minami_kaz@riken.jp
RIKEN ADVANCED INSTITUTE FOR COMPUTATIONAL SCIENCE

講義の概要• スーパーコンピュータとアプリケーションの性能• アプリケーションの性能最適化1(高並列性能最適化)• アプリケーションの性能最適化2(高並列性能最適化)• アプリケーションの性能最適化の実例1• アプリケーションの性能最適化の実例2

2

内容• スーパーコンピュータとは？
• アプリケーションの性能とは？
• 高並列化のための重要点• 単体性能向上のための重要点

3

スーパーコンピュータとは？

4スーパーコンピュータとは・・・
スーパーコンピュータ=卓越した計算能力
その時代の一般的なコンピュータよりも、極めて高速(浮動小数点演算性能で1000倍以上)な計算機

演算性能 50 TFlops 以上(*)
・・・現在の政府調達における「スーパーコンピュータ」の定義(*):1秒間に50兆回以上の浮動小数点演算が可能

5

スーパーコンピュータの発展
1923年

タイガー手回し計算機
1946年 ENIAC
世界初のコンピュータ
1976年 CRAY-1
世界初のスーパーコンピュータ

2011年 iPhone4S
LINPACK 140Mflops

2015年 iPhone6S
LINPACK 870Mflops≒>

2011年 「京」コンピュータ

2002年

40倍

25万倍

当時のパソコン
PentiumIV

6.4Gflops

2002年 地球シミュレータ
当時世界最速のスーパーコンピュータ

160Mflops
6250万倍40Tflops

10Pflop6

コンピュータとは？
一台のコンピュータ

ハードウェア■ CPU■ メモリ■ IO（入出力）

CPU

IOから受け取った(入力)データとプ

メモリ

ログラムをメモリに置き、CPUでプログラムに従ってデータの処理を行なって、メモリに書き戻し、それをIOに出す、書出す(出力)7IO(ハードディスクやディスプレーなど)

コンピュータとは？
ハードウェア

ソフトウェア(進化とともに分化)■ アプリケーション
■ CPU
■ メモリ
■ ミドルウェア■ IO（入出力）■ OS

一台のコンピュータ

CPU

IOから受け取った(入力)データとプ

メモリ

CPUの性能向上
ログラムをメモリに置き、≒コンピュータの性能向上
CPUでプログラムに従ってデータのであった時代処理を行なって、メモリに書き戻し、それをIOに出す、書出す(出力)8IO(ハードディスクやディスプレーなど)

昔のスーパーコンピュータ
昔は、ベクトル機構などによって、１台のコンピュータを高速化■ CPU(SU)＋VU

VU
ベクトル

CPU

■ メモリ

一つのOSで制御される一つのコンピュータ■ IO(入出力)

メモリ

ベクトル機構IO
9データのかたまりを一まとめで処理する(ＳＵとメモリを共有)昔のスーパーコンピュータ
昔は、ベクトル機構などによって、１台のコンピュータを高速化■ CPU(SU)＋VU

VU
ベクトルCPU■ メモリ■ IO(入出力)

一つのOSで制御される一つのコンピュータ

ここが大変

メモリ

ベクトル機構

IO

データのかたまりをメモリからデータを一まとめで処理する
まとめて持ってくるのは(ＳＵとメモリを共有)
とても大変

今もこの方式が無くなったわけではありませんが...
10シングルプロセッサの問題
動作周波数が低い場合(昔)メモリウォール問題
演算器
メモリ■ メモリは一定時間を経過しないと同インタリーブ

じメモリバンクにアクセスできない■ 昔は20サイクルくらい待っていたメモリ■ しかし動作周波数が低かったため演算器も遅く演算速度とメモり転送性能は釣り合っていた
メモリバンク(例は4バンク)11シングルプロセッサの問題
動作周波数が高い場合(現在)メモリウォール問題
演算器■ メモリは動作周波数が高くなってくるともっと待つ事となる(100200サイクル)

メモリ
インタリーブ■ メモリに比べて演算器は動作周波数が高くなると高速になった

メモリ■ さらに半導体プロセスの微細化により演算器はCPUにたくさん搭載可能となった■ 結果的に演算器に比べメモリのデータ転送能力が低くなった

メモリバンク(例は4バンク)

12シングルプロセッサの問題
動作周波数が高い場合

対策１
演算器

■ メモリバンクを増やし演算器に供給するデータ量を増大させた
メモリ■ しかしこの方式は機構が複雑にインタリーブなり電力が増大する

メモリ■ またコスト・価格も高くなる■ベクトル機では数百のバンクを搭載した■ ちなみに昔のベクトル機はこの方式により１要素(8バイト)単位のメモリアクセスで高いメモリアクセス性能を実現した■ しかしここで述べたようにコスト・価格・電力面では高価である

13

メモリバンク(例は7バンク)シングルプロセッサの問題
動作周波数が高い場合

対策２演算器■ メモリのバンクは増やさない■ データ供給能力の高いキャッシュをメモリと演算器間に設ける

1次キャッシュ■ データをなるべくキャッシュに置きデータを再利用する事でメモリのデータ供給能力の不足を補う■ こうすることで演算器の能力を使

2次キャッシュメモリ
インタリーブい切る■ 多くのスカラー機はこの方式を取っている■ キャッシュライン(数十から数百バイト)単位のメモリアクセスである
14

メモリ

シングルプロセッサの問題
一台のコンピュータの処理限界■ 動作周波数を上げる事で電力が吹き上がる■ 動作周波数の限界を迎えている■ メモリウォール問題もあり一台のコンピュータの演算能力を上げてもメモリの能力が追いつかない

そこで！

15

最近のスーパーコンピュータ

■ CPU
■ メモリ

CPU

■ IO(入出力)

メモリ

IO

各々のコンピュータが各々のOSで制御される

最近のスーパーコンピュータ
たくさんのコンピュータをつないで、システムとして一体で動かす■ CPU■ メモリ

CPU■ IO(入出力)■ インターコネクト(接続機構)

各々のコンピュータが各々のOSで制御される

メモリ
インターコネクト■ GPU/アクセラレータ(加速器：あったり、なかったり)
メモリは専用(大変だから)各々のコンピュータ＝「ノード」

IO

GPU

コンピュータ(ノード)どうしをつなぐ
ノード
CPU

メモリ
インターコネクト

IO
18

コンピュータ(ノード)どうしをつなぐ
ノード
CPU

ノード
CPU

ソフトウェア同士が連携して一体として動く

メモリ

メモリ
インターコネクト

IO

IO
19

コンピュータ(ノード)どうしをつなぐ
ノード

ノード

ノード

ノード

CPU

CPU

CPU

CPU

メモリ

メモリ

メモリ

メモリ

IO

インターコネクト

インターコネクト

インターコネクト

IO

IO

IO

システムとして一体で動く（一つの仕事をやる、たくさんの仕事は互いに連携して分担しあって片づける）

20

もっともっと、たくさんのコンピュータ(ノード)どうしをつなぐ
どれだけたくさんつなげるか？⇒システムとして高性能
一つのシステムとして動く

実際はハードディスクは、まとめる
21

ちなみに「京」の場合は？
50m×60mの部屋に

22ちなみに「京」の場合は？
50m×60mの部屋に1ラック96プロセッサ23ちなみに「京」の場合は？
50m×60mの部屋に1ラック
96プロセッサ



864ラック
82944プロセッサ
66万コア

24




これだけ巨大システムでCPUが頻繁に故障すると・・・
ü 仮にひとつのCPUが、１年に１回故障したとします

１年ü システム全体で見ると、 約6分に1回の故障・・・

約6分

CPUの故障率を抑えることは極めて重要
25スーパーコンピュータについてまとめると1940年代半ばのENIACの登場
最初はシングルプロセッサの時代
ベクトル/CISC/RISC/スーパースカラ等色々なアーキテクチャが登場
その時代は演算器を増やすことにより高速処理を実現．
メモリウォール問題及び電力，動作周波数を上げられない問題によりシングルプロセッサの限界となった．
それらによりスーパーコンピュータが並列プロセッサアーキテクチャへと変化
スーパーコンピュータは一つのノードの構成としては普通のコンピュータと基本的には変わらないが・・
トータルとしての計算能力・演算性能がきわめて高い
そのためには高速なインターコネクトが要求される
またシステムトータルとしての高い省電力性能・高信頼性が高いレベルで要求される
26

アプリケーションの性能とは？

27

スパコンはシミュレーションに使う科学について
第３の科学

理論

従来の科学は実験

コンピュータ実験(シミュレーション)

28具体的なアプリケーション

次世代のデバイス全体のシミュレーションによるエレクト
ロニクスへの貢献

難しい大気現象の解明、また正確な台風の進路・強度の予測による気象への貢献

1021m

107m
102m

水中のウィルスの丸ごとシミュレーションによる医療への貢献

100m

10-8m
10-10m

セルロース分解
酵素のシミュレー
ションによる安価なバイオ燃料の提供等エネルギーへの貢献

29

短周期地震波動の地震波シミュレーション、構造物の耐震シミュレーションを組み合わせた防災への貢献

現代のスパコン利用の難しさ

現代のスーパーコンピュータシステム
現代のプロセッサ
演算器

1次キャッシュ

2次キャッシュメモリ30

現代のスパコン利用の難しさ
アプリケーションの超並列性を引き出す
プロセッサの単体性能を引き出す

SystemRack

System Board

31

計算科学
問題設定
理論構築

計算機科学
理論に忠実な分かりやすいコーディング

昔のプログラミング

定式化
離散化

プログラム

プログラム作成
コンパイル
デバッグ
プロダクションRUN

言語

グラスィックス処理

コンパイラ

結果の解釈

開発・実行環境

論文作成

ハードウェア

評価

システム運用
32

24

計算科学

計算機科学
大昔の計算機

問題設定
理論構築

理論に忠実な分かりやすいコーディング

演算器
演算1

昔のプログラミング

定式化
離散化

プログラム

演算3

演算2演算器に逐次に入力し逐次実行

プログラム作成
コンパイル
デバッグ
プロダクションRUN

言語

グラスィックス処理

コンパイラ

結果の解釈

開発・実行環境

論文作成

ハードウェア

評価

システム運用
33

24

計算科学

計算機科学
大昔の計算機
性能向上

問題設定
理論構築

理論に忠実な分かりやすいコーディング

定式化
離散化

(2)演算を3つのステージに分割する演算器(1)そのまま実行すると６clock

プログラム

演算1

演算2

演算i

演算1

昔のプログラミング(3)並列に計算できるようスケジューリング
(4)２個の演算資源を使い並列に実行(5)４clockで実行可
演算3
演算2演算器に逐次に入力し逐次実行

プログラム作成(6)演算を細かく分割し複数の演算資源を並列に動作し性能アップ

コンパイル
デバッグ
プロダクションRUN

言語

グラスィックス処理

コンパイラ

結果の解釈

開発・実行環境

論文作成

ハードウェア

評価

システム運用
34

24

計算科学

計算機科学

問題設定

現代のプログラミング(スパコンを使う場合)

理論構築

理論に忠実な分かりやすいコーディング• アプリケーションの超並列性を引き出す

定式化
離散化

プログラム

プログラム作成• プロセッサの単体性能を引き出す

コンパイル
デバッグ
プロダクションRUN

プログラム

グラスィックス処理
結果の解釈

言語
コンパイラ

高並列化・
高性能コーディング

開発・実行環境

論文作成

ハードウェア

評価

システム運用
35

24

計算科学

計算機科学

問題設定

現代のプログラミング(スパコンを使う場合)

理論構築

理論に忠実な分かりやすいコーディング

定式化
離散化

プログラム

プログラム作成
コンパイル
デバッグ
プロダクションRUN

プログラム

グラスィックス処理
結果の解釈• アプリケーションの超並列性を引き出す
・データを各プロセッサへ分割・処理を各プロセッサへ割当
・プロセッサ間での通信を記述• プロセッサの単体性能・キャッシュの有効利用プログラミング・演算器有効利用プログラミングを引き出す
・メモリ性能有効利用プログラミング・コンパイラ有効利用プログラミング

言語
コンパイラ

高並列化・
高性能コーディング

開発・実行環境

論文作成

ハードウェア

評価

システム運用36

24

アプリケーションの性能についてまとめるとプログラマーは、プロセス間の並列性を意識して並列化し，またブロセス毎のデータの分散を意識してプログラミングすることが必要となった．
そうすることにより数千から数万に及ぶプロセス間の並列性を最大限利用した超高速計算が実現可能となる
またシングルプロセッサの性能を最大限使いきるプログ
ラムのチューニングも必要となるもしシングルプロセッサの性能の1%しか出せなければ，並列化されていてもシステムトータルでも1%の性能

37スーパーコンピュータの威力
例えば次世代のデバイス全体のシミュレーション

たくさんの原子を用いたシミュ
レーション

38

スーパーコンピュータの威力
例えば次世代のデバイス全体のシミュレーション

パソコンで100年かかる計算

39

スーパーコンピュータの威力
例えば次世代のデバイス全体のシミュレーション

パソコンで100年かかる計算

京を使って73000倍の速度で実行

40スーパーコンピュータの威力
例えば次世代のデバイス全体のシミュレーション

パソコンで100年かかる計算

京を使って73000倍の速度で実行半日で終わる
41

高並列化のための重要点

42

そもそも並列化とは？(1)
計算時間

逐次計算
計算時間

並列計算

43

そもそも並列化とは？(2)
計算時間

通信時間 計算時間

通信時間

プロセッサ１
通信
プロセッサ２
通信
プロセッサ３通信
プロセッサ４44

そもそも並列化とは？(2)
計算時間

通信時間 計算時間

通信時間

プロセッサ１
通信
プロセッサ２
通信
プロセッサ３通信
プロセッサ４45

できるだけ同じ
計算時間(ロードインバランスを出さない)そもそも並列化とは？(2)
計算時間

通信時間 計算時間

通信時間

プロセッサ１
通信

できるだけ同じ
計算時間(ロードインバランスを出さない)

プロセッサ２
通信
プロセッサ３通信
プロセッサ４46

通信時間を出来るだけ小さくする！

そもそも並列化とは？(3)
並列計算できない部分(1秒)47

並列計算できる部分(99秒)そもそも並列化とは？(3)
並列計算できない部分(1秒)

1+0.99=1.99秒
ほぼ50倍

100
プロセッサ

48

並列計算できる部分(99秒)そもそも並列化とは？(3)
並列計算できない部分(1秒)

並列計算できる部分(99秒)

1+0.99=1.99秒

1+0.099=1.099秒

ほぼ50倍

ほぼ91倍

必要な並列度を確保する！
100
プロセッサ1000プロセッサ

並列計算できない部分(非並列部)を限りなく小さくする！

49

必要な並列度を確保するとは？
原子分割

領域分割

・原理的にメッシュ数以上には分割できない
・実際的にはそんなに分割すると通信ばかりになる・原理的に原子数以上には分割できない
・以下の手順で分割数を見積もる事が重要
・実際的にはそんなに分割すると通信ばかりになる(1)解きたいメッシュ数を設定し(2)実行時間を見積もる ・後は領域分割と同様(3)解きたい時間を設定し(4)分割数を設定する(5)分割数が多すぎる場合，並列数の拡大を検討(5)については全てのケースでできる訳ではないが後の講義でテクニックを例示する．

50

非並列部が問題になる場合
領域分割の場合，完全に領域分割されていれば非並列部が発生する場合は少ない．
領域分割されていな配列や処理が主要な計算部に残る場合あり．
また初期処理に分割されていない処理が残っている場合もある．具体的には通信テーブルの作成等．
量子計算のアプリ等で領域分割でなくエネルギーバンド並列等を使用している場合は非並列部が残る場合がある．
subroutine m_es_vnonlocal_w(ik,iksnl,ispin,switch_of_eko_part)| +-call tstatc0_begin| | loop_ntyp: do it = 1, ntyp
| | | loop_natm : do ia = 1, natm ---------原子数のループ| | | +-call calc_phase| | | | T-do lmt2 = 1, ilmt(it)| | | | +-call vnonlocal_w_part_sum_over_lmt1| | | | | +-call add_vnlph_l_without_eko_part| | | | | | subroutine add_vnlph_l_without_eko_part()| | | | | | | T-if(kimg == 1) then| | | | | | | | T-do ib = 1, np_e ---------エネルギーバンド並列部| | | | | | | | | T-do i = 1, iba(ik)| | | | | | | | | V-end do| | | | | | | | V-end do| | | | | | | +-else| | | | | | | | T-do ib = 1, np_e ---------エネルギーバンド並列部| | | | | | | | | T-do i = 1, iba(ik)| | | | | | | | | V-end do| | | | | | | | V-enddo| | | | | | | V-end if| | | | | | end subroutine add_vnlph_l_without_eko_part| | | | V-end do| | | V-end do loop_natm| | V-end do loop_ntyp
end subroutine m_es_vnonlocal_w

51

単体性能向上のための重要点52

プロセッサの単体性能を引き出す(1)• かつては研究者やプログラマーは物理モデル式に忠実に素直にプログラミングすることが一般的であった

メモリウォール問題

メモリ

ü 昔の計算機はメモリのデータ供給能力と演算器の能力がバランスしていたデータ• 現代の計算機は演算器の能力が高くなりメモリのデータ供給能力が相対的に不足している
演算器

53

プロセッサの単体性能を引き出す(2)メモリウォール問題への対処
・データ供給能力の高いキャッシュを設ける
・キャッシュに置いたデータを何回も再利用し演算を行なう
・こうする事で演算器の能力を十分使い切る

メモリ
データ

「アプリケーションが要求するByte/Flop値が低い」タイプの計算(*1)

2次キャッシュデータ

例えば行列行列積(2N2個のデータで2N3個の演算可)

再利用(*1)演算量(Flop) に比べデータの移動量(Byte)が小さい計算

1次キャッシュデータ

キャッシュの有効利用
演算器
54もう少し詳しく説明すると
行列行列積の計算
(a)

＝(b)
B/F値
=移動量(Byte)/演算量(Flop)×

2N3個の演算

N2個のデータ

N2個のデータ=2N2/2N3=1/N
原理的にはNが大きい程小さな値

現実のアプリケーションではNがある程度の大きさになるとメモリ配置的には(a)はキャッシュに乗っても(b)は乗らない事となる

(a)

＝(b)

×

そこで行列を小行列にブロック分割し(a)も(b)もキャッシュに乗るようにしてキャッシュ上のデータだけで計算するようにする事で性能向上を実現する．

55

プロセッサの単体性能を引き出す(3)とは言っても・・・・
メモリ・再利用出来ない問題もある
・こうなる演算器の能力を十分使い切る事が出来ない

データ「アプリケーションが要求するByte/Flop値が高い」タイプの計算(*2)

2次キャッシュ

データ(*2)演算量(Flop) に比べデータの移動量(Byte)が大きい計算

再利用
1次キャッシュキャッシュの有効利用が難しい

データ演算器56

例えば行列ベクトル積の計算
(a)

B/F値
=移動量(Byte)/演算量(Flop)=(N2+N)/2N2≒1/2×＝
2N2個の演算(b)

N2個のデータ

N個のデータ

原理的には1/Nより大きな値行列を小行列にブロック分割して(a)も(b)もキャッシュに乗るようにしてもB/F値は大きいので性能向上はできない．

57

まとめ
• スーパーコンピュータとは？
シングルプロセッサの時代
メモリウォール等の問題
並列プロセッサアーキテクチャへ• アプリケーションの性能とは？

アプリケーションの超並列性を引き出す
プロセッサの単体性能を引き出す• 高並列化のための重要点

並列度の確保非並列部を最小化する
通信時間を再消化する
ロードインバランスを解消する• 単体性能向上のための重要点

B/F値とは？
キャッシュの有効利用ができる例
キャッシュの有効利用がしにくい例

p7.p8,p14-p17についてはRIKENAICS井上統括役の資料である．

58