1

スーパーコンピュータ超入門講習会
九州大学情報基盤研究開発センター

2

皆さんは、ふだん、どのくらい計算機（コンピュータ）を使っていますか？
・週一回？
・日に二～三回？
・四六時中？

3

そう、スマートフォンもゲーム機も計算機です。

ふだん、あんまり計算をしているようには見えませんが。

4

本来、計算機とは、計算をする道具です。

皆さんの代わりに、皆さんよりはるかに速く、計算します。
例えばスマートフォンでも、一秒間に数百億回の計算が出来ます。

5

この計算能力を、いろいろな計算に使えます。

例えば、・飛行機の設計、津波の被害予測、気象予報のような、シミュレーションや、・Alpha Go、自動翻訳、自動運転、株価予測のような、機械学習、統計処理

6

計算機ごとに、計算能力の限界があります。

一般に、スーパーコンピュータというのは、
スマートフォンやPCよりはるかに高い能力を持つ計算機です。

出典： https://www.llnl.gov/news/aroundthelab/2012/Jun/ATL061812_sequoia.html

出典： http://eng.mod.gov.cn/Database/Academies/201306/18/content_4455818_2.htm
出典： http://www.aics.riken.jp/jp/k/facility.html

7

世の中の、ほとんどのスーパーコンピュータは、
インターネットにつながっています。
日本にも、そのようなスーパーコンピュータがいくつかあり、手順に従って申請すれば誰でも（※）
利用出来るものもあります。
九州大学にも、一つあります。

※ある程度の基準や制限などはあります8

日本の大学の共同利用スーパーコンピュータ群
組織

計算機名

アクセラレータ数

CPUコア数

理論演算性能Linpack性能

