RI
STニュースNo．
６２（２０１７）高性能並列プログラミング言語Xcalable
MPの紹介

Introduc
tio
nofaPGASparallelprogrammi
ngl
anguageXcalableMP
一般財団法人高度情報科学技術研究機構
原山 卓也、井上 孝洋、手島 正吾
国立研究開発法人理化学研究所計算科学研究機構
村井均

現在の京を中核とするHPCIにおけるスーパーコンピュータやPCクラスタでは、CPUに多くの計算コアを搭載している。今後もこの計算コア数は増大する傾向にあり、ポスト「京」と呼ばれる次世代スーパーコンピュータにおいては、その数はこれまでと比較して膨大なものになることが予想される。このような大規模並列計算機システムで、プログラムの並列化にMPIを用いると、並列化は複雑化し、それに伴いプログラミングコストが高くなり、最終的にはプログラムの生産性や性能が低下するといった問題が発生する。
そこでこのような問題を解決するために、高性能で且つ扱いやすさを目指した新たな並列プロ
グラミング言語として、PGAS言語XcalableMP（XMP）の研究・開発が進められている。本稿
では、XMPの研究・開発の現状について紹介する。
並列プログラミングを可能にするAPI
で、ノ

１．はじめに現在、計算機科学・計算科学分野やHPCード間のデータの送受信やブロードキャスト（HighPerfor
manceComputing）分野では、といった集団通信が数多く用意されている

CPUとしてメニーコアまたはマルチコアとが、その利用にはデータの分散や並列処理を言った複数の計算コアを持つ複数のノードを明示しなければならず、OpenMPによる並列ネットワークにより結合したPCクラスタや化と比べて手間がかかるのが実情である。

大型並列計算機が広く利用されている。この

XMPは、MPIのプログラミングコストの削ような並列計算機でプログラムを効率よく利減とOpenMPと同等の生産性の実現を目的用するため、プログラムを並列化する手法ととした新たな並列プログラミング言語であしては、メニーコアCPUに対するスレッド並り、今後の大規模並列計算機システムにおけ列、ノード間に対するプロセス並列があり、る並列プログラム開発の生産性の向上に大き近年ではこれらを組合せたハイブリッド並列く寄与することが十分に期待される。本稿でが多く利用されている。プログラミング言語

は、研究・開発が進められているこのXMPにとしては、スレッド並列ではOpenMPが用いついて、その現状を紹介する。

ら れ、プ ロ セ ス 並 列 で はMe
ssagePassing
Interface（MPI）が一般的に用いられる。

２．XcalableMPについて

OpenMPは共有メモリ型マシンで並列プロ

Xc
alableMP（XMP）は、分散メモリ環境

グ ラ ミ ン グ を 可 能 に す るAPI
で、指 示 文を抽象化し、論理的に単一アドレス空間とし（ディレクティブ）を挿入するだけで並列化がて 扱 う と い っ たPGAS（PartitionedGlobal

行える。一方、MPIは分散メモリ型マシンでAddr
essSpace）機能に基づいて開発された
－21－

RI
STニュースNo．
６２（２０１７）新しい並列プログラミング言語である。分散４．プログラミングモデルについてメモリ環境において、OpenMPのようにMPI

グローバルビューモデルとは異なるシンプルな言語構文と指示文によグローバルビューモデルは、分散メモリ環る 並 列 化 を 目 指 し て い る。ベ ー ス 言 語 は境で、OpenMPのように既存のコードに指Fortr
an言語とC言語となっており、２０１１年示文を挿入することで並列プログラミングを６月に発足したPCクラスタコンソーシアム可能にするものである。

Xcalable
MP規格部会が仕様の策定を行ってこのグローバルビューモデルは、逐次プログラムのイメージから出発して、データを各いる。
XMPの普及促進のため、言語仕様をはじノードに分散し、それに応じた並列化を考えめ、マニュアルや活動内容といった情報がていくプログラミングスタイルに適している。

XcalableMPのWeb
サイト（http://xcalabl
emp.

