ペタスケールシステムを使いこなすプログラミング環境を目指して

理化学研究所 計算科学研究機構(AICS)
プログラミング環境チーム チーム・リーダ
佐藤 三久

1

AICS プログラミング環境研究チームの研究概要
プログラミングモデルおよび言語はマシンとプログラマをつなぐ要であることを踏まえ、次世代スパコ
プログラミングモデルおよび言語はマシンとプログラマをつなぐ要であることを踏まえ、次世代スパコンの数十万を超える並列性を使いこなす現実的な言語を提供し生産性の向上に貢献するとともに、ンの数十万を超える並列性を使いこなす現実的な言語を提供し生産性の向上に貢献するとともに、これからのエクサスケールに向かうための基礎となるモデル・言語の研究を推進する
これからのエクサスケールに向かうための基礎となるモデル・言語の研究を推進する
アプリケーションユーザと性能について議論する仕組み

性能解析
ワークショップ

数万並列の性能解析のためのツール環境の開発
アプリユーザが使える実用的な言語・環境の確立

アプリケーションユーザ

XcalableMPの改良・普及

エクサスケール
コンピューティング

次世代スパコンペタスケール最新のプログラミング言語研究に基づくプログラミングモデルの研究

エクサスケール
システムの研究

並列オブジェクト指向フレームワーク、メニーコア・演算加速機構、Fault Resilience

AICS プログラミング環境研究チームの研究概要
大規模な並列プログラムに対応するプログラミング環境ソフトウェア（性能解析ツールなど）を開発します。

新しい並列プログラミン
グ言語XcalableMPの研究開発・普及活動を行います。

現在広く用いられている方法に比べ、簡単に並列計算機の性能を引き出すことができます。

Pro g ram m in g
En vir on m e n t
Softw arePara lle lPr og ram m in g
Lan g u a g e

京コンピュータ（ペタスケール）を超える、プログラミング環境をエクサスケールのための新しい研究します。

H ig hPer for m a nce
Com p uting
Env iron m ent

Ex asca leProg ra m m in g

これからのエクサスケー
ル・コンピューティングの実現を目指します3

HPC並列プログラミング言語の必要性


現状と課題
並列プログラムの大半はMPI通信ライブラリによるプログラミング 生産性が悪く、並列化のためのコストが高い。
 並列プログラミングの教育のための簡便で標準的な言語がない（MPIでの教育にとどまっている）
 研究室のPCクラスタから、センター、ペタコンまでに到るスケーラブルかつポータブルな並列プログラミング言語が求められている

Current Problem ?!



既存言語を指示文により拡張し、これからの大規模並列システム（分散メモリシステムと共有メモリノード）でのプログラミングを助け、生産性を向上させる並列プログラミング言語を開発

int array[YMAX][XMAX];
main (int arg c, ch ar**arg v){
int i,j,res,temp_res, d x,llimit,ulim it,size,rank;
MPI_Init(argc, argv);
MPI_Comm_rank(MPI_COMM_WORL D, &rank);
MPI_Comm_size(MPI_C OMM_WORLD, &size);dx = YMAX/size;
llimit = ran k * d x;if(ran k != (size - 1)) ulimit = llimit + d x;
else ulimit = YMAX;
tem p_res = 0;
for(i = llimit; i < ulimit; i++)for(j = 0; j < 10; j++ ){array[i][j] = fun c(i, j);
tem p_res += array[i][j];}MPI_Allred uce(&tem p_res, &res, 1, MPI_INT , MPI_SUM, MPI_COMM_WORL D);
MPI_Finalize();}

We need better solutions!!
#pragma xmp template T[10]#pragma xmp distributed T[block]

いまのプログラムに指示文を加えるだけだから、簡単！性
能チューニングも可能、…
add to the serial code :main(){
どこでも使えるから安心、並incremental parallelization
int i, j, res;
res = 0;
列プログラミングも習得にもお#pragma xmp loop on T[i] reduction(+:res)勧め！
for(i = 0; i < 10; i++)data distribution

int array[10][10];#pragma xmp aligned array[i][*] to T[i]for(j = 0; j < 10; j++){array[i][j] = func(i, j);
res += array[i][j];}E-scienceプロジェクトで開発
 計算科学研究機構で、実用化、普及を目指す。


MPIしか、使えるものがない
ＭＰＩの並列プログラムはむ
ずかしい… いっぱい書き換
えないといけないし、時間がかかる、デバックもむずかし
いし、…

}

work sharing and datasynchronization

HPC並列プログラミング言語XcalableMP
目標：既存言語を指示文により拡張し、これからの大規模並列システム（分散メモリシステムと共有メモリノード）でのプログラミングを助け、生産性を向上させる並列プログラ
ミング言語を設計・開発する

並列言語 XcalableMPの概要





XcalableMP仕様策定ワーキンググループを組織し、言語仕様を策定
ベース言語（C, Fortran95)を指示文で並列拡張
グローバルビューでは、データ並列プログラミングモデルとワークシェアによって、典型的な並列化をサポート
通信モデルを明確化して、performance-awareな並列化を促進
ローカルビューとしてPGAS(Partitioned Global Address Space)を提供

Possiblity of Perform ance tuning

int array[YMAX][XMAX];

XcalableMP

MPI
PGAS

main(){
int i, j, res;
res = 0;chapelHPF
Automaticparallelization#pragma xmp nodes p(4)#pragma xmp template t(YMAX)#pragma xmp distribute t(block) on p
#pragma xmp align array[i][*] to t(i)Programming cost

data distribution

add to the serial code : incremental parallelization#pragma xmp loop on t(i) reduction(+:res)for(i = 0; i < 10; i++)for(j = 0; j < 10; j++){work sharing and data synchronizationarray[i][j] = func(i, j);
res += array[i][j];}}XcalableMP

