3.2.1 Super Simulation Infrastructure 石川 裕 委員
3.2.1.1 はじめに
今後の産業および科学技術を支えるためのインフラとして、また、新しい市場の創成のために、その原動力となる環境整備が重要である。その一つが計算機によるシミュレーション技術であると考える。
産業および科学技術では計算機によるシミュレーション技術が重要である。例えば電子回路のシミュレーション等シミュレーション時間の短縮は製品開発の短縮につながり競争力を高めるものとなる。自動車の車体設計、エンジン開発でもシミュレーション技術は欠かせない。新薬の開発でも計算機による分子動力学シミュレーションによるたんぱく質構造予測技術の期待が高まっている。
さらに物理現象のシミュレーション技術は科学教育の教材としても利用できる。実世界をモデル化して実時間アニメーションも可能となるだろう。実時間アニメーションが可能になれば、静的な文字や絵による伝達手段からアニメーションによる伝達手段へのパラダイムシフトが起こると考える。そして、ドキュメント、マニュアル、教科書がインタラクティブ・アニメーションで実現されると予想される。これにより、現在の並列処理市場が拡大されると考える。
このような世界に向けて技術開発を牽引するには、まず、従来限られた研究機関でしか設置できなかったテラフロップス級計算機を一企業でも保持できるワークステーションサーバ程度のコンパクトさと価格にして、ハイエンド並列計算機の利用者層の拡大をはかる必要がある。すなわち、テラフロップス級ワークステーションからテラフロップス級パーソナルコンピュータを実現する計算機ハードウエアの開発である。
コンパクトかつ安価な計算機開発は、国策として何もしなくても推進されていくだろうか?既に市場が出来あがっているテレビゲームの世界では、ハイエンド計算機並あるいはそれ以上の性能を持つかも知れないプロセッサの開発が進んでいる。しかし、それは、市場に最適化される方向での開発でしかない。ここで想定している科学技術計算に必要な能力を持った計算機開発は、市場主義に基づいた技術開発では不可能であろう。なぜならば、市場が膨らむのに必要なソフトウエアが不足しているからである。
国による開発により開発コストを低減してコンパクトかつ安価な計算機を実現すると共に、システムソフトウエア、ライブラリ、応用プログラムの充実が必要である。本稿では、このような観点からプログラミング言語処理系、オペレーティングシステムについて考察する。
3.2.1.2 並列プログラミング言語処理系
今後のハイエンド並列計算機は、複数のSMPを高速ネットワークで接続されたSMPクラスタになるだろう。ハードウエア的には、SMP内でのマルチスレッド共有メモリ実行モデルとSMP間での通信あるいは分散共有メモリという2タイプの実行モデルが混在する形になる。このような異種性のあるハードウエアでは、並列アプリケーションのタスクおよびデータの分散を工夫しないと並列性能を向上させることは出来ない。
最近では、HPFのようにプログラマに対して分散方法を指示させる言語処理系が制定されている。しかし、このような言語は次の2点の問題がある。
(1) 並列計算機の仕組みを熟知していないアプリケーションプログラマに対してデータ分散の仕方を教育する困難さ。
(2) 全てのデータの分散方法を決めない限り、並列化できないという障壁。
(2)は別の言い方をすれば、逐次プログラムを並列化するときに少しずつ並列化していくということが出来ず、逐次から並列への敷居を高くしている。
2年前からSMP向けにopenMPというコンパイラ指示文の規格化が行われ、現在、製品が出荷され出している。SMPを想定しているのでデータの分散方法を指定する必要はない。openMPでは、どのループが並列化できるのか等の指示をコンパイラに与える。従って、逐次プログラムを徐々に並列化していくことが可能となる。openMPの持つ徐々に並列化するという特徴を生かしつつ、SMPクラスタ上で利用できる処理系の開発が重要となる。
プログラムの記述性保守性の向上を目的にC++プログラミング言語等、オブジェクト指向言語が利用されてきている。C++プログラミング言語は、言語が持つ数式記述能力と効率良い処理系の出現により、数学者、物理学者の間でも使われるポピュラーな言語になってきている。最近では、C++の持つオブジェクト指向プログラミング支援機能を生かした並列アプリケーション記述のための研究が盛んである。
例えば、米国Los Alamos国立研究所で進められているPOOMAプロジェクトでは、POOMAは流体力学やプラズマシミュレーションのような計算科学を解くためのフレームワークを構築している。POOMAはローカルデータ、並列抽象化、グローバルデータ、コンポーネント、アプリケーションの5つのレイヤを提供している。並列計算機に固有のコードはローカルデータと並列抽象化レイヤによって実現されている。グローバルデータレイヤは、計算機独立の大域的なデータアクセスを提供している。コンポーネントレイヤはアルゴリズムの集合であり、FFTとか共役勾配法等が提供されている。
グローバルデータレイヤの例としてFieldクラスおよびIndexクラスの使用例を以下に示す。Fieldクラステンプレートはグローバルデータを表現するためのものであり、FieldLayoutクラスは仮想プロセッサ間のFieldの分散を管理する。Indexクラスは、Fieldクラスのデータを参照するためのものである。
1: Index I(100), J(100);
2: FieldLayout<2> layout(I, J);
3: Field<double, 2> A(layout), B(layout);
4: assign(A[I][J], 0.25*( B[I][J] + B[I+1][J] + B[I][J+1] + B[I-1][J] + B[I][J-1] ));
上記プログラムにおける4行目のように、assign関数テンプレートを使うことにより、ループ制御構造を記述せずに緩和プログラムが記述でき、アルゴリズムの可読性が増す。assign関数テンプレートの実現は、Template Closure(あるいはExpression Templateと呼ばれている)技法を用いることにより、効率よいコードが生成される。
このようにPOOMAを使うと、アプリケーションを記述するユーザに対して並列計算機の構造を意識したマルチスレッドプログラミングやメッセージパッシングプログラミングを記述せずにアルゴリズムの記述に専念することが可能となる。今後の並列処理ユーザ層の拡大のためには、このような科学技術計算のためのライブラリだけでなく、広く使われるシミュレーション技術を体系化して再利用可能な並列ライブラリを構築して、応用プログラムの充実を図る必要があるだろう。
最近、Javaを高性能計算分野で利用できるようにJava Grandeという組織が結成されている(http://www.javagrande.org/)。Java Grandeでは、高性能計算のためのJavaで記述されたライブラリの規格化やJavaで書いた高性能計算を必要とするプログラムが効率良く最適化出来るように拡張を提案していく。また、C++のようなテンプレート機能は、並列処理を抽象化するのに非常に良い道具となっている。C++において蓄積されてきている技術をJavaに適応していこうという動きもある。
3.2.1.3 スケーラブルオペレーティングシステム
SMPクラスタ上で並列アプリケーションが効率良く実行できるオペレーティングシステムが必要である。1テラフロップス級SMPクラスタの構成要素である1ノードに2ギガフロップスのプロセッサを4個搭載していると仮定すると128ノード必要となる。128ノードでローカルなオペレーティングシステムが稼働し、全てのノード間で資源の大域管理を行い、高速通信機能や分散共有メモリの支援、ジョブスケジューリング、ファイルシステム、並列I/O、メインテナンス、管理ツールを実現しなければならない。
実現方法には、Linux等の既存のオペレーティングシステムカーネルを利用し改造していく方法と新規開発していく方法がある。本格的SMPクラスタ構築と今後の基盤技術の整備という観点からは、SMPクラスタのためのオペレーティングシステムを開発していくのが良い。なぜならば、メモリ管理機構に踏み込んだカーネルの修正をする場合に大幅な修正が必要となり、元にしたカーネルが改良される毎にそれを反映させなければならず、コストがかかるからである。
新規オペレーティングシステムカーネルの開発は危険性が伴うが、それを軽減することは可能である。UNIXのAPIを採用することにより、ほとんどのシステムソフトウエアを新規に開発しなくてもGNUやLinuxのコミュニティが開発したものが使える。開発したカーネルをオープンにしてユーザ層だけでなく開発や支援する層を広げることが出来る。これは、GNUやLinuxが行ってきた手法である。
3.2.1.4 おわりに
本稿では、今後の産業および科学技術を支えるためのインフラとして、そして、新しい市場の創成には、(1)従来限られた研究機関でしか設置できなかったテラフロップス級計算機を一企業でも保持できるワークステーションサーバ程度のコンパクトさと価格にして、(2)産業界で使われるシミュレーションやインタラクティブ・アニメーションを可能とするソフトウエアを実現することにより、ハイエンド並列計算機市場を作り出せると考え、そのために必要な技術研究開発の中からプログラミング言語処理系、オペレーティングシステムについて考察した。