グローバルビューモデルにおける指示文のorg）を通じて公開されている。

記述は、次のリスト１に示す形式で始まる。

プログラミングモデルには、グローバル
ビュー、ローカルビューと呼ばれる２つの並リスト１．グローバルビューの記述列化モデルを提供している。グローバルビュー モ デ ル で はHi
ghPerformanc
eFortran（HPF）のようなデータ／ワークマッピング指示文による並列化をサポートしており、元の逐次コードに指示文を挿入するだけの手軽グローバルビューモデルにおける指示文にさで並列化を実現している。また、ローカルは、宣言指示文と実行指示文が用意されておビューモデルでは、Fortr
an２００８から導入さり、実行指示文には単独指示文（standaloneれたcoarray機能を取り入れ、MPIの場合とdirective）と指示構文（directiveconstruct）

遜色ない並列化とプログラミングコストの削を構成する指示文がある。単独指示文は同期減を実現している。

指示行などのその行単独で一つの機能を有し、指示構文は次のリスト２に示す形式とな

３．実行モデルとメモリモデルについてり、関連付けられた言語との組合せで一つの実行モデル機能を有する。

XMPの実行モデルは、MPIと同じSi
ngl
eProgram Multi
pleData（SPMD）である。そ

リスト２．グローバルビューの指示構文のため、プログラムは各ノードで同じ処理が行われる。しかし、ノード間のデータの送受信は、MPIと異なり指示文により行われる。

メモリモデル
各ノードは、自身のローカルメモリ上のデータのみにアクセスできる。他のノード上のデータ（リモートデータ）にアクセスする場
合は、XMP指示文またはcoarrayを用いて明示的にノード間の通信を記述する必要がある。

－22－

RI
STニュースNo．
６２（２０１７）

指示文の種類はリスト３ に示すように、デグローバルビューモデルにおいて指示文にータの分散に関するデータマッピング、実行よる並列化を記述した例はリスト４のように処理を割り当てるワークマッピング、通信・なる。

同期の３ 種類があり、それぞれの処理に応じローカルビューモデルた指示文が提供されている。

ローカルビューモデルは、各ノードが行う処理を記述するプログラミングモデルであ

リスト３．指示文の種類

る。MPI
ではデータの分散やその通信の記述をユーザが記述するが、XMPでも同様のプログラミングのスタイルを採用している。
これはデータの局所性やノード間の通信を十分に把握した上でのプログラミングとなるため、その自由度は高くなり、高い性能を引き出 す こ と を 目 的 と し て い る た め で あ る。
XMPではFortr
an２００８のcoarray機能をベースとした言語拡張を提供しており、変数の宣言や代入文を拡張とした構文により、ノード間の通信をMPIと比べて簡単に記述することを可能としている。XMP/
Fortr
anにおいてはFortr
an２００８との互換性が保たれ ている。XMP/Cにおいてはcoarray指示文と言語リスト４．グローバルビューの指示文の記述例

拡張で実装がされている。ノード間のデータの送受信は、片側通信と集団通信を使用することができる。Fortr
an言語とC言語におけるcoarrayの配列宣言と片側通信の記述例を
リスト５ に示す。
リスト５．グローバルビューの指示文の記述例

一方、集団通信には分散データの総和・最大 値・最 小 値 を 求 め るco_sum、co_max、
co_minと い っ た 組 込 み 関 数 が あ り、ま た－23－

RI
STニュースNo．
６２（２０１７）

syncall文といった同期機能が提供されてい想的な共有空間に置かれているように見えるる。また、あるデータをブロードキャストすため、原則として配列要素の特定にノード番るco_broadc
ast関数も提供されている。この号を必要としない。ただし、XMPでは他ノ集団通信co_broadc
ast
関数のFortr
an言語にードのデータの参照は明示的な記述を必要とおける記述例をリスト６に示す。

するため、グローバルビューであっても、ユーザがそのデータが自ノードに配置されているかを把握していなければならない。