Top500順位(2017年11月）

理研

K computer

北海道大Fujitsu PRIMERGY

705,024-

11.3PF

10.5PF10

40,160 (Xeon)+ 19,584 (Xeon Phi)

-

4.0PF

-

-

(2018年12月～）

東北大

NEC SX-ACE

10,240-0.71PF

-

-

東京大、
筑波大

Oakforest-PACS

556,104-

24.9PF

13.6PF

9

筑波大

COMA

7,860

786

1.0PF

東京大

Reedbush-U
Reedbush-H
Reedbush-L

15,120
4,320
2,304

240
256

0.51PF
1.4PF
1.4PF

0.80PF
0.82PF

295
291

東工大

TSUBAME 3.0

15,1202,160

12.1PF

8.1PF

13

名古屋大

Fujitsu FX100
Fujitsu PRIMERGY

92,16025,656568

3.2PF
0.72PF

2.9PF

43

京都大

Camphor 2
Laurel 2

133,400
30,600

-

5.5PF
1.0PF

3.1PF
0.82PF

41
279

大阪大

NEC SX-ACE
OCTOPUS6,144
6,552 (Xeon)+ 2,816 (Xeon Phi)

148

0.42PF
1.5PF

-

-

九州大

ITO

76,608

512

9.9PF

-

-

9

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争と将来の展望

5. Q & A

10

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争

5. Q & A11

計算機の「速さ」とは？
• 計算の速さ= ある時間の間に実行できる演算の回数• 最もよく使われる指標： 「フロップス」

FLOPS (FLoating Operations Per Second)• floating operation = 実数計算

• per second = 1秒ごとに

12

計算機の速さの限界• 計算機は、以下の P (FLOPS)よりも速く計算することはできない。

P=NxCxO• N: その計算機内の CPUの数• C: その CPUのクロック周波数（Hz）• 一秒間に回路の状態を変える回数（= 命令を実行する回数）• O: 一つの CPUが一回のクロックで同時に実行できる演算数

O は、なにによって決まる？

13

一般的なCPUの構成• 一つ、または複数の「コア」で構成

CPU• ほとんどのコアは、一つの命令で複数のデータの演算を同時に実行できる

コア• SIMD (Single Instruction Multiple Data) 命令• さらに、複数の SIMD命令を同時に実行できるコアもある• 詳細は、CPUのマニュアルを参照• 例） Intelの CPUのマニュアル （日本語訳）

演算器
C+AxB

https://www.isus.jp/wp-content/uploads/pdf/64-ia-32-architecturesoptimization-manual-April2018-040JA.pdf

O = CPU内のコアの数
x コアが一回のクロックで実行できる最大の演算数

C

A

B

14

例）九州大学のスーパーコンピュータ ITO（サブシステムA）• CPUのクロック周波数： 3.0 GHz• システムを構成するサーバ数： 2,000 台• サーバあたりのCPU数： 2 個• CPUあたりのコア数： 18 個
• コアあたりの最大同時演算数： 326912000 GFLOPS（ギガ フロップス） = 3.0 * 2000 * 2 * 18 * 32
一秒間に 6912兆回の演算が出来る
Kilo = 103 , Mega = 106 , Giga = 109 , Tera = 1012 , Peta = 1015 , Exa = 1018

15

スーパーコンピュータ と PC、スマートフォンの演算性能
スマートフォン
Samsung
Galaxy S6(Exynos 7420)

スーパーコンピュータ
ITO サブシステム A(Intel Xeon Gold 6154,
Skylake-SP)

PC(Intel Core i7
6950X,
Broadwell)

スーパーコンピュータ（2017.11時点で世界最速）
Sunway TaihuLight(Sunway SW26010)

出典：
http://www.netlib.org/utk/people/JackDongarra/
PAPERS/sunway-report-2016.pdf

1

1

4,000

40,9602.1GHz3.0GHz3.0GHz

1.45GHz

コア数

4

10

18

256

コア当たり
最大同時演算数

4

16

32

8

総理論演算性能

33.6 GFLOPS

480 GFLOPS

6,912,000 GFLOPS

121,634,816 GFLOPS

CPU数
クロック周波数

クロック周波数はほぼ同じ

基本的に CPU数やコア数で演算性能を稼ぐ

16

なぜ、クロック周波数を上げない？
• クロック周波数で性能を上げる場合：

性能と電力は比例関係ではない
電力

性能

一般家庭約300世帯分の電力を消費！

• スーパーコンピュータの消費電力• 京コンピュータ（LINPACKベンチマーク計測時）: 12.66 MW
http://www.fujitsu.com/jp/about/businesspolicy/tech/k/qa/k04.html
電力供給能力、および冷却能力の限界が近づいている17

なぜ、CPUやコアを増やす？
• 電力当たりの性能が高いコアを多数並べる

限られた電力でシステム全体の性能向上
電力

性能例） 半分の性能を
1/4 の電力で達成

システム全体の電力当たり性能 2倍

18

メニーコア
• 一つのCPU上に電力効率の高いコアを多数配置• Sunway SW26010 260C: 260 コア• Sunway TaihuLightに搭載• 中国の独自開発

出典：
http://www.netlib.org/utk/people/Jack
Dongarra/PAPERS/sunway-report2016.pdf• Intel Xeon Phi : 68～72 コア• Oakforest-PACS (東大 + 筑波大) 等に搭載
• 過去のアーキテクチャを改良し、最新のSIMD命令を追加
出展：https://software.intel.com/en-us/xeon-phi-apps

19

アクセラレータ• コアよりも性能や機能が低い演算装置を多数配置• 基本的な演算（積、和など）を高い電力効率で実行• ホストCPUから操作• 例） GPGPU (General Purpose computation on Graphic

Processing Unit)• グラフィック処理用プロセッサ GPUをシミュレーションや機械学習の計算に使用• 例) NVIDIA Tesla P100: 3584 CUDAコア

出典： http://www.nvidia.co.jp/object/tesla-p100-jp.html

20

もう一つの問題：メモリの速さ• メモリから演算器にデータが届かないと演算が出来ない演算器• 演算性能とメモリ性能のバランスが重要

メモリ

21

メモリの速度が足りない• 例） ITO サブシステムAのCPUとメモリ• CPU: Intel Xeon Gold 6154, 3.0GHz, 18core, 最大32演算• メモリ： DDR4
CPUの演算性能

1728 GFLOPS

2演算（Y=A*X+B）当たりのデータ

read 24バイト演算に必要なメモリ速度

CPUのメモリ速度

read 20736 GB/秒

127.8 GB/秒

CPUの性能を約 0.6% しか利用できない？？

22

より高速なメモリ• HMC (Hybrid Memory Cube)• Fujitsu PRIMEHPC FX100 （京コンピュータ後継機）に搭載• MCDRAM (Multi Channel DRAM)• Intel Xeon Phiの CPUチップ上に搭載• HBM (High Bandwidth Memory)• GPU (NVIDIA Tesla V100 / P100) に搭載
プロセッサと搭載メモリ

最大メモリ速度

最大容量Intel Xeon Gold, DDR4 2666

127.8GB/秒

1.5TB

Fujitsu SPARC64 XIfx, HMC2

480GB/秒

32GB

Intel Xeon Phi, MCDRAM

400GB/秒

16GB

NVIDIA Tesla P100, HBM2

732GB/秒

16GB

まだ、演算器の演算速度に追いつかない23

キャッシュメモリとレジスタ• キャッシュメモリ：演算器

演算器とメモリの間に置く高速記憶装置

レジスタ

階層

速度

容量

1次

約 128バイト/クロック

32KB / コア

2次

約 32バイト/クロック

256KB / コア

3次

約 16バイト/クロック

36MB / CPU• レジスタ：演算器が直接参照できるデータの置き場所

キャッシュメモリ• 例） Intel Xeon Gold

１次
２次
３次
メモリ

キャッシュやレジスタのデータをうまく再利用できればCPUの性能を発揮24

データの再利用 = 「参照の局所性」• 時間的な参照の局所性• 一度演算に使ったデータを、連続して何度も使う• 空間的な参照の局所性• 一度演算に使ったデータのすぐ近くのデータを連続して使う• 例） 行列同士の積の計算
for i = 1 to M
for j = 1 to M
for k = 1 to M
C(i, j) = C(i, j) + A(i, k) * B(k, j)

j

j
i

+

時間的な
参照の局所性C(i, j)

i

k
*

空間的な
参照の局所性A(i, k)k
B(k, j)25

スーパーコンピュータの構成：
演算装置とメモリだけではない
core

CPU
計算ノード
Memory…

高速ネットワークInternet
ログインノード
共有ストレージ

26

計算ノードの構成• 必ず載っているもの：• 1個～複数個の CPU• メモリ• ネットワークインタフェース
等CPU
MemoryNIC• システムによって載っている場合があるもの：• ディスク （HDD or SSD）
• 用途： OS起動用、一時的なデータ格納用、等• 電力、場所、故障率の問題からディスクを搭載せず、
ネットワーク経由で OSを起動することもある• アクセラレータ （GPU等）• 用途： 特定の計算を高速化

Accelerator

Local storage

CPU
MemoryNIC

27

CPUとメモリの位置関係• ノード内の「近い」メモリ• 直接読み書き可• 高速…

• ノード内の「遠い」メモリ• 直接読み書き可• 若干遅い• 他ノードのメモリ• 直接読み書き不可• ネットワーク越しに通信• 遅い

計算とデータの配置が性能に大きく影響28

ログインノード• 外部からログインし、対話的に操作できるノード• 計算ノードと別に用意することが多い• 計算ノードを計算に専念させるため• 計算ノードと CPUや OSが違う場合も• 例） 京コンピュータ• 主な用途• 外部とのファイル転送• プログラムやデータの準備• 計算ノードへの計算依頼• 計算結果の処理

等Internet

29

共有ストレージ• 計算ノード、ログインノードと、複数本の高速ネットワークで接続• ITOの場合• 合計転送速度： 120GB/秒 程度• 容量： 24.6PB

30

高速ネットワーク• 通信性能がスーパーコンピュータの性能に大きく影響• 複数のノードを使った計算• 大量のファイルアクセス• ITOの場合（Mellanox InfiniBand EDR）
• 最小通信遅延時間： 1μ秒 程度• 一回の通信に最小限必要な時間• Ethernet: 数十～数百μ秒• 最大通信バンド幅： 12GB/秒 程度• 1秒当たりの最大転送データサイズ• Ethernet: 0.1～ 1GB/秒

31

ネットワークの形状（トポロジー）も重要

Fat TreeDragonfly

Tofu(京コンピュータ）

出典： http://www.ssken.gr.jp/MAINSITE/download/newsletter/2011/20110825-sci-1/lecture-5/ppt.pdf

設計目標： なるべく少ない結線数で、互いに干渉せず、より多くの通信を実現

32

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争と将来の展望

5. Q & A

33

スーパーコンピュータの利用手順
1. ログインノードにログイン
2. プログラムやデータの準備
3. 計算ノードに「ジョブ」投入（実行完了待ち）4. 実行結果の処理

34

ジョブ
• 計算ノードに実行させるコマンド（を記述したテキストファイル）• 条件分岐や繰り返しも記述可能

for i in data1 data2 data3
do./run ${i}done

• ジョブ管理システム• 計算ノードの空き状況に応じて順にジョブを割り当て

ジョブ管理システム

ジョブ

35

スーパーコンピュータは並列計算機• スーパーコンピュータの性能を発揮させる使い方：

計算を分担させ、計算時間を短縮• ノード、CPU、コア、演算器

逐次処理

計算１
計算２

• 逐次処理の並列実行• ジョブ単位の並列計算• （１つのジョブで多数プログラムを実行）• プログラムの並列化• プロセス並列• スレッド並列• ハイブリッド並列• アクセラレータ、SIMD演算器で並列化

計算３

並列化
計算１

計算２

計算３

36

ジョブ単位の並列計算
ジョブ

入力データ

• 計算したい入力データやプログラムが多数ある場合、

簡単にスーパーコンピュータを活用• プログラムの改変なし• 出力ファイルに用心• 相互に上書きしないよう、ジョブ毎に出力ファイル名を変える

37

１つのジョブで多数プログラムを実行• 実際には、ジョブ単位の同時並列数はシステム側で制限• 大量ジョブの制御はスーパーコンピュータでも大変・・・• 解決策：１つのジョブで多数のプログラムを実行• 便利なツール： GNU Parallel• スパコンの並列性を多数の（逐次）プログラムでも活用可能にする• ジョブ内キューを作って同時実行数を制限しながら順次実行
１つのジョブ

GNU Parallel
ジョブが使える計算資源（逐次）プログラム

38

プログラムの並列化• 計算を分割して、計算ノードやコアや演算器に分担させる• 必要に応じて、データも分割• 必要に応じて、通信を呼び出し• プログラムを「並列化」する必要がある場合：• 一つのプログラムで、一つの入力データに対して、出来るだけ速く計算したい• 一つの計算ノードではメモリが不足する

どのように分割するか？

39

並列化されていないプログラムの例：
２つのベクトルの和を計算• ０番目から９９番目までの要素を順に計算
0

...

99

A

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

B
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C

プログラム

double A[100], B[100], C[100];...
for (i = 0; i < 100; i++)A[i] = B[i] + C[i];40

計算だけを分割： スレッド並列• スレッド ＝ 同じ記憶空間を共有しながらプログラムの実行を進める流れ
スレッド０
0

スレッド１

スレッド２

スレッド３

... 24 25 ... 49 50 ... 74 75 ...

99

A

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

全スレッドが
同じ配列を
共有

B

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C
double A[100],B[100],C[100];
double A[100],B[100],C[100];...
double A[100],B[100],C[100];for (i=0; i<25; i++)...
double A[100],B[100],C[100];...
for(i=25;i<50;i++)
A[i] = B[i] + C[i];for (i=50; i<75; i++) ...
A[i] = B[i] + C[i];A[i] = B[i] + C[i];for (i=75; i<100; i++)A[i] = B[i] + C[i];
スレッド０

スレッド１

スレッド２

スレッド３

41

計算とデータを分割： プロセス並列• プロセス ＝ それぞれ独立した記憶空間を持ってプログラムの実行を進める流れ

A

プロセス０

プロセス１

プロセス２

プロセス３

0

0

0

0

... 24

AA... 24

=
=
=
=
=

B

B

C

+
+
+
+
+

+
+
+
+
+

+
+
+
+
+
C

... 24

=
=
=
=
=

B

+
+
+
+
+
C

A

=
=
=
=
=

=
=
=
=
=
B

... 24

C

各プロセスがdouble A[25],B[25],C[25];別の配列を利用...
double A[25],B[25],C[25];for (i=0;i<25;i++)...
double A[25],B[25],C[25];A[i] = B[i] + C[i]; for (i=0;i<25;i++)...
double A[25],B[25],C[25];A[i] = B[i] + C[i];for (i=0;i<25;i++) ...
プロセス０
A[i] = B[i] + C[i];for (i=0;i<25;i++)
プロセス１
A[i] = B[i] + C[i];

プロセス２

プロセス３

42

ハイブリッド並列• 各プロセスの中で複数のスレッドを実行
プロセス０
スレッド０

A

スレッド1

0-4 5-9

プロセス１
スレッド０

スレッド4

...20-24

A

0-4 5-9

スレッド０
スレッド4

...20-24

A

0-4 5-9

スレッド０
スレッド4

...20-24

A

B

スレッド1

0-4 5-9

スレッド4...20-24

=
=
=
=
=

B

スレッド1

プロセス３

=
=
=
=
=

=
=
=
=
=

=
=
=
=
=
B

スレッド1

プロセス２

B

+
+
+
+
+

+
+
+
+
+

+
+
+
+
+

+
+
+
+
+
C

C

C

C

double A[25],B[25],C[25];...
for (i=0;i<5;i++)A[i] = B[i] + C[i];double A[25],B[25],C[25];...
for (i=0;i<5;i++)A[i] = B[i] + C[i];double A[25],B[25],C[25];...
for (i=0;i<5;i++)A[i] = B[i] + C[i];double A[25],B[25],C[25];...
for (i=0;i<5;i++)A[i] = B[i] + C[i];プロセス０スレッド０

double A[25],B[25],C[25];...
for (i=5;i<10;i++)A[i] = B[i] + C[i];プロセス０スレッド1

プロセス1スレッド０

double A[25],B[25],C[25];...
for (i=5;i<10;i++)A[i] = B[i] + C[i];プロセス1スレッド1

double A[25],B[25],C[25];...
for (i=20;i<25;i++)A[i] = B[i] + C[i];プロセス０スレッド4

プロセス2スレッド０

double A[25],B[25],C[25];...
for (i=5;i<10;i++)A[i] = B[i] + C[i];プロセス2スレッド1

double A[25],B[25],C[25];...
for (i=20;i<25;i++)A[i] = B[i] + C[i];プロセス1スレッド4

プロセス3スレッド０

double A[25],B[25],C[25];...
for (i=5;i<10;i++)A[i] = B[i] + C[i];プロセス3スレッド1

double A[25],B[25],C[25];...
for (i=20;i<25;i++)A[i] = B[i] + C[i];プロセス2スレッド4

double A[25],B[25],C[25];...
for (i=20;i<25;i++)A[i] = B[i] + C[i];プロセス3スレッド443

プロセス、スレッドとノード、コア• プロセスは、一つのノードの中で実行• スレッドは、プロセスに割り当てられたコアの一つで実行• 例） 2ノード x 12コアでの計算• 一つのコアに一つのスレッドを割り当てる場合

2プロセス x 12スレッド

4プロセス x 6スレッド

8プロセス x 3スレッド

44

アクセラレータ、SIMD演算器での計算• アクセラレータ• 専用のプログラム言語やインタフェースで、「アクセラレータに任せる計算」を記述• CUDA C（GPU用）の例__global__ void vectorAdd(const float *A, const float *B, float *C, int numElements){
int i = blockDim.x * blockIdx.x + threadIdx.x;
if(i < numElements)
C[i] = A[i] + B[i];}int main(void){...
vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);...
}• もっと簡単に記述できる方法も登場• OpenACC, OpenMP 4.0__m512 ax = _mm512_load_ps(&a[i]);__m512 bx = _mm512_load_ps(&b[i]);sumx = _mm512_fmadd_ps(ax, bx, sumx);• SIMD演算器• 内部では、「SIMD命令」で並列処理• 多くの場合、コンパイラが自動的に SIMD命令に変換45

プログラム並列化の効果• 速度向上率＝(並列化前の実行時間) / (並列化後の実行時間)• 並列化によって何倍速くなったか

10時間

速度向上率 = 10.0

1時間
並列化前

並列化後

46

並列化に対する期待と現実• 期待:「ＣＰＵを 4台使うんだから，並列化で 4倍速くなって欲しい」• 現実:「ＣＰＵ 4台で 3倍くらい速くなれば十分だろう」• 探索問題などでは、台数より速く結果が得られることはある• 主な理由• アムダールの法則• 負荷のバランス• 通信のコスト

47

アムダールの法則• プログラム中の高速化した部分しか高速化されない• 並列化にあてはめて考えると：並列化による性能向上率の理論的な限界＝1/((1-P)+P/N)• P: プログラム中の並列化対象部分が全処理時間に占める割合• N: プロセス数• Example) N=4 で 3.5倍以上高速化するためには 95%以上の部分の並列化が必要

