ベストシステムズ メールマガジン
公開日:2010/02/15

【第131号】並列プログラミング言語「XcalableMP」

クラスタ等の分散型メモリプログラミングを行う場合、多くの場合がMPIを使うこととなりますが、プログラミングが難しく、コンピュータサイエンス以外の研究者が覚えることは困難でした。この問題を解決すべく、昔から多くの試みが行われています。システム的に分散メモリ型を仮想的な共有メモリ型にしたり、MPIプログラミングを自動もしくは半自動的に行うツールが数多く紹介されましたが、なかなか普及せずに消えて行きました。弊社で販売している、英国グリニッジ大学が開発したParawiseもその一つです。Parawiseには、CAPlibというMPIのインタフェースライブラリが用意されおり、Parawiseのツールを使って、半自動的に分散メモリ型のプログラミングを行えます。

日本でもいくつかのプロジェクトがありますが、今回は、現在文部科学省がe-Scienceの一環として開発している「XcalableMP」を紹介します。2012年に公開される予定の「次世代スパコン」では、コア数が数万単位になる予定です。このようなマシンで稼働するプログラムを研究者が容易に開発できるようにするのが目的です。

「XcalableMP」では、MPIプログラミングと違ってシリアルソースコードを最初から書き換える必要がありません。OpenMPと同じようにソースコードの中に指示行(ディレクティブ)を挿入するだけで並列化が可能です。「XcalableMP」の利点は、ノード内並列とノード間並列とを分けてプログラミングできることです。現在のCPUは、殆どがマルチコアであり、ノード内の並列要素が増加しています。「XcalableMP」では、OpenMPとの混在を許可することにより、ノード間(Global)とノード内(Local)を分けてプログラミングができるように工夫されています。

double a[SIZE] , b[SIZE] , c[SIZE];
#pragma xmp nodes p(*)
#pragma xmp template t(0:SIZE-1)
#pragma xmp distribute t(block) onto p
#pragma xmp align [j] with t(j) :: a, b, c
..
# pragma xmp loop on t(j)
for (j = 0; j < SIZE; j++) a[j] = b[j] + scalar*c[j];
..
#pragma xmp reduction(+:triadGBs)

Xcalableでの指示行の例

「XcalableMP」は非常に良いツールとして使えそうです。しかしこの手のプロジェクトにありがちなのが、プロジェクト終了後のサポート不足です。日本の場合特にそれが問題で、何を作っても消えて行きます。今回はそんなことにならないよう、後のサポートも今のうちから考えて欲しいと思います。

<< >>