リスト６．集団通信co_broadc
ast
関数の記述例

XMPでは、１つのデータに対してグローバルビューとローカルビューの２つの名前を付け、使い分けるための指示文も提供されている＊１。詳細は仕様書を参照されたい。

５．OmniXcalableMPについて
OmniXcalableMP（XMPコンパイラ）は、XMPのcoarray機能に触れる前に、ベース

筑波大学HPCS研究室と理化学研究所計算科となるCo
arrayFortr
an言語に触れてみたい学研究機構（理研AICS）プログラミング環境という人は、Fortr
an２００８規格をサポートし研究チームにより、オープンソースプロジェているベンダーが提供するコンパイラを使用

クトとして開発されているXMPコンパイラするか、またはオープンソースで提供されてのリファレンス実装である。

いるOpenCoarrays（http：//opencoarr
ays.
org）

OmniXcalableMPは、Xcalable
MPをはじめ、Xc
alable
ACC、OpenACCといった指示を参照して欲しい。

文を含むコードを対象としたコンパイラとなっており、OmniCompi
lerProjectのWeb

プログラミングモデルの切替え

サイト（http：//omnicompi
ler.
org）よりダ

プログラミングモデルはユーザが使用するウンロードができる。

アプリケーションの性質によって使い分けることが望ましいが、他の言語モデルにはない

残念ながら現時点ではC++言語には対応しXMPの特徴として、同じ変数に対してグロていないが、近年ではC++言語による科学技ーバルビューモデルとローカルビューモデル

術計算の開発コードも多く見られるため、今の切替えを行うことができることがあげられ後対応する予定である。
XMPコンパイラは、次の条件を満たす一る。
ローカルビューの変数は、宣言された形状般的なLi
nuxクラスタや京コンピュータや地のデータが全てのノードに割り付けられるた

球シミュレータの他、MPIが動作する任意のめ、データを参照するには、変数名と各次元プラットフォームに対応している。各プラッの添字に加えて、ノード番号を指定しなけれトフォームに対応したバイナリは用意されてばならない（ノード番号を省略した場合には、おらず、ユーザがソースファイルからビル自ノードのデータであると見なされる）。一

ド・インストールをする必要がある。

方、グローバルビューの変数は、データは仮＊１ ただし、現時点のOmniXc
alableMPでは、グローバルデータの別名をcoarrayとして宣言する機能は利用できない。
－24－RI
STニュースNo．
６２（２０１７）

リスト９．Confi
gurationSummar
yの出力例

リスト７．インストールに必要な環境

６．XMPの実装と性能評価について
インストールは、Linux利用者であればリ分散メモリ環境を対象とした新しいプログ

スト８の手順に従い比較的簡単に行うことがラミングモデルであるXMPであるが、近年できる。

では更なる研究開発と普及促進のために、既存のプログラムへの実装を行い、その利便性や性能向上についての検証が盛んに行われてリスト８．インストール手順いる。

グローバルビューモデル
グローバルビューモデルの実装は、表１に示すアプリケーションに行われている。指示文による並列化が行われ、オリジナルのMPI
インストールの際の注意点は、ローカル版と実行時間を比較しても遜色ないことが過

ビューモデルの片側通信が行える環境にある去に開催されたワークショップの資料としてかである。

公開されている［１］。

これはconfi
gure
コマンド実行後のConfi
gurat
ionSummaryの 出 力 に よ り 確 認 が で き

表１．グローバルビューモデルを実装したアプリケーション

る。Options
項目のOnesidedがYesになっていれば良く、MPI
ライブラリ環境のバージョ

アプリ名

概要

ンが３以上であれば特に問題はない。また、

I
MPACT３D

３次元Cartesi
an格子による流体コード（核融合研）

RTMコードリバースタイムマイグレーション法による地中探査イメージング（仏Total社）

SCALE

次世代気象気候科学における基盤ライブラリ（理研AICS）

GTCP