48

負荷のバランス• 並列プログラムの実行時間は「最も遅いプロセスの実行時間」
である
全体の実行時間

全体の実行時間

プロセス0

プロセス0

プロセス1

プロセス1

プロセス2

プロセス2

プロセス3

プロセス3

49

通信時間
• 並列化前は不要だった時間

並列化前

Rank 0
並列化後

Rank 1
Rank 2
Rank 350

並列化以外の高速化も重要• コンパイラの最適化オプションを試す• キャッシュメモリやレジスタの利用効率を上げるようプログラムを改良する• 無駄な計算を省く

それでも速度が遅ければ、プログラムを並列化

51

誰がプログラムを並列化するか？
1. 既に誰かが並列化したプログラムを使う
2. 誰かが並列化したライブラリを使う
3. コンパイラに並列化させる
4. 自分で並列化する

52

１．既に誰かが並列化したプログラム• スーパーコンピュータセンターで用意されている

アプリケーションを確認• 並列化されていれば、マニュアルに「プロセス数」や「スレッド数」の指定方法があるはず• 並列化されたオープンソースソフトウェアの利用• コンパイル方法や実行方法の詳細は、センターの Webページ等を参照• 困ったらセンターに相談53

２．誰かが並列化したライブラリ• 主に行列計算の関数を提供• ITOに用意されている数値計算ライブラリ• Fujitsu SSLII• 連立1次方程式の直接解法・反復解法、逆行列、固有値問題、
フーリエ変換、擬似乱数など• Intel Math Kernel Library• BLAS、LAPACK、ScaLAPACK、BLACS、PBLAS、Sparse BLAS、疎行列演算関数（PARDISO含む)、フーリエ変換、 偏微分方程式、非線形最適化ソルバ、データ
フィッティング関数、GMP（多倍長計算）関数、 ベクトル化数学ライブラリ(VML)、統計関数（疑似乱数生成含む）• NAG Library• Numerical Algorithm Group社によって開発された数値計算ライブラリ• FFTW• 離散フーリエ変換• PETSc• 偏微分方程式によって記述された問題を並列計算機上で高速に処理するための数値計算ライブラリ

