【前へ】

3.2 ソフトウエア

3.2.1 並列システムソフトウエアの課題

 (石川 裕委員)

3.2.1.1 プログラミングパラダイム

 並列プログラミングパラダイムをデータ授受の観点から大別すると、メッセージパッシング型と共有メモリ型になる。

 メッセージパッシング型の欠点は、システムソフトウエアによる通信データのバッファ管理に伴うメモリコピーのオーバヘッドが問題になる。これにより通信性能が高く通信路における遅延が小さくても、メモリコピーの性能で頭打ちになるケースが多い。

 例えば、MPICHと呼ばれるMPIを実装したPDSに基づくIntel ParagonおよびPCクラスタ(表1)上での我々の経験[1]では、MPIのバンド幅およびレイテンシはParagon上で57 Mbytes/s、69 μsec、PCクラスタ上で26 Mbytes/s、35 μsecである。表と対比すると分かる通り、ほぼメモリコピーのバンド幅となっている。PCクラスタ上の我々が開発した通信ドライバPMでは、ユーザのメモリ空間に対して116 Mbytes/sのバンド幅を実現しているが、これを利用したMPIではユーザ空間にある通信バッファからアプリケーション側で指定している領域へのコピーのためにメモリコピーのバンド幅以下になっている。

表1

PC Cluster with myrinet network

Paragon
Processor

Pentium

i860XP
Clock

166 MHz

50 MHz
Network Bandwidth

160 MB/s

200 MB/s
Memory Bandwidth(memcopy)

32 MB/s

68 MB/s

 MPIのように同期通信がある場合には、システムは無駄なメモリコピーを削ることが可能となる。この場合、例えば、我々の環境では、ほぼ通信ドライバで実現されている116 Mbytes/sの性能をMPIレベルで出すことが可能となる。これがシステムソフトウエア側としては本質であるが、プログラミングをするユーザにとっては負担を強いることになる。通信遅延を隠蔽するために、あるいは非同期処理を実現するためには、同期通信+マルチスレッドとする必要がある。

 共有メモリ型プログラミングの利点は逐次処理プログラムからの移行がメッセージパッシング型に比べて楽な点である。しかし、例えば、ローカル計算+一斉通信というパターンでは、通信時におけるネットワークのトータル転送容量の大きさが性能に効いてくる。ここにSMPのような並列計算機におけるバスの限界によるスケーラビリティの悪さが生じてくる。ランダムにメモリをアクセスをするような並列プログラムは共有メモリ型プログラミングが向いている。しかし、共有メモリ型のシステムでは、従来から言われている通りfalse sharingによる性能劣化の問題がある。

3.2.1.2 プログラミング言語システム

 並列計算機用に使用されるプログラミング言語システムとしては、i)データ並列が可能な逐次プログラムを自動並列化するコンパイラを提供する、ii)コントロール並列記述を含めた並列処理記述構文を提供する並列プログラミング言語を提供する、の2種類がある。ここでは、ii)に関して議論する。

 従来より並列プログラミングのために、より高機能な並列処理記述を提供する試みがなされてきている。研究成果物である新しい並列処理言語は、特定用途には、普及している例を幾つか見ることができるが、FortranやC、C++のように広く一般に普及し利用されている並列プログラミング言語はない。現在でも、新しいプログラミング言語の提案が多数発表されているのが現状である。これは、計算機利用の多様化に伴い、アプリケーションの性質に合致したプログラミング支援を必要としているからであろう。
 このような状況では、ある特定用途のプログラミング言語システムを開発するよりも、ユーザのニーズに合わせたプログラミング構文を作成できるプログラミング言語システム、すなわちメタレベルアーキテクチャを持つプログラミング言語が必要である。
 メタレベルアーキテクチャの中でコンパイル時メタレベルアーキテクチャでは、ユーザがコンパイル時に、コンパイラのパーザ、コード生成を変更することが可能となる。本機能を利用して、ユーザのニーズに合致する構文をユーザ自身が定義していくことが可能となる。

 さらに、行列ライブラリを提供する人は、ライブラリを「組み込みライブラリ」の如く提供することができる。すなわち、ライブラリが呼び出されている環境をコンパイル時に知ることができ、その環境に適したコード生成を記述することができる。非常に簡単な例として並列基本行列計算ライブラリを考えてみる。

 Y = A*X + Bは次のようなライブラリコールになるであろう。

MatMul(A, X, TMP)
MatAdd(TMP, B, Y)

 従来の処理系では上記のライブラリコールは単なるライブラリコールの列としてしか生成できない。しかし、メタレベルアーキテクチャでは、上記のプログラムを展開し、一時変数をなくして最適化することが可能となる[2]。