核融合シミュレーションコード
（プリンストン大）オプションの指定により、数値計算ライブラ
リBLASを使用する場合は、confi
gureコマンドの引数にオプションwithlibbl
asに静的ライブラリlibbl
as.
aを指定することにより、その機能が有効となる。基本的にはここまでに述べた手順にてインストールは行えるはずであるが，不明な点がある場合は詳しい手順がガイドブックとして公開されている（https://omni
compi
ler.
g
it
books.
io/
guidebook/content/ja/）
ので参照して欲しい。

－25－RI
STニュースNo．
６２（２０１７）

ここで、FI
BERMini
Appとは、アプリケ

ローカルビューモデル
ローカルビューモデルの実装は表２に示すーションとシステムのコデザインのために理FI
BERMini
Appの幾つかのアプリケーショ

研AI
CSにて整備・開発されたツールであり、ンに対して行われ、検証が行われている［４］。

さまざまな分野の実アプリから重要な特徴を
抽 出 し て 作 ら れ た ミ ニ ア プ リ で あ る。

表２．ローカルビューモデルを実装した
アプリケーションFI
BERのWebサ イ ト（http://fiber
miniapp.

アプリ名

概要

FI
BERMini
Appは国内のベンチマークプロ

CCSQCD高エネルギー物理学で用いられる格子量子色力学プログラム

github.
io）にて公開されている。また、このグラムとして性能評価を行う上で大変便利なアプリとなっている。

三次元非定常非圧縮性熱流体シFFVCMI
NI ミュレーションプログラム（熱流体解析プログラム）

ローカルビューモデルの基本的な実装方針

全球雲解像モデルNI
CAMの力学
NICAMDCMINI
コアを計算するプログラム

は、MPIの同期または非同期通信をcoarr
ayのPutベースの片側通信に置換え、MPIの集mVMCMI
NI 多変数変分モンテカルロ法

団通信についてはcoarr
ayの集団通信（co_ヒト個人間の遺伝的差異やがんNGSAnalyzer-MINI ゲノムの突然変異を固定するプログラム

broadcastなど）への置換えとしている。
実装のイメージは図１ に示す通りである。

高並列汎用分子動力学シミュレ
MODYLASMI
NIーション

リスト１０．XMPの実装の基本方針

NTChemMI
NI 分子科学計算ソフトウェア
FFBMI
NI

非圧縮流体の非定常流動を高精度 に 予 測 可 能 なLar
geEddySi
mulation（LES）に基づいた汎用流体解析コード

図１．XMP実装のイメージ

－26－

RI
STニュース

ここで、実際にMPIの通信部分をcoarrayに置換えた例を２つあげる。１つは同期通信

No．
６２（２０１７）

代入文の左辺に通信相手のノード番号を［ ］で指定する。

MPI_Sendrecv関数の置換え（図２）であり、coarray記法では、ノード番号の開始番号

もう１つは集団通信MPI_Gat
herv関数の置が１からと定められているため、ここでは換え（図３）である。

MPIの送信先ランク番号destに１を足していまず、MPI_Se
ndrecv関数の置換えについる。てであるが、その前にcoarrayの片側通信では以上のことを踏まえるとMPI_Se
ndrecv関MPIの場合とは異なり、通信相手のバッファ数のcoarrayへの置換えは図２に示す通りとに関する情報を明確に把握する必要がある。

なる。coarray記法はMPIの記述のように、MPI関数の呼び出しによる通信の指定は、データ型や送受信タグ、通信の状況といった送受信バッファの先頭アドレスと送受信デー引数の記述が不要となるため、通信の記述がタの個数、データ型、通信相手のランク番号簡素化される。などといった情報が必要となるが、coarray

次に、集団通信MPI_Gat
herv関数の置換記法ではデータを送受信するバッファ代入文

えであるが、この通信処理は各ノードでサイの指定となり、送受信バッファの他に通信相ズの異なるデータをあるノードの受信バッ手のノード番号が必要となる。特に送受信ファに格納することである。先ほどのMPI_バッファに配列を使用する場合は、データ転Se
ndrecv関数の置換えの例と同様の記述で、送を行う配列の領域範囲（上限・下限）の指送受信バッファの領域範囲を正確に指定する定が必要となる。また、片側通信Put
では、ことでデータの送受信が実現される。