54

３．コンパイラによる並列化• コンパイラが、プログラムのスレッド並列化や、SIMD命令の挿入を自動的に適用• ほとんどの C, C++, Fortranコンパイラで利用可能• GNU, Intel, Fujitsu, PGI, etc.

• 簡単なプログラムでは、それなりの効果• ループの中に関数呼び出しや条件分岐が入っていない• ループの繰り返し数が、コンパイル時に分かっている• ループの繰り返し順序が変わっても、計算結果が変わらない
等

それでも速度が遅ければ、自分でプログラムを並列化

55

４．自分で並列化• 最も一般的な方法：• OpenMP でスレッド並列化• MPI (Message Passing Interface) でプロセス並列化• 他にも：• Chapel• CAF (Co-array Fortran)• XcalableMP

56

OpenMPによる並列化• プログラム中に「指示行」を追加• コンパイラが指示に従ってスレッド並列プログラムを作成#include <omp.h>
double A[100], B[100], C[100];...
#pragma omp parallel forfor (i = 0; i < 100; i++)A[i] = B[i] + C[i];並列化指示行57

ＭＰＩ (Message Passing Interface)• 並列プログラム用に用意された通信関数群の定義• 例） プロセス０からプロセス１にデータを転送
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
自分のプロセス番号を取得...
if (myid == 0)
MPI_Send(&(a[5]), 1, MPI_DOUBLE, 1,
プロセス０がプロセス１に送信
0, MPI_COMM_WORLD);
if (myid == 1)
MPI_Recv(&(a[3]), 1, MPI_DOUBLE, 0,
プロセス１がプロセス０から受信
0, MPI_COMM_WORLD, &status);
プロセス0

