8月30日(金)に高エネルギー加速器研究機構(KEK)で、「プログラミング言語X10セミナー」が開催され、9人の参加がありました。
今回のセミナーでは、X10の基本的な特長や実際のプログラム例を交えながら、後述のPGASプログラミングモデルで問題をどのように扱うかを詳しく解説しました。KEKのスパコンで格子QCD計算などのプログラムに適用する場合を想定した活発な議論が行われ、理解を深める一助となりました。
現在の高性能計算(HPC, High Performance Computing)では、独立したメモリとプロセッサを持つ計算ノードが、その間でデータ転送を行いながら計算を分担して行う、分散メモリ並列化が不可欠です。ノード内には複数のプロセッサがあり、メモリを共有して計算を並列に行う共有メモリ並列化や、GPUなどの演算加速装置を利用する、階層的な並列化が必要なアーキテクチャが一般的になっています。
ノード間の並列化を行う際には、データをメッセージとしてやりとりするメッセージ・パッシングというプログラミングモデルに基づいた並列化が標準的に行われ、このためのライブラリの共通規格MPI(Message Passing Interface)が広く用いられています。しかし、このプログラミングモデルに基づいてプログラムを並列化する際には、各ノードが分担して行うタスクを想定しながらデータ構造の変更を伴う大がかりなプログラムの変更が必要であるなど、初心者には敷居の高いものとなっています。
メッセージ・パッシングによる並列化に替わるプログラミングモデルとして、PGAS(Partitioned Global Address Space)というモデルが提案されています。これは、分散メモリ環境が持つメモリ空間を抽象的に扱い、あたかも単一のアドレス空間のように見せることで、プログラマの生産性を高めようというものです。これまでも、このようなモデルに基づくプログラミング言語はありましたが、MPIのように広く普及するにはいたっていません。
X10は、PGASをさらに非同期的に扱うAPGAS(Asynchronous Partitioned Global Address Space)プログラミングモデルに基づくプログラミング言語です。C++やJavaに似たオブジェクト指向言語で、マルチコアチップやGPGPUなどのアーキテクチャが異なるハードウェアが相互に接続された、ヘテロな並列分散環境に対応しています。
今回のセミナーを企画したKEKの上田 悟(うえだ・さとる)研究員は、「今後のHPCではさらに並列化がすすみ、プログラムがより複雑になることが予想されます。MPIに対する代替案として、PGASのようなプログラミングモデルは非常に重要になると思います」と語りました。