先駆的科学計算に関するフォーラム2017(Forum on Advanced Scientific Computing 2017)～先端的計算科学研究プロジェクト成果報告 plus a bit extra～

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

柴村英智1,4、南里豪志2、森江善之2、本田宏明2、薄田竜太郎2、小林泰三3、曽我武史11 (公財)九州先端科学技術研究所 ISIT
2 九州大学情報基盤研究開発センター
3 帝京大学福岡医療技術学部
4 （現在 （株）TeamAIBOD）

概要► エクサスケール向け通信ライブラリ ACP (Advanced CommunicationPrimitives) の性能評価


ACPの紹介と基本性能

本ベンチマーク課題における実験結果


粒子系シミュレーションの不規則通信の低オーバヘッド化

Stencil計算の隣接通信の隠蔽



ACPを用いた複数MPIプログラムの省メモリ協調実行► 演算サーバと外部サーバの連携実行2017/4/28

スパコンの演算結果を手元のマシンでリアルタイムに処理
エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

2エクサスケール向け通信ライブラリACPの性能評価
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

3

エクサスケール向け通信ライブラリACP► 開発コンセプト

通信性能と省メモリを両立 エクサスケール計算環境での高スケーラビリティ
► 想定する計算環境

ノード数： 数十万ノード
 プロセス数： 数百万プロセス
 メモリ量：10GB／プロセス► 開発支援

JST-CREST研究領域 「ポストペタスケール高性能計算に資するシステムソフトウェア技術の創出」 研究課題：「省メモリ技術と動的最適化技術によるスケーラブル通信ライブラリの開発（九州大学南里准教授）」► 一般公開中
2017/4/28

http://ace-project.kyushu-u.ac.jp/
エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

4

ACPの基本方針： 片側通信を基盤としたインタフェース► 両側通信
プロセス０
A

プロセス１
A

受信

プロセス２
A

プロセス３
A

送信
ネットワーク・ 待ち合わせのための一時的なメッセージの保管場所（バッファ）がプロセス数に応じて必要► 片側通信プロセス０
A

プロセス１
readA

プロセス２ write プロセス３
AA・ バッファが不要 ⇒ 省メモリ
・ 同期が不要 ⇒ 低オーバヘッド
ネットワーク2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

大規模並列計算機に適したインタフェース

5ACPの構成言語、ミドルウェア、アプリケーション

ACP通信ライブラリ
ACP中間層(Middle Layer)
Communicationライブラリ・ メッセージ転送

Dataライブラリ・ 遠隔・分散データ構造

ACP基本層(Basic Layer)
・ 通信抽象化層

インターコネクトデバイス
・ InfiniBand, Tofu, Tofu2, Ethernet
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

6

ACP基本層の機能► グローバルメモリアクセス

任意のグローバルアドレスを送信元、宛先とするデータ転送
p0

p1

p2

p3
acp_copy(B, A, 8, 0);AB

任意のグローバルアドレスに対する、4および8バイトの不可分操作► アクセス順序制御

逐次アクセス、並列アクセス► 64ビットグローバルアドレス

アドレス空間はプロセスに関連し、明示的に区画化（PGAS）
 自プロセスに関連した区画は、CPU命令でもアクセス可能► メモリ管理

2017/4/28

静的メモリ、動的メモリ
エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

7

ACPの基本性能►

Tofu (Fujitsu FX10)

レイテンシ

転送レート

►

InfiniBand (Fujitsu CX400)

レイテンシ

転送レート

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

8

初期化時のメモリ使用量
80000
acp

70000

Memory usage (KB)

mvapich2-2.2b
60000

openmpi2.0.0rc1

50000

openmpi1.10.2

40000
30000
20000
10000

024

81632
64128
# of processes

2565121024

ACPは既存のMPI実装に対して「初期化時のメモリ使用量が十分に少ない」► MVAPICHは初期化時に、一定以上の接続資源を使用しない最適化（抑制？）を行なっている►

2017/4/28

ACPで同様の実装を行えば、さらなる省メモリ化が可能。
エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

9通信時間（Non-Aggregateモード）
put
1000
acp

acp

mvapich2.2-2b

mvapich2.2-2b

openmpi-2.0.0rc1

101

Laytency (usec)