MPI_Send

プロセス1

MPI_Recv

58

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争と将来の展望

5. Q & A59

九州大学のスーパーコンピュータ ITO(InfiniBand EDR 100Gbps)

想定している利用例• 大規模オンラインデータの収集、学習・解析、
可視化の支援• 大容量ストレージ

オンラインデータ

収集

ストレージ

• 高速バックエンド

可視化• 大規模フロントエンド
学習・解析

バックエンド

フロントエンド

61

ITOのソフトウェア• コンパイラ、言語処理系• 富士通コンパイラ、Intelコンパイラ、PGIコンパイラ、CUDA、CUDA Fortran、Perl、Python• 数値計算ライブラリ• SSL II、BLAS/LAPACK/ScaLAPACK、NAGライブラリ、FFTW、PETSc• その他ライブラリ• HDF5、NetCDF• 計算化学• Gaussian、Gaussview、CHARMM、VASP、Molpro、SCIGRESS、AMBER、GAMESS、GROMACS• 流体・構造解析• Marc/Marc Mentat、MSC Nastran/Patran、ANSYS、OpenFOAM、FrontFlow/Red• データ解析• SAS、ENVI/IDL、R• 科学技術計算• Mathematica、MATLAB• 機械学習• TensorFlow、Caffe、Chainer、CNTK• 画像処理• FIELDVIEW、AVS

利用者からの追加要望にも対応（可能な範囲で）62

