（並列プログラミング言語XcalableMP規格部会）「XMP規格部会の活動報告」
XcalableMP規格部会長
朴 泰祐（筑波大学 計算科学研究センター）
副部会長
岩下 英俊（富士通） 、林 康晴（日本電気）

2019/12/13

PCCC19シンポジウム

1XcalableMP• 分散メモリ環境を対象とした指示文ベースの並列言語• 次世代並列プログラミング言語検討委員会 → 当部会において仕様を検討、提案。
• 2つの並列プログラミングモデルをサポート– グローバルビューモデルによる定型的な並列化– ローカルビューモデルによる自由度の高い並列化• MPIとの inter-operability• OpenACCとのinter-operabitliyも予定（一部実装）• 一般的なPCクラスタの他、京コンピュータで稼働、富岳でも稼働予定

2019/12/13

PCCC19シンポジウム

2

並列プログラミング言語XcalableMP規格部会 2019年度活動報告•体制
部会長： 朴泰祐（筑波大学)
副部会長：
岩下 英俊（富士通） 、林 康晴（日本電気）• 課題– 魅力的なプログラミング環境： 使いやすさだけでなく性能も– XcalableMP 2.0仕様の継続検討と実アプリケーションを想定した性能・機能検証– XcalableACC (XACC)に関し各種アクセラレータデバイスへの対応を検討• 活動
1．XMP規格部会
3回：05/10, 10/07, 2020/01/24（予定）• タスク処理機能強化• コンパイラを用いないAPI関数の規格案• OpenACCとのinter-operability、multi-device対応の検討
2．第7回XcalableMPワークショップ– 2019/11/05@筑波大学文京校舎（共催：筑波大学計算科学研究センター）– 7件の講演、パネル「タスク並列プログラミングモデルに期待するもの」– http://xcalablemp.org/ja/workshop7.html
3. アウトリーチ活動• XMP本の出版活動• XMPに関するQA窓口：support@xcalablemp.org• 規格部会の公開

3

XcalableMPの現況• PCクラスタコンソーシアムで規格を議論– 2018/10 Version 1.4仕様を公開。
• Combined directive• Tasklet機能 (draft、V2.0に向けて）– 2015年より、次期仕様「XMP2.0」の検討を開始。
• PGAS + Multitasking for Multicore• Code transformation for Optimization• XcalableACC for Accelerator• 理研・筑波大で、レファレンス実装– Omni XMP コンパイラ

2019/12/13

www.xcalablemp.org
omni-compiler.org

PCCC19シンポジウム

4Omni XcalableMP

.....
.....

XMPソース

フロントエンド• 理研AICSと筑波大で開発中のXMP処理系– XMP/C– XMP/Fortran

.....
.....

中間表現
(XcodeML)

トランスレータ• オープンソース• トランスレータ + ランタイム(MPIベース)• OpenACC、XcalableACC対応

.....
.....

中間表現
(XcodeML)

Omni XcalableMP
バックエンド(デコンパイラ)
XMPランタイム
.....
.....

C/Fortran
ソース

MPIライブラリ

ネイティブ
コンパイラ

実行形式

2019/12/13

PCCC19シンポジウム

5Data Distibution Using Template• Template– virtual array representing data(index) space– array distribution, work-sharing must be done using templateExample)
0double array[100];#pragma xmp nodes p(4)declare node set#pragma xmp template t(0:99)

declare template

0p(1)

25

distribute templatep(2)#pragma align array[i] with t(i)0array[]2019/12/13

100

template t(0:99)#pragma xmp distribute t(BLOCK) on p
0100p(1)2550p(3)75p(4)

100

distribute array : owner of t(i) has a[i]p(2)50p(3)

PCCC19シンポジウム

75p(4)

100

6

Data Synchronization of Array(shadow)• Shadow Region– in XMP, memory access is always local– duplicated overlapped data distributed onto other nodes– data synchronization: reflect directive
01

2

34

5678910 1112 13 14 15a[]#pragma xmp shadow a[1:1]

declare shadow

NODE1
NODE2
NODE3
NODE4
#pragma xmp reflect a
2019/12/13

synchronize shadow
PCCC19シンポジウム

7Data Synchronization of Array(gather)pgather array data (collect entire elements)

p#pragma xmp gather(var=list)#pragma xmp gather(var=array)

array[]
process0
process1
process2
process3
all elements of the array get correct data
2019/12/13

PCCC19シンポジウム

8Put operation in taskletlput_ready clause: indicates that the specified data may be written by theassociated PUT operationllThis clause has the dependence-type out for the specified data on a node since its values areoverwritten by the remote node.