Laytency (ussec)

1000

100

get

100

openmpi2.0.0rc1

101

Message sizse (Bytes)

Message size (Bytes)
測定環境: Fujitsu PRIMERGY CX400

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

10実効通信帯域幅（Non-Aggregateモード）
putget
7000

6000

acp

5000

mvapich2.2-2b4000

openmpi2.0.0rc1

Bandwidth (MB/sec)

Bandwidth (MB/sec)

7000

3000
2000
1000
06000

acp

5000

mvapich2.2-2b

4000

openmpi2.0.0rc1

3000
2000
1000
0

Message size (Bytes)

Message size (Bytes)

既存のMPIライブラリと同等の通信性能。
► 小及び大メッセージサイズで性能改善の余地あり。
►

測定環境: Fujitsu PRIMERGY CX400
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

11通信性能（Aggregateモード）
putget1000
acp
mvapich2.2-2b
openmpi-2.0.0rc1

acp
mvapich2.2-2b100

Laytency (ussec)

Laytency (ussec)

100

1000

1010.1

opnempi2.0.0rc1

101

Message size (Bytes)►0.1

Message size (Bytes)

ACPはputは比較的高速、getは性能改善余地がある。
測定環境: Fujitsu PRIMERGY CX400

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

12メモリ使用量の推移► getrusage 関数により通信ライブラリのメモリ使用量の推移を調査► 対象プログラム


2 プロセス/2ノードで Put を実行するプログラム


2 のべき乗のメッセージサイズ (1Bから4MB) を通信

aggregate、 non-aggregate の 2 モード


各メッセージサイズで 1000 回から10 回転送

aggregateはまとめて突き放し通信を発行、non-aggregate は通信毎完了を実施

MPI はパッシブモード (MPI_Win_lock/MPI_Win_unlock)► 実験環境：CX400

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

13

0"

2017/4/28
3000"
func@on"2000"

12000"

10000"

8000"
func>on"6000"
total"

2000"
memory&usage&(KB)

7000"

acp

mvapich2-2.2b

14000"

0"main"
mpi_init"
malloc"memset"mpi_win_create"
mpi_barrier"mpi_win_lock"
mpi_put"
mpi_win_flush"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_put"
mpi_win_unlock"
mpi_win_free"
mpi_finalize"

Memory'usage'(KB)

4000"

Memory'usage'(KB)main"
acp_init"
acp_rank"
acp_query_starter_ga"acp_query_starter_ga"
acp_query_starter_ga"
acp_query_adress"
malloc"memset"acp_register_memory"acp_query_ga"
acp_sync"
acp_copy"
acp_complete"acp_copy"
acp_complete"acp_sync"
acp_sync"
acp_com"
acp_sync"
acp_finalize"

0"

main"
mpi_init"
malloc"memset"mpi_win_create"
mpi_barrier"mpi_win_lock"
mpi_put"
mpi_win_flush"
mpi_put"
mpi_put"
mpi_win_unlock"
mpi_win_free"
mpi_finalize"

Memory'Usage''(KB)

メモリ使用量の推移（Aggregate モード）
openmpi-1.10.1
openmpi21.10.1:&aggregate&

6000"

5000"

► ACPでは通信実行時のメ

1000"
total"

openmpi-2.0.0rc

20000"

モリ使用量の増加はない► 既存のMPIライブラリは突き放し通信時に通信バッファを生成し、メモリ使用量が増加

18000"

16000"
60000"

50000"
40000"
30000"

func?on"10000"
total"

4000"

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験
14

12000"10000"

8000"
func>on"6000"

2017/4/28
total"

4000"

10000"

2000"

5000"

0"

0"
mpi_finalize"

16000"

mpi_win_free"

18000"

mpi_put"

mvapich2-2.2b

mpi_win_unlock"0"

mpi_put"

1000"

mpi_put"

total"

mpi_win_flush"2000"

mpi_barrier"func@on"

mpi_win_lock"3000"

mpi_win_create"

20000"

malloc"4000"

memset"25000"

mpi_init"

5000"

main"
mpi_init"
malloc"memset"win_create"
mpi_barrier"
win_lock"
mpi_put"
win_flush"
mpi_put"1B"
mpi_put"4KB"
win_flush"
mpi_put"256KB"
win_unlock"
win_free"
finalize"