http://www.xcalablemp.org/

XcalableMP : directive-based language eXtension
for Scalable and performance-tunable Parallel Programming

基本の実行モデルはSPMDモデル。
同時に、同じプログラムを書くノードで実行

node0

node1

node2

Duplicated execution

既存の言語をベースに、指示文で言語を拡張。
directives
書き換えと教育のコストを低減
Comm, sync and work-sharing
“global view”では、データ並列での典型的な並列化をサポート。OpenMPのように簡単な指示文を使って、逐次コードをできるだけ書き換えずに並列化できるようにする。
“local view”では、 CAF-like PGAS (Partitioned Global Address Space) 機能をサポート。

通信と同期操作については、明示的に行う。すべての通信・同期は指示文で行われることとし、性能チューニングをやりやすくする。

柔軟性と拡張性のために、実行モデルをMPIが混在できるようにし、チューニングされたMPIライブラリを利用可能にする。

マルチコアあるいはＳＭＰクラスタ向けには、OpenMPとの混在のプログラミングを可能とし、ノード内はOpenMPで記述。
XcalableMPの概要#pragma xmp loop on t(i)for(i=2; i <=10; i++)
Data region to be computedby for loop

array[]
node0

array[]

node1
node2
node3
Reference to assigned toother nodes may causeserror!!




node0
Assign loop iteration
as to compute own data

node1

Communicate data between other nodes#pragma xmp nodes p(*)#pragma xmp template T(0:15)#pragma xmp distribute T(block) on p
#pragma xmp align array[i] with T(i)• データ分散の記述• 並列ループでのデータアクセ
スの制御• 大域のイメージでのデータの移動(gmove)• Coarrayによるput/get

node2
node3
distributed array!$xmp nodes p(*)!$xmp template t(N)!$xmp distribute t(block) to p
real A(N,N),B(N,N),C(N,N)!$xmp align A(i,*), B(i,*),C(*,i) with t(i)Anode
1A(1) = B(20)// it may cause error!$xmp gmove
A(1:N-2,:) = B(2:N-1,:) // shift operation!$xmp gmove
C(:,:) = A(:,:)// all-to-all!$xmp gmove out
X(1:10) = B(1:10,1) // done by put operation
XMP projectnode
2Bnode
3node
1node4Cnode1
node2
node3
node4

node2node3node4

XcalableMP: 開発の状況

XMPコンパイラの開発・評価






180
XMP(without histgram)
XMP(with histgram)

600

NPBのXMPベンチマークの作成
SC10 HPCC Class2 で今年も、
Honorable Mention
性能チューニングツール（scalasca）への組み込み

プログラミングモデルの検討

IO, マルチコア、GPGPUMPIライブラリのインタフェース

120

MPI

400
200
0

60

0
1

2

4816

1

Number of Node

24816

Number of Node

NPB CGの結果• 2次元分割による並列化• ＭＰＩと同等

T2K Tsukuba System

プログラミング環境の整備




800

XcalableMP ベンチマークと評価

C版のXMPコンパイラのリリース(Ver.
0.5)
Fortran版は現在開発中（少々遅れ気味）

PC Cluster

Mop/s



T2K Tsukuba System

言語検討委員会にて月１回のMeetingとMLで議論
Mop/s



NPB ISの結果

PC Cluster
2500

4000

XMP(1d)XMP(2d)
MPI

3000
2000

2000

Mop/s

XcalableMPの仕様の検討

Mop/s



• Coarrayを用いた記述• ＭＰＩと同等

1500
1000

1000

500

00
1

24816

Number of Node

1248

Number of Node

16

AICS プログラミング環境研究チーム：３つの基本方針
①我が国発の実用的な並列プログラミング言語の研究開発・普及を目指す。


②計算科学アプリケーション開発と協働するプログラミング環境ソフトウェアの開発を行う。


現在開発を進めているXcalableMPを実際のアプリケーションに適用し、実用的な観点からの高度化を図り、次世代スパコンを利用する並列アプリケーション開発の生産性を向上させるとともに、我が国発の実用的な並列プログラミング言語として、国際的な普及を図る。

性能解析のためのワークショップを定期的に開催
数十万並列規模のプログラムに対応する性能解析環境ツールを開発、実際の計算科学アプリケーションをアプリケーション開発者とともに性能解析を進める協働関係を構築③エクサスケール・コンピューティングを目指した並列プログラミング環境の研究を進める。
並列オブジェクト指向言語、DSL (Domain Specific Lang.) などの計算機科学の先端的な研究成果を取り入れつつ、新規の言語を設計していくアプローチ
 これからのエクサスケールシステムのアーキテクチャの検討に、プログラミングモデ
ルからの示唆を与える


おわりに


並列プログラミング言語研究のあり方について







アプリケーションユーザに実際に使ってもらえるものを作るためには、単独のグループによる「研究」ではなく、コミュニティで作るものでなくてはならない（むしろ、「規格化活動」に近い）使ってもらうためには、少なくとも１０年に渡って開発体制が維持されることが必要（大学では難しい、機構でやるべきこと！）言語の設計については、これまでの成果（反省）が反映されるべき同時に、エクサスケールのアーキテクチャを見据えた、これからのプログラミン
グを牽引する言語・モデルの研究も必要（若手を活用！）

アプリケーション開発とともに実用的な研究を進める体制の重要性

HPCの研究は、アプリに使われてこそ価値があるワークショップ（研究発表の「学会」ではない）などの仕組みを整備するべき
学際的な研究体制の構築は、機構の重要なポイント！