3.2.1.3 デザインパターン

 ソフトウエア工学の分野では、再利用技術として、クラス、クラスライブラリ、フレームワーク、デザインパターン等と研究のシフトが進んでいる。デザインパターンとは、プログラミングにおける定石あるいは手筋をまとめたものであると言える[3]。ソフトウエア工学においては、ウインドウプログラミングやビジネスアプリケーション等においてデザインパターンの応用事例が多い。並列プログラミングにおいても、デザインパターンが重要であり今後の研究の発展が望まれるところである。

3.2.1.4 オペレーティングシステム

 並列計算機を気楽に使える環境を提供するシステムソフトウエアが必要である。利用者はワークステーションを利用しているかのごとくシームレスに並列計算機が利用できる必要がある。ワークステーションで主流のUnix系を採用している現状の並列計算機上のOSは、このような環境を満たしているように見えるが問題点が多い。各プロセッサ上にローカルなUnix OSが独立して稼働しているために、グローバルな資源管理に基づく効率よい並列実行環境が提供されていない。そこで、いくつかの商用計算機では、UnixによるTSS環境とバッチ環境の2つを提供し、システム管理者は、ユーザのニーズに合わせ、TSSおよびバッチ環境のサービスをスケジュールすることをしている。

 一方、Unix擬きのOSを開発し、ギャングスケジューリング等を採用することにより、並列マルチタスク環境を実現しているシステムも存在する。しかし、このようなシステムは、ワークステーション上ほどの豊富なプログラミング支援ツールが整備されず廃れていくことが多い。

 コモディティOS環境を並列計算機上で効率良い実行環境を提供するシステムが必要とされている。現在、我々は、PCクラスタ上で、そのような環境を実現すべく研究開発を進めている[3]。並列OS、通信ドライバ、プログラミング言語を同時に設計し、ギャングスケジューリングを実現している。並列OSであるSCoreはUnix系の上に構築している。プログラミング言語はC++を拡張したMPC++と呼ぶ言語を開発している。

<参考文献>

[1]
F. O'Carroll, ''Performance of MPI on Workstation/PC Clusters using Myrinet, ''Cluster Computing Conference'97, Atlanta, 1997.
[2]
Y. Ishikawa, et.al, '' Design and Implementation of Metalevel Architecture in C++ -- MPC++ Approach --,'' Reflection '96, pp. 141 -- 154, 1996.
[3]
RWC Massively Parallel Software Laboratoy Home Page, http://www.rwcp.or.jp/lab/mpslab

3.2.2 並列化コンパイラから見たペタフロップスコンピューティング

(笠原博徳委員)

 5〜10年後のペタフロップスマシン研究開発方針として重要なのは、ピーク性能だけではなく、アプリケーションを実行した時の実際の性能(実効性能)の向上を図るということである。これは、従来分散メモリ型マルチプロセッサを用いた超並列システムが高いピーク性能が得られるため注目されていたが、実効性能がピーク性能の数%から30%程度の低い値にしか達せず、より低いピーク性能をもつ共有メモリ型マルチベクトルプロセッサシステムの方が多くのアプリケーションに対して高い実効性能を与える[1]ことが知られるようになってから、米国を中心に科学技術計算に超並列型のマシンは適さないと理解され、超並列マシンを開発していた企業が事業から撤退していったことを見ると明らかである。

 このように実効性能の高いペタフロップスマシン開発を行うためのキーとなるのは、コンパイラを始めとしたシステムソフトウエアの高度化[7、8]と、ソフトウエアにおける並列化技法の性能を最大限に引き出すことのできるアーキテクチャ[14]の開発すなわちソフトウエア/ハードウエア協調設計型マルチプロセッサシステムの開発である。もちろん、システムソフトウエアにおける並列処理方式の開発においては、各種のアプリケーションプログラムの並列性を十分に活かせるようにしなければならない。

 また、高実効性能ペタフロップスマシンにおいて、多くのプロセッサを利用率高く動作させ、プロセッサ間データ転送オーバーヘッドおよび同期オーバーヘッドを低くおさえるために、ユーザが高度なチューニングを余儀なくされるというのでは、商業的成功は望めない。すなわち、ペタフロップスマシンといえども、誰にでも簡単に使いこなせるようなユーザフレンドリネスが重要と考えられる。このためには、ユーザが並列処理を意識することなく従来の使い慣れたCあるいはFortranなどの言語でプログラミングを行うと自動的に並列化してくれるコンパイラ(このようなコンパイラでは原子力コードのようなFortranで記述された既存のプログラムの自動的な実行も可能)[2-5]、あるいはユーザはプログラミングを行わず、ユーザが使い慣れた問題記述法、例えば電力系統の解析であれば電力系統図、制御系であれば伝達関数、ロボットであれば関節およびリンクの構成などをグラフィカルインタフェイスを用いて入力すると、問題の求解プログラム(例えば電力系統過渡安定度計算のための非線形微分方程式求解プログラム)を内部で自動的に作成し並列化する専用目的コンパイラの開発が重要と思われる[2、12]。

 以下では、ペタフロップスマシンの開発に向けて今後ますますその重要度が高まると考えられる自動並列化コンパイラ技術の現状と課題、またそれらの対処策の例について簡単に述べる。