acp

main"

Memory'usage'(KB)

6000"

Memory'usage'(KB)main"
acp_init"
acp_rank"
acp_query_starter_ga"
acp_query_starter_ga"
acp_query_starter_ga"
acp_query_adress"
malloc"memset"acp_register_memory"acp_query_ga"
acp_sync"
acp_copy"
acp_complete"acp_copy"
acp_complete"acp_sync"
acp_sync"
acp_copy"
acp_complete"acp_sync"
acp_finalize"

0"

main"
mpi_init"
malloc"memset"mpi_win_create"
mpi_barrier"mpi_win_lock"
mpi_put"
mpi_win_flush"
mpi_put"
mpi_put"
mpi_win_unlock"
mpi_win_free"
mpi_finalize"

Memory'Usage'(KB)

メモリ使用量の推移（Non-aggregateモード）

7000"

openmpi-1.10.1

35000"

30000"

15000"

10000"
funcAon"5000"
total"

openmpi-2.0.0rc

40000"

15000"► 毎回通信の完了確認を実施する場合は、通信バッファを作成しない⇒ 既存のMPIライブラリもメモリ使用量が増加しない。

14000"

35000"
30000"

25000"

20000"

func>on"total"

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験
15

ACPの基本メモリ使用量
ランク数に比例

InfiniBand

Tofu/Tofu2

UDP

359MiB@100万プロセス

66MiB@100万プロセス

31MiB@100万プロセス

メモリ登録数に比例
その他（固定分）

memory consumption (MiB)

合計

9KiB@128メモリ登録
10MiB

512KiB

3MiB

約369MiB

約67MiB

約34MiBACP Basic Layerのメモリ消費量
4,000
3,000
2,000
1,000
0
0.0E+01.0E+6

2.0E+6

3.0E+6

4.0E+6

5.0E+66.0E+6

7.0E+6

8.0E+69.0E+6

1.0E+7# of processes
Infiniband

2017/4/28

Tofu

UDP

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

16

本ベンチマーク課題における性能評価► 粒子系シミュレーション：

不規則通信の低オーバヘッド化► Stencil計算：


隣接通信の隠蔽► マスターワーカプログラム：


2017/4/28

ACP + MPI実行によるメモリ消費削減

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

17粒子系シミュレーション
 粒子系シミュレーション
プロセ
ス14z

1620

171819152122

シミュレーション時刻
t1 の領域分割

 粒子移動に伴う粒子データ通信

 領域分割に伴う粒子データ通信

移動により担当プロセスが変わった粒子のデータを通信領域分割により担当プロセスが変わった粒子のデータを通信

プロセ
ス13

17

14

yx

プロセ
ス13

粒子の移動により計算時間が変化
プロセス
13

16

プロセ
ス13

20

17

プロセス
13

17
14
15

18
192122シミュレーション時刻
t2 の領域分割

14

受信側は送信プロセスを予測できない ⇒ 片側通信に適している
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

18粒子データ通信の片側通信による実装
受信プロセス群

送信プロセス
送信バッファ

送信粒子数 通信先位置
3 1➀ get-accumulate

受信バッファ

受信粒子数
4

受信バッファ

受信粒子数
2② put3 1

4 273

3 14 273

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

19

ACPによる実装とMPIの性能比較
 重力N体シミュレーションにおける粒子データ通信

Communication time (ms)two all-to-all's
p2p + reduce
synchronous p2p + non-blocking barrier
0.625

particle movementt = 0.25

0.5
0.4
0.3

reduce-scatter + p2p
RMA
ACP
domain decompositiont = 0.25

20

MPI RMAによる実装
よりも2倍程度高速

15100.2
50.1
0016642561024

Number of processes

16642561024

Number of processes

測定環境: Fujitsu PRIMERGY CX400 MPI: Intel MPI 5.1.3
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

20

２次元 Stencil計算► X方向をプロセスに分割し、隣接領域を相互に交換 ⇒ 隣接通信

袖領域

proc 0proc 2

proc 1

proc 3

proc 4隣接通信
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

21

並列コード（MPI）
calc outercalc innerp0► 隣接通信と内部の計算

p1

p2

