並列プログラム開発を抜本的に改革
数理情報学専攻 武市正人 教授

並列性を意識しない『POP』という独自の視点で
並列プログラムを開発するための“スタイル”を

 「並列性を意識することなく、並列プログラムを書ける方法があると大変便利だし、科学技術の発展に大きく貢献するのはまちがいないですね」。武市教授は、こうした視点から魅力的かつきわめて重要な研究を展開している。多様な科学技術計算を行うのに並列計算機が不可欠なのは強調するまでもないが、その能力を最大限に引き出すカギになるのが並列プログラム。それを並列性を意識しない“並列性忘却”あるいは“脱並列性”並列プログラミング(POP=Parallelism-Oblivious Programming)という視点で追求し、新たに登場するどのような並列計算機にも対応できる『次世代の並列プログラミング手法』を確立しようというのだ。「私たちが用意した“スタイル”を適用すると、ユーザーは並列性が生きたプログラムを効率よく書くことができます」。並列プログラム開発手法を抜本的に改革し、コンピュータ・サイエンス(計算機科学)に画期的な道筋をつける期待が大きいPOPの中身を開いていこう。

並列プログラムの“スタイル”にこだわり

 気象現象、生命体解明、ナノ研究など、次代を開く科学技術のテーマはますます高度化し、計算するデータ量も膨大になる。これらを高速に処理し、現象の解明を進める際の主役になるのが並列計算機と、それを動かす並列プログラムである。現在、並列プログラムを書く場合、どの部分を並列にしたら効率的に実行できるかを、並列計算機に合わせながら記述している。標準的なやり方は、逐次計算機向けのプログラミング言語で記述し、並列性の部分をMPI(Message Passing Interface)というライブラリーで補っている点だ。言い換えると、プログラマーが計算機の身になって並列性を生かす場所を指定しているため、それが有効に生かされるかどうかは、プログラマーの力量に委ねられている。膨大なデータ量を高速で計算するHPCなど高性能の並列計算機用のプログラム開発を、このような手法で補っている限り抜本的な解決にはならず、かえって負の遺産を増やしかねない。並列性を「書くことができる」のと「分かりやすくきれいに書く」というのは違う。プログラミングの世界で1970年ごろににぎやかに議論された構造化プログラミングに似ている。単に表現できればよいのではない。表現の“スタイル”が大事だというのだ。並列計算機を対象としたプログラミング言語をベースに置き、計算機の並列性をことさら意識しないでよいスタイルのプログラミング方法論を確立する-ここに武市教授の目的がある。

※画面をクリックして拡大画像をご覧下さい
並列性忘却プログラミング研究の背景
並列性忘却プログラミング研究の背景
並列に実行されるプログラム中の並列性の記述
並列に実行されるプログラム中の並列性の記述

 教授がHPCに適応したプログラミング言語として注目したのは、長年研究している関数型言語のHaskellと米国サン・マイクロシステムズ社のFortressである。Haskellプログラムで表現したアルゴリズムをFortressで実現しようというのだ。Fortressは2002年にDARPA(米国防総省の研究開発部門)が10年計画で打ち出した、次世代HPC向けプログラミング言語研究プロジェクトで提案されたものの1つだが、DARPAの中間評価ではプロジェクト対象から外された。しかし、互換性はまったくないものの、科学技術計算に使う言語Fortranの後継にしようと設計されたFortressは、並列性が組み込まれたような言語構成になっていて、「並列性が当たり前で、特別な場合が逐次」というのが特徴。教授は「きわめてチャレンジングな言語」と評価し、Fortress向けライブラリーを開発するため、2年前からサンと共同研究を実施した。ここに教授は、研究室で独自に開発していたスケルトン並列プログラミングを適用した。

 スケルトン並列プログラミングは、基本ブロックを積み木のように組み合わせるだけで高度な並列プログラムを構築できる手法である。ブロックの組み合わせ方によって、並列性をうまく表現できる独自の“スタイル”を持っており、最初から用意した汎用のスタイルや、特定の計算パターンに特化したスタイルを用意しておけば、多様な科学技術計算に適用できる並列プログラムを開発できる。このようなスケルトンの組み合わせスタイルは関数プログラミングが得意とするところで、Haskellの表記法が参考になる。これをもとに、POPの第一弾ライブラリーをFortress向けに開発した。現在はさらに問題領域に合わせて、さまざまなPOPスタイルを模索している。

計算機科学と計算科学をつなぐ役割担う

 「Fortressを選択したのは、私たちが蓄積しているアルゴリズムの記述法である関数プログラムをサポートしていて、次世代のHPC用の言語となりうると考えているから。しかし、POPに使う言語としては候補の1つで、ほかの実用的な言語や、同じような機能を持つ新しい言語が登場しても、並列性を意識せずにプログラムをつくれるように、どのような表現がいいかなどを追求していきたい」とシナリオを示す。その裏には、高度な新しい並列計算機が登場してアーキテクチャが変わっても対応できるプログラミング手法を確立したいという大目標がある。「POPが確立すれば、まちがいなくHPCの発展、科学技術の進展に貢献します。そうするには、POPによるプログラムをナノやライフサイエンス研究、気象解析や航空機の設計など、具体的なアプリケーションまで道筋をつけてユーザーにアピールする、そこまで一緒にやれる環境を整えることが必要です」と本音が覗く。しかし、そこには現実の壁がある。

 アルゴリズムを系統的に扱うコンピュータ・サイエンスと、解明しようとする現象に計算的手法を適用するコンピューティング・サイエンス(計算科学)が分離していることである。それは、コンピュータ・サイエンスにおける並列プログラミングに関する先端的成果が、コンピューティング・サイエンスにおけるプログラム開発に十分に移転されていないネックがあることの証しでもある。その壁をPOPによって解消しようという教授の意図が見えてくる。

 教授は、POPというアイデアをもとに、Fortressを使って並列プログラムの開発が大幅に効率化されることを示し、コンピュータ・サイエンスとコンピューティング・サイエンスに新たな光を投じようとしている。コンピューティング・サイエンスの研究者は、計算機構の並列性を意識することなく、対象のモデルに集中して研究できるようになり、持続的に利用可能な並列プログラムを開発、蓄積できる一歩を踏み出す道が開ける。『2010年代の初め』という時期を、並列プログラミングのエポックにするには、まだ詰めが残っている。「それにチャレンジしたい」-武市教授の心意気である。

ISTyくん