ITOの利用資格• 大学、高等専門学校又は大学共同利用機関の教員及び学生• 独立行政法人に所属する研究職員• 学術研究を目的とする研究機関でセンター長が認めた機関に所属し、専ら研究に従事する者• 外部資金を受けて学術研究を行う者• 民間企業等に所属する者で、別に定める審査機関における審査を経て、センター長が認めた者• その他特にセンター長が適当と認めた者

63

ITOの利用プラン （有料）
• 共有タイプ• 計算ノード群を複数のユーザで共有して利用• ノード固定タイプ• 割り当てられた計算ノード群を準占有的に利用

64

プロジェクト利用 （原則無料）• 先端的計算科学研究プロジェクト• ITOを対象に九州大学が公募（毎年度末締切）• HPCI (High Performance Computing Infrastructure)• 全国の共同利用スーパーコンピュータを対象に高度情報科学技術研究

機構が公募• JHPCN (学際大規模情報基盤共同利用・共同研究拠点)• 全国の共同利用スーパーコンピュータを対象にJHPCNが公募（毎年1月締切）• JHPCN-Q• ITOを対象に、萌芽研究支援を目的として九州大学が公募（随時）65

ITOの利用負担金• サブシステム A• 4ノード（共有）： 2,960円 / 月• 4ノード（固定）： 23,600円 / 月• サブシステム B• 1ノード（共有）： 2,100円 / 月• 1ノード（固定）： 17,000円 / 月• 基本フロントエンド• 2CPU x 24時間まで同時予約可能： 900円 / 月• 大規模フロントエンド• 8CPU x 24時間まで同時予約可能： 5,200円 / 月• ストレージ• 10TB： 340円 / 月

66

申請から利用開始までの流れ
1. 利用申請• 利用プランの検討• 計算機利用申請書を記入• 申請書送付• 利用承認書発行（1週間程度）

2. 利用準備• 初期パスワード変更• 公開鍵登録• 必要なファイルのアップロード、もしくは作成• プログラムのコンパイル

3. 利用（フロントエンド）• 予約• ログインしてプログラム実行
4. 利用（バックエンド）• ジョブスクリプトの作成• ジョブ投入• 結果の確認67

１．利用申請利用プランの検討

利用負担金表：https://www.cc.kyushu-u.ac.jp/scp/service/fee_list/• 共有タイプ or ノード固定タイプ• 最初は共有タイプの利用を推奨• 利用システム• 対話的な利用が不要な場合• サブシステム A: CPUのみ、メモリ 192GB / ノード• サブシステム B: CPU + GPU利用、メモリ 384GB / ノード• 対話的な利用が必要な場合• 基本フロントエンド： 384GBメモリ / ノード• 大容量フロントエンド： 12TBメモリ / ノード• 上記を組み合わせて利用可能• 使用ノード数• プログラムやデータによる• 使用メモリ量、一回の計算にかかる時間、同時に何個の計算を実行させるか、等• ストレージ• 10TB or 100TB例）今まで 4コア 16GBの PCで
１回１時間かかったプログラムを1000個のデータについて実行したい- 方法 １ プログラムを変更しない場合
・ITO サブシステムAを ４ノード利用
・4ノードで最大 16個のジョブ（データ）を同時実行（ノード当たり 4個ずつ）・所要時間： 約 64時間
- 方法 ２ GPUで 10倍高速化されたプログラムを利用できる場合
・ITO サブシステムBを 2ノード利用
・2ノードで最大 2個のジョブを同時実行
・所要時間： 約 50時間
- さらに、大量の計算結果からグラフを作成する
ために基本フロントエンド Sプラン
（2CPU * 24時間まで同時予約可能）- ストレージは、とりあえず 10TB
（足りなくなったら、研究室に退避するか、容量を追加申請）

68
利用申請書：
https://www.cc.kyushu-u.ac.jp/scp/service/guidance/application/

１．利用申請
利用申請書の記入• 共有利用の申請書
１ページ目

利用は月単位

研究費を管理している
会計担当の方に相談

２ページ目

全利用者の情報（外国籍の方の利用承認には最大１ヶ月ほど要する）

69

１．利用申請
利用承認書到着• アカウント• 初期パスワード

を確認

70

２．利用準備
初期パスワード変更• ITOポータルにアクセス

https://ito-portal.cc.kyushu-u.ac.jp/itoportal• 配布されたユーザIDと初期パスワードでログイン• 新しいパスワードを入力（２回）• 8文字以上• 変更後、反映されるまでに数分要します。

71

２．利用準備
公開鍵登録

公開鍵登録：
https://www.cc.kyushu-u.ac.jp/scp/system/ITO/02_login/2.html• 鍵ペア（秘密鍵、公開鍵）の用意• まだ作成していなければ、新規に作成• 注意： SSH-1(RSA)等の古い鍵ではログイン不可⇒ 新規に鍵ペアを作成• Windows:
端末エミュレータ（MobaXterm、Putty、TeraTerm等）に付属の作成ツール• macOS、Linux:
ターミナルで ssh-keygen• 公開鍵の登録• 本センター Webサイトを参照

72

２．利用準備
ファイルのアップロード

ファイル転送：https://www.cc.kyushu-u.ac.jp/scp/system/ITO/02_login/• Windowsの場合： WinSCP• macOS, Linuxの場合： scpコマンド

73

２．利用準備ログインノードにログイン