を並行して実行// start halo exchange
MPI_Isend to left
MPI_Isend to right
MPI_Irecv from left
MPI_Irecv from right

MPI_Isend、MPI_Irecv
による非ブロッキング通信

sbuf0

sbuf1

sbuf0

sbuf1

pack

// calc innerfor (bj < bm)for (bi < bn)for (j < (bj+1)*block_size)for (i < (bi+1)*block_size)
calc a[j*n + i]// wait halo exchange
MPI_Waitall

rbuf0

rbuf1

rbuf0

rbuf1

halo exchange

2017/4/28// packfor (j<m){sbuf0[j] = a[j*n];sbuf1[j] = a[j*n+n-1];}// calc outerfor (j < m-1){
calc a[j*n] with rbuf0
calc a[j*n+n-1] with rbuf1}

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

22

並列コード（ACP）
p0

sbuf0

sbuf1

sbuf0

sbuf1

// calc inner
...

rbuf0

rbuf1

rbuf1

rbuf0

put

前のステップのcalc outer終了 ＝ rbufを上書き可// wait halo exchange
while ((!ack0<ctr) || (!ack1<ctr));

袖領域の上書き（put）:

readyctr

2017/4/28

ack0

ack1

ack0
ctr

// calc outer...
// send ready
acp_copy(left_ready1_ga, ctr_ga);
acp_copy(right_ready0_ga, ctr_ga);

ready0

通信相手に完了を通知

ready1

ack

ready0

書換え完了通知（ack）:

ack1

袖領域を相手の rbufに書込む

ready1// start halo exchange
ctr++;
while ((ready0<ctr-1)||(!ready1<ctr-1));h0 = acp_copy(left_rbuf1_ga, sbuf0_ga);
acp_copy(left_ack1_ga, ctr_ga, h0);h1 = acp_copy(right_rbuf0_ga, sbuf1_ga);
acp_copy(right_ack0_ga, ctr_ga, h1);

袖領域の上書き許可（ready）:
p2// pack...

► 片側通信と計算を並行実行

p1

ctr

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

23通信時間 (n=1000, 64procs)

MPIに対し、ACPの高い通信隠蔽効果を確認

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

24

ACPを用いた複数MPIプログラムの協調実行
ACP

タスク起動
プロセスacprun(ssh)

MPI(+ACP)

mpirun0,111,1200,2

1
pc01,pc02

pc12,pc13

3,41,33,5Process(MPI-rank, ACP-rank)

pc03~pc07

4,60,71,82,93,10MPI(+ACP)
pc08~pc11

MPI(+ACP)：
ACP を含む MPI プログラム• 1 ACP のみのプロセス：プロセス数 2• 3 MPI(+ACP) プロセスグループ: 各プロセス数 5,4,2• 利用可能なノード： pc01 ~ pc13 (ジョブスケジューラ等から取得)• 複数 MPI プロセスグループを ACP により接続• 既存 MPI プログラムを活用しつつ，超高並列時の省メモリ性を確保• MPI-Split や MPI-Spawn，連成計算を対象• mpirun と acprun を統合し起動する macprun コマンドを開発
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

25

メモリ消費量比較実験
ACP/MPI
全体マスタ
MPI

ACP: Put/Get,
MPI: Send/Recv
MPI

各 MPI プロセスグループは同じプロセス数

MPI
ワーカーマスタ

...

...

````

...

...

````````````

Bcast/Reduce

各プロセスの最大メモリ消費量• 超並列OpenFMO を模したプログラム• ３種類の実装• ACP + MPI 実装• MPI-Spawn 実装• MPI-Split 実装• メモリ消費量

メモリ消費量（KB）

ACP+MPI < MPI-Spawn < MPI-Split• 主要メモリ利用箇所

ACP+MPI が最小• ACP+MPI• ワーカマスタ： MPI_Init, MPI_Bcast 関数が 36%, 41% を消費• MPI-Spawn
全体マスタ

ワーカマスタ• 全体マスタ： MPI_Spawn 関数が 91% を消費• MPI-Split
全プロセス数：1025
ワーカグループ内プロセス数: 128
ワーカグループ数：8
2017/4/28• 全体マスタ，ワーカマスタ：
両プロセスにおいて MPI_Init, MPI_Split 関数が 71%, 26% を消費

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

26