put clause: indicates that the PUT operation may be performed in the associatedstructured block.
lAt the beginning of the block, the task waits to receive the post notification with the tag by theput_ready clause to indicates that the data is exposed in the target node for the PUT operations.

• When output dependencies for the data are satisf
ied before executing the block, the clause expose
s the data for the PUT operation from the specifie
d set of nodes by sending the post notifications tothese nodes, starting the PUT operations eventua
lly in remote nodes. Then, it waits until remote op
erations are done. When the task receives the completion notification of the PUT operation, the block is immediately scheduled.
• When the post notification is received, the task isscheduled to execute the calculation and PUT ope
ration in the block. When the execution of the blo
ck is finished, the data written by the PUT operati
on is flushed and the completion notification is se
nt to the node matched by the tag.

#pragma xmp nodes P(2)int A:[*], B, C, D, tag;

Node 1in(A)Node 2in(A)#pragma xmp tasklet in(A) out(B) on P(1)B = A;/* taskA */startpost#pragma xmp tasklet in(A) out(C) on P(1)C = A;/* taskB */completeout(A)#pragma xmp tasklet out(A) put(tag) on P(2)A:[1] = 1; /* taskC */waitin(A)#pragma xmp tasklet in(A) out(D) ¥put_ready(A, P(1), tag) on P(1)D = A;/* taskD */out(A)taskA

puttaskB

taskC

taskD

9

XcalableACC (XACC)の基本的な考え⽅

XcalableACC = XcalableMP + OpenACC
l XMPプログラム中にOpenACCのdirective記述を許す
l XMPが提供する分散メモリ並列処理 (PGAS)に従い、各ノードに分散された配列イメージを対象に、OpenACCのデータ移動・演算オフローディングを⾏う。

l OpenACC + MPI で記述する必要があった並列演算加速（GPUコンピューティング）をすっきりした形で記述でき、⼤規模並列化にも適している。

l XMP directiveと OpenACC directive は基本的に直交関係。

PCCC19シンポジウム

10Processing model of XACC

Array/Work#pragma acc device d = nvidia(0:3)

Distribution among nodes#0#1#pragma xmp reflect_init (a) deviceComm.
between CPUs

CPU

Distribution among ACCs.

ACC

Direct Comm.
between ACCs

11
PCCC19シンポジウム#pragma xmp loop (i) on t(i)for (int i = 0; i < 100; i++){#pragma acc kernels loop on_device(d)for (int j = 0; j < 100; j++){a[i][j] = ...
}}#pragma xmp reflect_do (a)XcalableMP規格部会の今後の方向性• より広い範囲に知ってもらい使ってもらう– アプリケーション例を広げ、使いやすさを知ってもらう– 講習会の機会を増やす– 規格部会を閉じられたものにせず広く知ってもらい参加してもらう• 新しいアーキテクチャへの対応– Many-coreアーキテクチャ対応と最適化を進め、ポスト京での実利用を目指す– XcalableACCを規格化し、GPUのような演算加速デバイスへの対応を進める⇨ OpenACCだけに限らない可能性も？

• 「規格化」と「研究」の両立– 広めるための規格化を進めつつ、実験的要素を取り込みさらに発展させたい• 問い合わせ窓口の設置– support@xcalablemp.org -> Q&A

2019/12/13

PCCC19シンポジウム

12

並列プログラミング言語XMP規格部会 2020年度活動計画
••

•

体制
部会長： 朴泰祐（筑波大学)
副部会長：岩下 英俊（富士通） 、林 康晴（日本電気）
課題– 魅力的なプログラミング環境： 使いやすさだけでなく性能も– XcalableMP 2.0仕様の実アプリケーション例の増強– XcalableACC (XACC)のGPU実装仕様の詳細決定とFPGA等への対応の検討及び実装– OpenMPアクセラレータ規格への対応の検討
活動予定– 部会：年３回 （５月、１０月、２月を想定）– 第8回XMPワークショップの開催• 時期：10月末〜11月始めを想定。基盤センターのシンポジウム等との連携も模索。
• 会場費を抑えるため大学（例：筑波大学東京サイト）との共催を検討。
– XMP講習会• 単独ではなく他のイベントとの連続開催を検討– リファレンス実装• v2.0案の性能・機能検証• ベンチマーク・データの収集– 本のプロモーション• XMP本（Springer）が出版されている予定で、これを中心としたアウトリーチ活動を活発化
13
2019/12/13

PCCC19シンポジウム

XcalableMP規格部会は開かれています
ぜひご参加下さい︕
問い合わせ︓support@xcalablemp.org

PCCC19シンポジウム

14