ファイル転送：https://www.cc.kyushu-u.ac.jp/scp/system/ITO/02_login/• Windowsの場合：• 端末エミュレータを利用• MobaXterm, TeraTerm,

Putty, etc.
• Windows上の Linux• Cygwin,

Bash on Ubuntu on Windows,
etc.

• macOS, Linuxの場合：• ターミナルから sshコマンドでログイン$ ssh -i 秘密鍵ファイル名 -l ユーザ名 ito.cc.kyushu-u.ac.jp

74

２．利用準備プログラムのコンパイル

コンパイラの利用方法：
https://www.cc.kyushu-u.ac.jp/scp/software/• 自作プログラムやオープンソースソフトウェアの場合• 利用可能コンパイラ (C / C++ / Fortran)• Intel Compier• GNU• Fujitsu• PGI• 例） Intel Compiler 2018の場合$ module load intel/2018$ icc -ipo -O3 -no-prec-div -fp-model fast=2 -xHost test.c -o test

75

３．利用（フロントエンド）
フロントエンドの予約

フロントエンドの予約：
https://www.cc.kyushu-u.ac.jp/scp/system/ITO/frontend/

１．予約システムにログイン
https://ito-portal.cc.kyushu-u.ac.jp/itofront
２．システムの空き状況確認
３．自分の利用状況確認
４．予約

76

３．利用（フロントエンド）
フロントエンドへのログイン

フロントエンドの予約：
https://www.cc.kyushu-u.ac.jp/scp/system/ITO/frontend/• メールで利用ノード情報が通知• IPアドレスを確認• ログインノードから、指定された IPアドレスにログイン$ ssh -Y 予約したホストの IPアドレス

77

３．利用（バックエンド）
ジョブスクリプトの作成• テキストファイルとして作成• ログインノードで編集、もしくは PCで編集したものをアップロード• 処理してほしい内容とジョブの内容を記述• 例） サブシステム Aを 1ノード利用するプログラムの実行#!/bin/sh#PJM -L "vnode=1"#PJM -L "vnode-core=36"#PJM -L "rscunit=ito-a"#PJM -L "rscgrp=ito-ss"#PJM -L "elapse=02:00:00"
module load intel/2018./test data1

78

３．利用（バックエンド）
ジョブ投入と結果確認• ジョブの投入$ pjsub test.sh[INFO] PJM 0000 pjsub Job 28246 submitted.

• ジョブの状態確認$ pjstat
ACCEPT QUEUED STGIN READY RUNING RUNOUT STGOUTHOLD ERROR
TOTAL
0
0
0
0
1
0
0
0
0
1
s
0
0
0
0
1
0
0
0
0
1
JOB_ID
28246

JOB_NAME
MD ST USER
test-mpifc NM RNE k70043a

START_DATE
10/04 09:34:06

ELAPSE_LIM NODE_REQUIRE
0000:05:00 -• ジョブの結果確認
$ ls
test

test.ctest.shtest.sh.i28246

test.sh.o28246

VNODE
1

CORE V_MEM
36
unlimited

79

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争と将来の展望

5. Q & A

80「世界最速のスーパーコンピュータ」とは？
• 最も有名な指標：Top500 （https://www.top500.org/）• スーパーコンピュータ性能比較リスト• 稼働中のスーパーコンピュータの1位～500位を掲載• 「LINPACKベンチマークプログラム」の性能で順位付け• （巨大な）連立一次方程式の解を求める計算• 第1回は1993年• 毎年6月と11月に更新

81

性能の推移

出典：https://www.top500.org/

82

過去の#1システムの例：地球シミュレータ• 2002年3月稼働開始、主にNECが開発、地球シミュレータセンター（JAMSTEC）に設置• 開発目標：10km四方（赤道近辺）の精度で地球全体の大気循環をシミュレートする• それまでは 100km四方• 台風の発生過程：100km四方だと台風が台風に見えない• 地球シミュレータの成果• 台風の進路予測• 5.5km四方で地球全体をシミュレート（日本近辺は 2.78km四方）• 海底探査船「ちきゅう」に、高精度の台風進路予測を

到達予定の3日前までに提供• 台風の発生予測82• 過去10年間について、シミュレーションによる
台風発生回数が実際の値とほぼ一致• CO2の増加に伴う温暖化の予測• 2040年には年間の真夏日日数が約20日増加，平均気温が約2度上昇．

83