(1)自動並列化コンパイラの現状

 並列化コンパイラは逐次型言語あるいはその拡張言語で書かれたプログラムに、

  • プログラム中のデータの流れ及び制御の流れの解析による並列実行可能な部分の検出
  • 使用する並列処理システムの性能を最大限に引き出すプログラムのタスク(並列処理単位)への分割(タスク粒度の決定)
  • プロセッサ間データ転送オーバーヘッドを最小化するデータの分割
  • 並列処理できる形へのプログラムの自動変換(restructuring)
  • 並列実行時間を最小とするようなタスクのプロセッサへのスケジューリングおよびデータのローカルメモリあるいはグローバルメモリへの配置
  • 並列化マシンコードの生成
  • 等の処理を適用し、並列化マシンコード(あるいは並列化拡張言語)を生成するものである。

     現在までに実用化されているマルチプロセッサシステム用自動並列化コンパイラの並列性抽出部では、プログラム中で最も多くの時間が費やされるDoループの並列化を対象にしており、ループ内のデータ依存解析[2、3、5]およびDoall, Doacrossループへの変換(ループ並列化)[4]が行われる。

     ここで、データ依存解析とは、並列性抽出のために、命令間、ステートメント間、サブルーチン間、ループ間のデータの定義・使用関係により生じる一種の実行順序関係の制約を解析することであり、具体的にはフロー依存、出力依存、逆依存、入力依存、の4種類があるが、並列性解析ではフロー依存、出力依存、逆依存が解析され、入力依存はデータの分割配置を行う際に考慮される。

     次に、制御依存解析とは、ステートメント等が並んでいる順序および条件分岐等を解析しながら、ある条件分岐の分岐方向が決定するとどのステートメントが実行可能になるかを解析することで、データ依存を考慮しない場合のステートメント間の最大の並列性を調べることができる[2]。しかし、実際にはデータ依存を考慮しながら並列性を解析することが必要であり、制御依存およびデータ依存を考慮して最大の並列性を解析する方法として最早実行開始条件解析[2、11、15]が提案されている。

     またプログラム・リストラクチャリングでは、データ依存解析等の結果を利用して、Doall,Doacrossループに変換(ループ並列化)するほか、そのままではベクトル化あるいはループ並列化できないループを、

    (a)
    ステートメントの実行順序の変更
    (b)
    ループ分散(ループディストリビューション)
    (c)
    テンポラリ(配列)変数への代入を行うステートメントの挿入(ノードスプリッティング、スカラエクスパンション)
    (d)
    多重ループにおける内側ループと外側ループの入れ換え(ループインターチェンジ、ループパーミュテーション)
    (e)
    ループの展開(ループアンローリング)
    (f)
    1重ループの多重ループへの変換(ストリップマイニング)
    (g)
    各プロセッサ用プライベート(配列)変数の生成(アレイプライベタイゼーション)[22]
    (h)
    ユニモジュラー変換(ループリバーサル、パーミュテーション、スキューイング)[4]

    等各種の手法を用いて並列化を可能にする。

     このループ並列化のためのプログラムリストラクチャリング手法に関しては、非常に多くの研究がイリノイ大学が中心に行われ[4、5、20]、現在は成熟期に入っている。

     しかしこのようなループ並列化によるイタレーションレベル中粒度並列処理技術だけでは、アムダールの法則からも分かるように、プロセッサが数千以上のペタフロップスマシンの場合には並列化できないループやループ以外の処理部分の影響で、実効性能の向上を図ることは困難になる[18]。

    (2)ペタフロップスマシン用自動並列処理化コンパイラの研究課題

     上述のようなループ並列化技術の限界を考慮し、ペタフロップスマシン用自動並列処理化コンパイラでは、米国におけるペタフロップスワークショップでも一部議論されているように、以下のような並列化技術の開発が重要になると考えられる。

    (a)
    従来のように一部のループだけではなく、プログラム全域にわたり全ての並列性を抽出・利用するために、サブルーティン/ループ間の並列性を利用する粗粒度並列処理(マクロタスクデータフロー処理)[9][15]、従来のループ並列化(中粒度並列処理)、逐次ループあるいはループ外の基本ブロックの内の処理を並列化するための(近)細粒度並列処理[13、17、18]を階層的に適用するマルチグレイン並列処理技術[9、11、15]
    (b)
    各プロセッサ上のローカルメモリあるいは分散共有メモリを有効に利用し、プロセッサ間のデータ転送を最小化するために、複数ループ間のグローバルなデータ依存解析、ループの移動を伴うデータ自動分割・配置技術[16、19、23、24]
    (c)
    データ分割配置によるデータ転送の最小化によっても除去できなかったプロセッサ間データ転送のオーバーヘッドを隠蔽するための、データプレロードあるいはポストストアを用いた処理とデータ転送のオーバーラッピング[10]を可能とするスケジューリング技術[2][6]

     (a)のマルチグレイン並列処理は、ペタフロップスマシンにおけるプロセッサ間だけではなく、5年後から7年後にマイクロプロセッサの主流になると思われるシングルチップマルチプロセッサでも非常に重要となる技術である。

     また(b)のデータの自動分割配置と(c)の処理のデータ転送のオーバーラッピング技術は、今後アーキテクチャ的にもコンパイラ的にも非常に重要な研究テーマになると考えられているソフトウエア(プログラム)制御キャッシュの開発のための基礎技術としても重要である。

    (3)まとめ

     本節では、商業的に成功するペタフロップスマシンの開発においては、実効性能および使い易さの向上が重要であり、このためには自動並列化コンパイラの高度化、コンパイラによる並列化技術の性能を最大限引き出すことのできるアーキテクチャの研究が重要であることを述べた。さらに、自動並列化コンパイラの現状と問題点を指摘し、今後マルチグレイン並列化、データ分割配置、処理とデータ転送のオーバーラップスケジューリングなどのコンパイラ技術を開発実用化して行くことが重要であることを説明した。

     また、これらのコンパイル技術は、ペタフロップスマシンのみでなく、現在日本が米国に大きく遅れているRISC系プロセッサの開発において、5年後以降に世界をリードするプロセッサを開発するチャンスとなると考えられるシングルチップマルチプロセッサのアーキテクチャに大きな指針を与えると共に、そのようなプロセッサを効率良く動作させるためにも極めて重要な技術となると考えられる。

     しかし現在のところわが国では、このような最先端の並列化コンパイラの研究を行う研究者の数が大学、企業、国研を通じて少なく、産官学協力し早急に人材を育成することが必要である。さらに、このコンパイラ技術は、将来のマイクロプロセッサからスーパーコンピュータまでの性能を左右する最重要課題の一つと考えられるので、国としても研究の推進を積極的に支援していく必要があると思われる。

    <参考文献>

    [1]
    G.Cybenco, D.J.Kuck, "Teraflops Galore: Supercomputing /Reinventing the Machine - Revolution or Evolution?" IEEESpectrum, pp. 39-41. Sep. 1992.
    [2]
    笠原, 並列処理技術, コロナ社, (1991)
    [3]
    U.Banerjee, Dependence Analysis for Supercomputing, Kluwer Academic,1988
    [4]
    U.Banerjee, Loop Parallelization, Kluwer Academic Pub., 1994.
    [5]
    M.Wolfe, High Performance Compilers for Parallel Computing,Addison Wesley,1996.
    [6]
    H.Kasahara and S.Narita, "Practical multiprocessor schedulingalgorithms for efficient parallel processing", IEEE Trans. Comput., Vol.C-33, No.11, Nov.1984
    [7]
    笠原,”並列処理ソフトウエア”,電気学会論文誌C「並列処理技術特集」,Vol.113, No.11, pp.919-927, Nov. 1993.
    [8]
    解説特集”並列処理のためのシステムソフトウエア”,情処,Vol.34, No. 9,Sep. 1993.
    [9]
    笠原,吉田,合田,岡本,本多,”Fortranマクロデータフロー処理のマクロタスク生成手法”,信学誌, Vol.J75-D1, No.8 pp.511-525,1992.
    [10]
    藤原,鈴木,白鳥,笠原,”データプレロードポストストアを考慮したマルチプロセッサスケジューリングアルゴリズム”,信学論,Vol.J75-D1, No.8, pp.495-503, 1992
    [11]H.Kasahara, H.Honda, S.Narita, "A Multi-Grain Parallelizingcompilation scheme for OSCAR," Proc.4th Workshop on Languages and Compilers for Parallel Computing, 1991
    [12]
    笠原,藤井,本多,成田,”スタティック・マルチプロセッサ・スケジューリング・アルゴリズムを用いた常微分方程式求解の並列処理,情処論, Vol.28, No.10, pp.1060-1069, Oct. 1987.
    [13]
    H.Kasahara, H.Honda and S.Narita,"Parallel Processing of Near Fine Grain Tasks Using Static Scheduling on OSCAR", Proc. IEEE ACM Supercomputing'90, Nov. 1990.
    [14]
    笠原, 成田, 橋本, "OSCARのアーキテクチャ", 信学論D,Vol.J-71D, No.8 ,Aug.1988.
    [15]
    笠原, 岡本,合田,宮沢,本多,笠原, "OSCARマルチグレインコンパイラにおける階層型マクロデータフロー処理", 情処論, Vol. 35,No.4, pp.513-521, Apr. 1994.
    [16]
    吉田,前田,尾形,笠原, "Fortranマクロデータフロー処理におけるデータローカライゼーション手法", 情処論, Vol. 35, No.11, 1994
    [17]
    尾形,吉田,合田,岡本,笠原,”スタティックスケジューリングを用いたマルチプロセッサ上の無同期近細粒度並列処理”,情処論,Vol.35, No.4,Apr. 1994.
    [18]
    笠原,”マルチプロセッサシステム上での近細粒度並列処理”,情処,Vol.37, No.7,1996.
    [19]
    吉田,前田,尾形,笠原, "Fortran粗粒度並列処理におけるDoall/シーケンシャルループ間データローカライゼーション手法, 信学論, Vol. J78-D-I, No.2, pp.162-169, Feb. 1995.
    [20]
    W.Blume, R.Eigenmann, J.Hoeflinger, P.Petersen,L.Rauchwerger and Peng Tu, "Automatic Detection of Parallelism,IEEE Parallel & Distributed Technology, Vol.2, No.3, pp.37-47,Fall 1994.
    [21]
    D.J.Lilja, "Exploiting the Parallelism Available in loops,"IEEE Computer, pp.13-26, Vol.27, No.2,Feb.1994.
    [22]
    P.Tu and D.Padua, "Automatic Array Privatization," 6thAnnual Workshop on Languages and Compilers for ParallelComputing, 1993
    [23]
    M.Gupta and P.Banerjee, "Demonstration of Automatic DataPartitioning Techiniques for Parallelizing Compilers on Multicomputers," IEEE Trans.on Parallel and Ditributed System,Vol.3, No.2, pp.179-193, 1992.
    [24]
    J.M.Anderson amd M.S.Lam, "Global Optimizations forParallelism and Locality on Scalable Parallel Machines," Proc. of the SIGPLAN '93 Conference on Programming Language Design and Implementation, pp.112-125,1993.

    3.2.3 ペタフロップスマシンにおけるプログラミングインタフェース

    (妹尾義樹委員)

     科学技術計算分野におけるペタフロップスマシンの実現を考えるとき、ユーザに使いやすく、しかも高いシステムの性能を引き出せるためのプログラミングインタフェースを提供することは不可欠である。このための要素技術、技術課題、将来の予想、技術調査のポイントについて述べる。

    3.2.3.1 日米における技術的現状の比較と我が国での問題点

     現在の科学技術計算の分野では、最高速のシステムのピーク性能が、数百ギガFLOPSから1テラFLOPSである。これらのシステムはすべて、分散メモリタイプの並列マシンであり、プログラミングインタフェースとしては、大きく分けて、メッセージパッシングによりSPMD(Single Program Multiple Data Stream)形式のプログラムをユーザが明示的に記述する枠組みと、データパラレルプログラミングの2種類がある。前者はMPI(Message澑assing Interface)[1]、後者はHPF(High Performance Fortran)[2][3]が現在の代表的な標準インタフェースとして認知されている。いずれの場合でも、システムの高い性能を引き出すための鍵は、データアクセスローカリティーの抽出である。つまり、これらのシステムでは、演算性能に比べて、通信性能が計算のボトルネックになる場合がほとんどであり、データアクセスの局所性をうまく引き出して、必要となる通信量を最小にする必要がある。

     MPIはメッセージパッシング、つまり、プロセッサ間のデータ転送を、ユーザがライブラリを用いて明示的に記述する枠組である。SPMD形式に基づいて、複数の制御の流れを意識したプログラミングが必要になる。これに対してHPFは従来のFortran言語に最小限の付加的指示で並列化を可能とすることを狙ったデータパラレル言語である。現在はまだ仕様そのものや処理系(コンパイラ)の完成度の面で発展途上であるが、大きな可能性を秘めるとともに、今後、分散メモリマシンを並列処理の専門家だけの研究ツールから実用ツールにするためには必須のプログラミングインタフェースである。このMPIとHPFについて、日米の技術的現状について比較を行う。

    (1)MPI

     MPIは、分散メモリ型のプログラミングインタフェースとして、現在最も標準的に用いられているものである。MPIは、米国のJ. Dongarra、 D. Walkerや欧州のR. Hempelらによって標準化が推進された。標準化はMPIF(MPI Forum)と呼ばれるプライベートなフォーラムで行われた。このインタフェースは、米国のPVM、P4や欧州のPARAMACSなどのメッセージパッシングインタフェースをベースに設計されており、現在では、並列I/Oやプロセスの動的生成・消滅などの機能をさらに追加したMPI2の言語仕様が検討されている。また、最近では、並列計算機用の標準ベンチマークとしてMPIで書かれたプログラムが開発されている。日本と欧米では、言語インタフェースに関する研究のみならず、その利用経験の蓄積において、まだかなりの開きがあると思われる。

    (2)HPF

     HPF言語の標準化活動もMPIと同様に、Rice大学CRPCのKen Kennedy教授を中心とするプライベートな組織HPFF(HPF Forum)で行われた。ANSIを中心に行われたFortran90の仕様制定に10年以上かかった反省からである。活動は1991年に開始され、1993年にHPF1.0が制定された[2]。その後もHPFF2において、仕様の曖昧性のチェックや、HPF1.0で不十分であった機能拡張が検討され、昨年末にHPF2.0[3]の仕様が定められた。HPFの標準化活動も、主に米国を中心として行われ、商用のコンパイラについてもPGIやAPRといった米国ベンチャーが日本のベンダに比べて先行している。HPF関連の技術についても、特にその利用技術の蓄積について欧米が日本に比べて格段に進んでいると思われる。特に米国では、TMC社(Thinking Machine Corporation)のConnection Machine上でCM-Fortranを用いたプログラミング経験が長く蓄積されており、現在のHPFで書かれた実用コードの多くはCM-Fortranプログラムを書き換えたものである。後で、さらに詳しく触れるが、日本の並列処理技術の発展のためには、コンパイラとユーザの緊密な共同作業による、利用経験の蓄積、利用環境の整備が急務である。

    3.2.3.2 ペタフロップスに向けた将来予想と解決策

     現在のデバイステクノロジの延長線上で、15年から20年先のスパンでペタフロップスマシンを実現するとすると、これは並列システム、それも少なくとも1000台以上の、かなり多数の要素プロセッサが結合された超並列システムとならざるを得ないと考えられる。また、これら多数のプロセッサを効率よく動作させるためには、物理的には、現在のテラフロップスマシンと同様に、分散メモリ構成にならざるを得ない。共有メモリでは、メモリアクセスがボトルネックとなり、システムの実効性能を制限するからである。

     物理的に分散メモリで構成された並列プロセッサで性能の高いプログラムを記述する際のポイントは、データの分散メモリへのレイアウトである。結合された各プロセッサを可能な限り独立に並列動作させるためには、データアクセスのローカリティーを最大限に抽出する必要があるからである。
     ペタフロップスシステムの実現を可能にするための言語処理技術について、そのニーズ、要素技術、パラダイムシフトについて述べる。

    (1)ニーズ

    科学技術計算の分野における、計算機システムに対するニーズについて、言語インタフェースに関連するものは以下のものであろう。

    (a)
    高速性:さらに分類すると、計算のターンアラウンド時間とスループットに分けられる。
    (b)
    適用性:高い性能が得られる応用プログラムのレンジ。適用性を決める大きな要因としては、非定型問題の対処や使えるメモリ容量などがある。
    (c)
    ポータビリティー:ある高速システムを対象として記述したプログラムが、そのままアーキテクチャの異なる他のシステムで高速に実行できるかどうか。対象システムとしてはプログラムの開発環境という意味で、WSやパソコンも考慮する必要がある。
    (d)
    記述性、保守性:プログラム開発や、その保守の容易性が重要である。これは言語インタフェースやコンパイラの機能だけではなく、デバッガやチューニングツールなどの整備が大きな要因となる。数値計算ライブラリの整備なども記述性に大きく影響する。

     これらの各項目は、一般にはトレードオフの関係にある。すなわち、高速性だけを追求して、他を無視してよいならば、ユーザがアセンブラでプログラムを開発すればよく、複雑な言語処理系を開発する必要はない。逆に高速性を犠牲にして、他の項目を実現するのも容易である。実際には、要求される高速性を維持しながら、他の項目を高めていく必要があり、これには、一つ一つの言語処理系に関する要素技術を着実に完成させていく地道な努力が必要である。

    (2)要素技術

     上記で述べたニーズを実現するために必要となる要素技術について、特にHPFなどのデータパラレル言語の枠組みに話を絞って述べる。

     HPF言語の現在の問題点は、並列化/通信最適化についての記述力の不足と、これを補うだけの処理系による自動最適化が現状の技術では困難なため、並列化の適用範囲が制限されることである。今後、HPFがペタフロップスマシンの言語インタフェースとなりうるためには、以下の要素技術を確立する必要があるだろう。

    (a)プログラム記述能力の向上

  • 不規則問題の記述: 有限要素法など、配列の間接参照や不規則データ構造の問題をコンパイラが効率よく処理できる形で記述する枠組みの研究が必要。
  • タスク並列性: HPFで記述できる並列性の指定は、INDEPENDENT指示行で記述できるDOALL型のループ処理とFORALL型のループ処理および配列演算だけである。これ以外のDO漓CROSS型の並列化や、制御並列を含むようなタスク並列性の指定ができない。これは、HPF言語がシングルストリームのセマンティックスを基本としているためである。何らかの形でHPFの中にタスク並列性/オブジェクト並列性を取り込む必要がある。
  • 並列入出力: 大規模演算においては、大規模データ(ファイル)を扱うことが多く、入出力が並列化の妨げになることが多い。これを解決するための並列I/Oを記述する方法の研究が重要である。
  • (b)コンパイラ解析能力/最適化能力の向上

  • アルゴリズムレベルの最適化: 現在のコンパイラは、記述されたプログラムのセマンティックスを保存する形の最適化しか行うことができない。最適化はシンプルなパターンマッチングにかぎられている。与えられたプログラムのアルゴリズムを認識し、等価なアルゴリズム変換を行うなどの最適化手法の研究が重要である。Vienna大学など、このような研究に着手したところもある[4]。
  • 不規則処理の最適化: 非線型添え字を伴う処理の並列化には、通常は、INSPECTOR/EXECUTOR[5]といって、添え字の内容を先に解析し、この解析結果を用いて効率の良い通信を生成する方法が用いられる。しかしながら、現状では、まだまだ性能の高いプログラムが生成できるのは、非常に限られた場合だけである。ペタフロップスシステムを汎用とするためには、不規則処理を避けて通るわけにはいかない。
  • 通信最適化: 複雑なケース、特に複数の手続きにまたがっての通信最適化は、まだまだ非常に困難である。また、プログラムは同一でも、対象とするシステムや入力データによっては採用すべき通信最適化の手法が異なることが多い。
  • 手続き間解析: 分散メモリ上の並列化は、グローバルな情報が必要であるが、これには手続き間解析が不可欠である。大学などで研究用に開発された処理系や一部の商用システムでは、すでに手続き間解析が採用されているが、まだまだ課題は多い。例えば、これらのシステムでは、大規模ソフトウエアを開発する際に、1つのファイルを更新すると、全ファイルを再コンパイルする必要がある。また、詳細で正確な手続き間解析には、長時間の解析時間と大量のメモリが必要になる。
  • 自動データレイアウト[6]: 現在のHPFでは、データのレイアウトは、すべてユーザが明示的に記述するのが基本である。しかし、この作業を最適に行うには、対象となるシステムの特性を詳細に理解する必要がある。並列処理の専門家以外が使える汎用の高速システムの実現には、データレイアウトの自動化または、すくなくともレイアウトを支援するツールの研究が重要である。
  • (c)実行時最適化技術

     並列化においては、最適化の方法や、最適化のパラメータがデータサイズやループ長に依存することが多い。選択肢が2、3個の場合には、マルチバージョン方式といって、複数の最適化コードを生成しておき、実行時にこれらを選択実行する手法がとられるが、選択肢が多数あったり、複数のパラメータが相互にからみあう場合には、使えない。実行時にプログラムの最適化方法を決定できる枠組みの研究が必要である。

    (d)階層構造の克服

     ペタフロップスシステムが、仮に1万台以上の要素プロセッサから構成されるとすると、これらプロセッサが一様に1階層で構成されるとは考えにくい。クラスタなど、何らかの階層構造が採用されるのが普通である。この場合、並列化およびデータレイアウトについて、ユーザに階層を意識させない枠組みの研究が必要である。

    (e)ツールの整備

     ペタフロップスマシンになると、今より一層デバッグや性能チューニングが困難になると考えられる。これらの作業をシステマティックに支援する統合ツールの研究開発が重要である。

    (3)パラダイムシフト

     以上まで、ペタフロップスマシンが、現在の延長上で実現され、利用されるこを前提に、今後の課題、検討すべき要素技術について述べた。以下ではシステムの利用形態も含めて、起こりうるパラダイムシフトの可能性について大胆に論じてみる。

    (a)異機種分散処理

     LAN、WANなどのネットワーク技術の進展により、ペタフロップスマシンは、異機種分散システムとして実現される可能性がある。現在の大規模数値シミュレーションにおいても、主要計算部は計算サーバで実行し、結果の可視化やデータベース処理に専用システムを用いる場合がある。また、計算部分についても、マルチdisciplinaryコードなど、複数の計算スキームを扱うようなシミュレーションにおいて、適材適所のプロセッサを用いた異機種分散並列処理による高速処理が考えられる。このような場合には、異機種間での負荷分散、スケジューリングや、通信最適化技術の研究が重要であるとともに、異機種システム上での分散処理をユーザに意識させずに効率良く処理を行うフレームワークの確立が重要である。また、オブジェクト並列処理とデータ並列処理を融合するアプローチの研究も重要となるであろう。

    (b)Reduced Programming Interface

     ペタフロップスマシンにおいては、性能が出るパターンが非常に限られる可能性がある。このようなシステムの上でFortranやCのような、汎用の何でも記述できる言語を提供するのは実際的でないかもしれない。このような場合には、言語仕様として、性能のでるパターンだけをユーザに書かせられる枠組みの研究が大切である。言語の記述性は制限されるが、ユーザは、この言語に従う限り性能が保証されるのであれば、安心してプログラミングができる。この方向としては、Fortranのサブセットとして定義された、プログラミング言語F[7]という研究がある。

    (c)ライブラリ指向プログラミング

     上記と同じように、ペタフロップスマシンでは、高性能が得られる計算パターンが、かなり限られる可能性がある。この場合、性能の出るパターンをライブラリとして提供しておき、ユーザはこれの組み合わせにより、すべてのプログラミングを行うかもしれない。並列化や性能上プログラミングの困難な部分は、すべてライブラリの中に隠蔽できれば、ユーザはこれらに頭を煩わされることなくプログラミングが可能になる。ライブラリだけですべての問題を解決できる可能性は低いが、少なくとも現在のScaLapack [http://www.netlib.org/scalapack/]のような並列ライブラリインタフェースとその実現に関する研究は今後ますます重要になると考えられる。

    3.2.3.3 わが国として取り組むべき課題(特に、国策として実行すべき課題)

     これまで、並列処理における言語インタフェースの研究は、主にコンパイラ研究開発者を中心に行われてきた。しかしながら、今後の高性能計算機における言語処理技術を発展させるためには、コンパイラ開発者と計算機ユーザとが緊密に連携した研究活動が重要である。米国でMPIの標準化活動を推進したのは、主にユーザが主体であったし、最近では欧州でも

    PHAROS[http://www.vcpc.univie.ac.at/activities/projects/PHAROS/]や
    HPF+[http://www.par.univie.ac.at/hpf+]

    といった、ユーザと言語研究者が一体となったECのESPRITプロジェクトが発足している。今後は前節[2]で述べたような研究課題を両者が一体となって進めるプロジェクトを国策として実行すべきであると考える。

    3.2.3.4 さらにどのような技術調査をすべきか

     今後重要であると思われる技術調査項目について列挙する。

    ◆タスク並列性/オブジェクト並列性とデータ並列性の融合
    ◆データ自動レイアウト技術
    ◆静的性能予測技術
    ◆アルゴリズム認識+チューニング技術
    ◆プログラミングツール
    ◆実用コードの並列化

     個人的には、この中で、実用コードの並列化例を可能な限り洗い出し、この中からペタフロップスマシンで性能が出ると思われる計算パターンを分類する作業が重要であると考える。

    <参考文献>

    [1]
    Message Passing Interface Forum, MPI: A Message-Passing Interface Standard, The International Journal of Supercomputing Applications and High Performance Computing, Vol.8, No. 3/4, pp. 165-416 (1994).
    [2]
    High Performance Fortran Forum: High Performance Fortran language specification, version 1.0, Technical Report CRPC-TR92225, Center for Research on Parallel Computation, Rice University (1992).
    [3]
    High Performance Fortran Forum: High Performance Fortran language specification, version 2.0 (1996).
    (http://www.crpc.rice.edu/HPFF/hpf2/index.html)
    [4]
    B. D. Martino, Design of a Tool for Automatic Recognition of Parallelizable Algorithmic Patterns and Description of its Prototype Implementation, TR 95-3, Institute for Software Technology and Parallel Systems, University of Vienna (1995).
    [5]
    R. Das, J. Saltz, R. von Hanxleden, Slicing Analysis and Indirect Access to Distributed Arrays, Proceedings of the 6th Workshop on Languages and Compilers for Parallel Computing, Portland, OR, August (1993).
    [6]
    U. Kremer, Automatic Data Layout for High Performance Fortran, Proc. Worksop on Automatic Data Layout and Performance Prediction, Rice University, April (1995).
    [7]
    W. Brainerd, C. Goldberg, and J. Adams, Programmer's Guide to F, Unicomp, ISBN 0-9640135-1-7 (1996).

    【次へ】