演算サーバと外部サーバの連携実行

2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

27

九州大学情報基盤研究開発センターの可視化ノード
インターネット

特別な可視化ノード構成
高速 IB 網高速CPU + 大容量メモリ，１ノード１ユーザ►

Intel Xeon 8core x 2, 256GB RAM
 可視化，ポストプロセッシング向け►バックエンドとの結合
IB による直接結合
 高速ファイルシステムによるファイル共有►

バックエンドプログラムと可視化ノードプログラムを高速 IB 網で接続可能
2017/4/28

インターネットから直接ログイン

高速なポストプロセッシング

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

28

バックエンドと可視化ノードの連携方法〜現状の実ユーザ利用方法〜► 逐次的な処理

プリ処理 ⇒ バックエンドでの計算 ⇒ ポスト処理
 ファイル経由によるバックエンド-フロントエンド間データ転送例） バックエンドでの出力ファイルを可視化ソフトウェア等でポスト処理
インターネット

バックエンド...

可視化ノードバックエンド外部コンピュータ
高速 IB 網バックエンドプログラムと可視化ノードプログラムとの直接結合はされていない

主原因
バックエンド内でプロセス起動を行うコマンドでは，通常フロントエンド上にプロセス起動が出来ない⇒バックエンド-フロントエンド間の直接 MPI 接続は困難
バックエンドからのフロントエンドプロセス起動機構を利用せず，既存プログラムに簡単に組み込み可能なデータ送信方法が必要
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

29

nstdio ライブラリの提供► 広範なネットワークをサポート


まず，TCP/IP をベースに開発 （socket を利用）

TCP と同等の信頼性を担保

ストリームデータ転送としての通信順序保証

多くの環境に接続可能• IP アドレスとポート番号のみ• バックエンド - フロントエンド間• スパコン - 外部コンピュータ間・デスクサイド等► インターフェース

シンプル第一C 言語 stdio.h に似たインターフェース



既存 MPI プログラムと同時に利用可能

シンプル• nopen, nread, nwrite 関数► 九大基盤センター南里グループにて開発中
CREST ポストペタプロジェクトの成果も利用

現状で，九大計算機ネットワークの IPoIB を利用可能



Github に今後公開

ネットワークの世界での Hello World プログラムとして利用可能
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

30

バックエンドと可視化サーバとの直接データ転送例
バックエンド...

可視化ノードバックエンドIB

IP: 172.30.120.11 (tatara-vh03)
Port: 30000 (例)nstdio 内接続処理
バックエンド側プログラム
可視化ノードへ connect
IP: 172.30.120.11
Port: 30000

可視化ノード側プログラム
TCP/IP
接続

計算ノードからの通信を accept
IP: 0.0.0.0
Port: 30000

九大センター上 にて直接データ転送が可能であることを確認• 双方向通信も可能
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

31バックエンド⇔フロントエンド⇔外部コンピュータ間の直接データ転送
バックエンドIB...

ssh ポートフォワーディング

可視化ノードバックエンドnstdio 内接続処理

IP: 133.5.4.42
Port: 20000
IP: localhost
Port: 20000

可視化ノード内プログラム
バックエンドとの通信接続

インターネット

外部からの通信を accept
IP: 0.0.0.0
Port: 20000

外部コンピュータ
バックエンド• インタラクティブ環境• ビューワ
• IoT 環境
超スマート社会との連携

TCP/IP
接続

外部プログラム
可視化ノードへ connect
IP: 127.0.0.1
Port: 20000

バックエンドと外部コンピュータを可視化サーバを介して接続確認• ポストプロセッシング後データを直接外部に送信可能• 双方向通信も可能
2017/4/28

エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

32

まとめ
► エクサスケール向け通信ライブラリ ACP (Advanced CommunicationPrimitives) の性能評価


ACPの紹介と基本性能

本ベンチマーク課題における実験結果


粒子系シミュレーションの不規則通信の低オーバヘッド化

Stencil計算の隣接通信の隠蔽



ACPを用いた複数MPIプログラムの省メモリ協調実行► 演算サーバと外部サーバの連携実行

2017/4/28

スパコンの演算結果を手元のマシンでリアルタイムに処理
エクサスケール向け通信ライブラリACPの性能評価と高度利用技術の実証実験

33