Top500における地球シミュレータの性能• Linpack 性能 35.8 TFLOPS＝1秒あたり35兆回の実数計算• 断トツの 1位• 2位から10位までの計算機の総演算性能を上回る（2002年6月時点）• 理論最大性能 41.0 TFLOPS、実行効率87%• “Computenik”「計算機分野での Sputnik だ！」 (in New York Times）• by Jack Dongarra教授（テネシー大学教授、Top500サイトの創始者）• 地球シミュレータは2年半の間#1の座を守り続ける• アメリカのスーパーコンピュータ開発に火を付けた

84

PFLOPSの実現、演算加速器の普及• Blue Gene/L （IBM、LLNL、2004年11月～）• 2004.11 70.7 TFLOPS （理論最大性能 91.8 TFLOPS）• 2005.06 136.8 TFLOPS （理論最大性能 183.5 TFLOPS）• 世界で初めて 100 TFLOPS に到達• 2005.11 280.6 TFLOPS （理論最大性能 367.0 TFLOPS）• 2007.11 478.2 TFLOPS （理論最大性能 596.4 TFLOPS）• Roadrunner （IBM、LANL、2008年6月～）• 1.026 PFLOPS （理論最大性能 1.3758 PFLOPS）• 世界で初めて 1 PFLOPS に到達• Opteron + PowerXCellによるヘテロジニアスシステム• この頃から通常のCPUよりもシンプルで高並列な演算加速器（アクセラレー
タ、特にGPU）の採用が増加• 電力効率増加、演算効率低下、汎用性と使いやすさはやや犠牲に• その後、Tianhe（中国）、「京」（日本）などと10 PFLOPS級の戦いへ

85

TOP500 2017年11月の状況• システム別性能• 1位 Sunway TaihuLight (China)
93.0 PFLOPS （/ 125.4 PF）• 2位 Tianhe-2 (China)
33.9 PFLOPS （/ 54.9 PF）• 3位 Piz Daint (Switzerland)
19.6 PFLOPS （/ 25.3 PF）• 4位 Gyoukou (Japan)
19.1 PFLOPS （/ 28.2 PF）• 5位 Titan (USA)17.6 PFLOPS （/ 27.1 PF）• 6位 Sequoia (USA)17.1 PFLOPS （/ 20.1 PF）• 国別合計性能：• 1位 China
35.4% (298.9 PFLOPS)• 2位 USA
29.6% (249.8 PFLOPS)• 3位 Japan
10.8% ( 90.9 PFLOPS)• 4位 Germany
4.5% ( 38.4 PFLOPS)• 5位 France
3.6% ( 30.8 PFLOPS)• 以下，UK, Italy, Netherlands, Canada, Poland, ...

• 中国が日米を追い抜き世界一のスーパーコンピュータ大国へ※2018年6月9日、ORNL/DoEが200+PFLOPSのSummit稼働開始を発表（IBM Power9 + NVIDIA VoltaによるGPUスパコン）

86

世界最速システムの変遷
2020年頃には
1 EFLOPSに到達する？

2016.06-2017.11 Sunway TaihuLight
2013.06-2015.11 Tianhe-2
2012.11Titan
2012.06
Sequoia2011.06-2011.11 「京」コンピュータ
2010.11
Tianhe-1A
2009.11-2010.06 Jaguar
2008.06-2009.06 Roadrunner
2004.11-2007.11 BlueGene/L
2002.06-2004.06 地球シミュレータ
2000.11-2001.11 ASCI White87

スーパーコンピュータのトレンド：
どのようなシステムが上位にランクインしているのか？
• 2000年代前半まで• まとめて計算を行う仕組みを持った強力なCPUと高速なメモリを搭載した計算機を並べる• ベクトル型並列計算機、ベクトルプロセッサ• 多くの構成要素をスパコン専用に開発• 2000年代後半以降• 1台の計算機の性能はやや控えめだが、ネットワークで大量に繋いで全体として高性能• 超並列計算機（Massively Parallel Processing）、マルチコアCPU• パソコン向けに近いパーツを多用（開発費削減、下方展開）• 2010年代• さらに規模の大きなMPP、アクセラレータ（GPU）やメニーコアプロセッサの活用• 電力効率の良いシステムの追求

88

TOP500の課題、ベンチマークの多様化• TOP500の抱える問題• 意味のある計算をしていない、実アプリで行う計算とかけ離れている、時間も電気代もかかる• 「連立一次方程式の求解が全てではない」 「現在のスーパーコンピュータの性能を十分に反映していない」「現代のスーパーコンピュータランキングとして妥当ではない」• ⇔過去のシステムとの比較、安定性の確認、理想的な最大性能の確認• TOP500以外のランキングへの注目も高まる• Green500 （http://www.green500.org）• TOP500の性能を消費電力で割った電力対性能比• HPCG （http://www.hpcg-benchmark.org）• 前処理付き共役勾配法アルゴリズムによる計算性能• Graph500 （http://www.graph500.org）• グラフ探索性能• IO500 （https://www.vi4io.org/io500/start）• ストレージ性能

89

スーパーコンピュータの性能向上を支えてきたもの••••

微細化によるトランジスタ数増加
クロック周波数増加
コア数増加
微細化の限界・電力密度の限界

引用元 http://www.lanl.gov/conferences/salishan/salishan2011/3moore.pdf

90

EFLOPSへの挑戦• 1000 PFLOPS(1 EFLOPS)に向けて• 性能値の達成そのものは可能、とにかく大量に並べれば良い• 問題：お金・電力・設置空間が足りない、故障が増えて全体を安定稼働させ続けられない• 米国、中国、欧州、日本がそれぞれ計画を進めている• 膨大な開発費、半導体の微細化が難航、……達成は2022年頃か• アプリケーション性能は出るのか• 使いやすいHW/SWでなければ普及しない、利用者が困る• 半導体の微細化が本当に終わってしまったあとはどうする？
• 専用ハードウェアの活用、用途別の専用スーパーコンピュータ• 「従来のコンピュータ」とは異なるなにか• 例えば量子コンピュータ？

91

今日の内容
1. スーパーコンピュータの仕組み
2. スーパーコンピュータの使い方
3. 九州大学のスーパーコンピュータシステムITO紹介
4. スーパーコンピュータの開発競争と将来の展望

5. Q & A