図２．MPISendrecv関数のcoarrayへの置換え例－27－RI
STニュースNo．
６２（２０１７）

図３．MPIGat
herv関数のcoarrayへの置換え例

性能評価

表４．評価に使用したXMPコンパイラのバージョン

ローカルビューの実装を行ったアプリケーションの評価について述べる。
評価の対象となるアプリケーションは、NICAMDCMI
NI、MODYLASMINI、NTChemMI
NI、CCSQCDであり、評価はオリアプリ名

XMPコンパイラのバージョン

NICAMDCMINI

0.
9.
320160224

MODYLASMINI

0.
9.
3release

NTChemMINI
CCSQCD

ジナルのMPI
で記述されたアプリケーショ

1.
0.
320160902

ン（MPI版）とXMPを実装したアプリケー

表４ のXMPコンパイラのバージョンにおション（XMP版）とでそれぞれの実行時間をいては、releaseと記述があるものはコンパ比較した。

イラの安定版を示しており、それ以外は改良評価を実施した機器の構成とその際に使用が進められたNi
ght
lybuild版を示している。

したXMPコンパイラのバージョンは、次の評価対象のアプリケーションにおけるMPI版とXMP版のそれぞれの実行時間を相

表３、表４に示す通りである。

対時間により比較すると、相対時間比は図４の通りとなった（凡例は計測区分を示してい表３．評価機器の主な構成
I
nte（Rl ） Xeon（R） E
７４８２０v
３@
１．
９０GHz（１０コア）
x４ソケットるが、本稿ではプログラム全体の時間のみに

Me
mor
y２
５６GB

べて最大で４% の性能低下ではあるが、ほぼ

Ne
t
work

I
ntelQP（
I６．
４GT/sQPI）同等の結果となった。

CPUOS
その他注目する）。XMP版の実行時間はMPI
版と比Li
nuxKernel
４．
４．
０２２ge
ner
ic
x
８６_６４

また、NICAMDCMINIについては、ストロング・スケールの計測が実施でき、その結GCC５．
３．
１， MPI
CH３．
２，BLAS３．
６．
０果は図５に示す通りとなった。図５より、XMP版のスケーラビリティはMPI版と比べて遜色ない結果となった。
－28－

RISTニュースNo．
６２（２０１７）

図４．オリジナル版とXMP版の相対実行時間れまでに経験したことのないコア数が実装されるとなると、XcalableMPによる「グローバルビューモデルの指示文」や「ローカルビューモデルのcoarry記法」による並列化は、並列プログラム開発の生産性と性能向上に大きく貢献することが期待される。

参考文献［１］http://xc
alablemp.
org
［２］ht
tp:
//omni
co
mpi
ler.
org
［３］https://omni
co
mpi
ler.
git
books.
io/
guid

図５．NI
CAMDCMI
NIのスケーラビリティ

ebook/
cont
ent/
ja/
［４］http://fiber
miniapp.
git
hub.
io

７．おわりに並列計算機でプログラムを効率よく開発す［５］並列プログラミング言語XcalableMPるためのプログラミング言語として、研究・におけるステンシル通信の効率的な実開発が進められているPGAS言語のXcalableMP

装，情報処理学会研究報告の現状を紹介した。現在では分散メモリ環境

Vol
２０１３HPC１４０No.
８,２０１３/７/
３１におけるプログラミング言語としてMPIが［６］分散メモリ向け並列言語Xc
alabl
eMP

主に使用されていることは疑いの余地もない

コンパイラの実装と性能評価，情報処ことである。しかし、ポスト「京」と呼ばれ理学会論文誌コンピューティングシス

る次世代スーパーコンピュータにおいて、こテムVol.
３ No.
３１５３１６４（Sep.
２０１０）－29－