マルチプロセッサ・コンピュータ技術領域における研究開発状況
■はじめに マルチプロセッサ・コンピュータ技術領域について説明させていただく日立分散研の菊池です。平成9年度における当領域リーダを務めさせていただきましたので、研究開発状況を紹介いたします。 我々のテーマは、平成9年度にRWC後期テーマの一つとして新たにスタートしたテーマでして、現在、約1年が経過しています。この領域では、日立研究室、富士通研究室、それからこの両研究室から再委託をしている早稲田大学の笠原教授へ多くの研究開発をお願いしています。 日立研究室では、マイクロプロセッサを要素プロセッサとするマルチプロセッサ向けのコンパイラ技術ということで研究開発を進めています。富士通研究室では、ベクトルプロセッサを要素としたマルチプロセッサシステムのコンパイラ技術の研究開発を進めています。基本は、マイクロプロセッサ、あるいはベクトルプロセッサということで異なりますが、広くコンパイラ技術という観点で見ますと、似たような技術開発が当然必要になってくるわけです。従って、この技術領域の運営上の基本方針は、協調と競争ということで進めています。 今回、私がお話をさせていただく内容のオーバービューですが、一つは背景ということで何故コンパイラ技術なのかということを少しお話しして、その後我々の領域の目標とアプローチについて紹介させていただきます。次に、我々が一つ大きな目標としているマルチグレインの並列化コンパイラの構想、それからそれを進める上での実験評価環境、最後に各研究室の研究開発状況を説明します。
■ プロジェクトの位置づけ
 図1
まず、HPC、ハイパフォーマンス・コンピューティング分野における位置付けということで少し話をいたします(図1)。ハイパフォーマンス・コンピューティングというのは、並列アプリケーションと並列アーキテクチャ、それからもう一つ、我々が進めている並列化コンパイラ、この三つが三身一体の関係で高性能を実現できるものだと考えております。言うまでもなく並列アプリケーションがなければあとの二つはただの箱の中におさまっているだけですので、アプリケーションが存在するというのは非常に重要なことです。もう一つアプリケーションにおいて重要なのは、並列性がなければいくらコンパイラが頑張っても所詮、並列には実行できないので、並列プログラムやアルゴリズムの技術開発です。広義でいう並列アーキテクチャと並列化コンパイラ、この二つは最近非常に密接な関係が出てきています。コンパイラがもしなかったらどうなるかということですが、この場合アプリケーションとしては困るわけでアセンブラとして書かなければならないという状況が起こります。そういった意味で従来と同じように、コンパイラというのはやはり高級言語でプログラミングして、それをハードウェアにマッピングするためのトランスレータとしての位置づけが相変わらずあるわけです。 最近はこういうハイパフォーマンスなコンピューティングを実現するためのアーキテクチャとコンパイラとの関係、何をコンパイラでやらせて、何をハードウェアでやらせるのかといったところが性能を決定する上で非常に大きな要因をしめてきています。これを一言で言うと、コンパイラ技術の高度化につながるわけです。これをちょっと独断と偏見で、技術的な面とビジネス的な面とで見てみます(図2)。
 図2
まず技術的には、特にマイクロプロセッサは非常にこういう傾向が強く、物量を投入した従来型の高速化技術の限界といったものがやはり見えてきている。一つは、ハードウェアの複雑化と大規模化、それから消費電力が増大すると、ハードウェアの開発が長期化して、それにともなって開発コストが非常に大きくなるといったような問題が深刻になっています。これを解決する一つの大きな流れは、ハードウェアの機能をコンパイラにシフトして、ハードウェアをなるべく軽くしてやろうという流れです。すなわち、こういうような状況のもとでは、コンパイラでの実現可能性がいろいろな論理の公式を決定する上での非常に重要な要因になっているということです。 事業化という面から一言でいってしまうと、市場競合力の高いマルチプロセッサシステムという形になるわけで、価格対性能比です。マルチプロセッサなんだから、もう少し利用効率を上げたいなとか、もっと簡単にプログラミングできないのか、あるいはもっといろいろな応用に適用できないのかなといったような面、もちろんこういったものだけではなかなかビジネス的には難しくて、これ以外にも様々な要因があるわけです。このようなニーズの中からコンパイラに関わる話を抜き出すと、ハードウェアの性能を引き出す技術ということと、やはりコンパイラ、逐次プログラムを書いたら後はコンパイラでなんとか自動並列化してもらえないかといったようなニーズが根強く残っているわけです。 このような背景の中にあって、我々のMPCマルチプロセッサコンピューティング領域の目標とアプローチを二つ挙げております(図3)。
 図3
■
MPC領域の目標とアプローチ 一つは、世界初のマルチグレインな並列コンパイラを実現することです。具体的には、商用の並列マシンで、これから後、プロジェクト期間として4年弱くらいあるわけですが、その間にさまざまなマルチプロセッサシステムが出てくると思いますので、その上で是非、世界最高性能を達するようなコンパイラ技術を開発したいということです。 それからもう一つの柱は、次世代のコンパイラ要素技術の先行開発ということで、そんなに遠くはない将来、シングルチップのマルチプロセッサが出てきたときに、そのアーキテクチャ的な面も含めて、どういうコンパイラ技術を見ながら先行的にやっていったらいいのかという観点です。ここに示したように命令群を並列化するとか、スケジューリングするとか、ハードウェアでやらないでコンパイラで何か並列の制御をしてやろうとか、あるいはより性能を出すための並列化の支援的なアーキテクチャの提案といったようなものの検討を進めています。 今日のメインのマルチグレインというのは、命令のような非常に細かな粒度のものから、ループとか手続きとかいったかなり大きなグレインレベルまでの並列性を引き出すための技術のことです。それからもう一つ重要なのはデータをローカライゼーションする技術です。将来の大型計算システムやハイパフォーマンス・コンピューティングのシステムにおいて、共有メモリというのはやはり何らかの形で限界があるので、どうしても分散メモリという方向に向かわざるを得ないわけです。そういった時にもこの技術は非常に重要になりますし、もう少し小さなマイクロプロセッサとか、プロセッサ単位で見てもキャッシュをどう扱うかというのは性能上深刻な問題になっています。 それから、こういった並列性をハードウェアにマッピングするような技術と、もう一つ、これは後ほど詳しくご説明いたしますが、オープンMPという共有メモリ向けのコンパイラへの指示分の仕様があります。このオープンMPというのは現在アメリカで標準化が進められています。これを拡張することによって分散メモリ型の並列計算機とかクラスタシステムにも適用するような仕様にし、それを共通のAPIとして各分散研のコンパイラあるいはハードウェアプラットフォームを統合して、これから始める各種の研究開発成果を評価する環境を作ろうということです。
■ 国内外の状況
 図4
主に実用化というか商業化というレベルで書いてありますが、現状のマルチプロセッサ向けの並列化技術、実用化状況という意味では、やはりループに限定されています(図4)。しかも手続き呼び出しがあるケースというのはあまり十分な並列化能力が発揮されていません。ですから多くのマルチプロセッサを搭載したシステムであっても、ループにしかマルチプロセッサは有効に活用できていないということがあります。言いかえれば、ループ外のコードは、マルチプロセッサシステムという意味では並列化の対象外になっているということです。そこでもう少しマルチプロセッサシステムの性能を引き出し、有効活用しようということで、マルチグレインの並列化技術に取り組もうとしているわけです。
■
実験評価環境 この分野の再構築は、早稲田大学の笠原先生の研究室が長年研究開発を進められていますので、そのあたりの智恵をいろいろ借りながら進めたいと考えています。一つの形として考えているのは、マルチグレイン並列化コンパイラです(図5)。
 図5
これは逐次のソースプログラムを入力して、この国家プロジェクト等で開発するループの並列化技術、あるいはタスクの並列化技術といったものを、一旦、オープンMP、ここでプラスと書いてあるのは、先ほどのオープンMPに拡張の仕様を加えたものという意味ですが、これを含んだような並列プログラムに逆変換し、このレベルでいろいろな並列化の結果を表示するようなことを考えています。これは、別の見方をすると、並列化の支援環境の一旦を担うようなことになるかと思います。 こういったループの並列化、タスクの並列化技術の評価そのものは、ここのソースプログラムに変換したレベルで、いろいろ評価できるのではないかなと考えて、このような形態をとろうということにしています。オープンMPそのものは、このプラスをとってしまえば、かなり標準的な仕様としてこれから普及してくると思いますので、いろいろなマシンで実験、あるいは評価できるだろうと思います。ここに各社のマシンが書いてあります。こういったマルチプラットフォームで、ここのあたりで開発した技術開発はできるだろうと思います。 もう一つ、マルチグレインということになりますと、命令の並列化というものが出てくるわけです。これはやはりハードウェアディペンドでありまして、それなりのコンパイラを通せば、それなりの並列コードは出てくるわけですが、特定の並列計算機にかなり特化されないと良好な性能が出ないという側面が非常に強い領域になっています。このあたりはどうしても、富士通分散研、あるいは日立分散研、笠原先生の研究室にしても、自社のプラットフォームに最適化するようなアプローチになるかと思います。しかしここで並列化したプログラムというのは、いろいろなところでお使いいただけるのではないかと思っています。 これから研究開発を進めていく上で、我々の共通のプラットフォームとして考えているのが、この図です(図6)。
 図6
共通のAPIということでオープンMP+拡張仕様したものの、ここは並列プログラムになるわけですが、それを各研究室のコンパイラが入出力できるような環境にして、各コンパイラがネイティブコードに落として、各研究室のハードウェア・プラットフォームで性能等の評価をするといったようなことを考えています。もう少し具体的に例を示すと、ソースプログラムを富士通、あるいは日立のコンパイラで並列化する。そしてその結果を一旦オープンMPの並列プログラムに落とし、これを例えば笠原研究室のタスク並列化技術で並列化し、結果をまたここに戻して、その後は各社のコンパイラで各社のプラットフォーム上で評価をするというような使い方ができるのではないかなと思っています。最終的にはこういうループの並列化とかタスクの並列化の技術というものをひとつの形で各社のコンパイラのプラットフォーム上にインテグレートするということを考えています。 オープンMPがキーになっているわけですが、平成10年度がスタートした時点で、オープンMPのコアの標準の仕様の出力、要するに並列化したコンパイラの中で並列化した結果を並列プログラムのソースプログラムに変換するパスの開発をしています(図7)。
 図7
平成11年度には、入力部分を開発します。従って、標準という意味でのオープンMPは、11年度末に各研究室のコンパイラでサポートしたいと考えています。 拡張仕様の方は、これから仕様の検討をしてまいりますが、かたや標準化という形でも進んでいますので、そちらの状況もよく見ながら進めたいと思っています。拡張仕様の検討をして平成12年度に入出力の開発をする予定です。具体的には拡張仕様の詳細はまだ議論していませんが、データの分散、分割の仕様やタスクの並列化などをコンパイラに指示できるような仕様を検討していきたいと思っています。
■
各研究室の状況 ここまでで領域全体の話は終わりにして、次に各分散研の課題とアプローチと平成9年度の成果状況について説明したいと思います。 1.日立分散研究室
 図8
日立研究室では、課題を大きく3つほどあげています(図8)。一つはマルチプロセッサ利用効率の向上です。もう一つは分散メモリ、これは物理的にという意味ですが、物理的にメモリが分散した形の並列計算機をもう少し利用できるようにしよう、簡単に使えるようにしようということです。それからもう一つはCPUとメモリの性能のギャップを減らしましょうということ。このあたりは最近のマイクロプロセッサはCPUのクロック周波数が上がっていますが、DRAMの性能がさほど追いついていないので、メモリの性能がマイクロプロセッサの性能を決める一つの要因になってしまっています。まず、マルチプロセッサの利用効率の向上ということですが、ここは先ほどちょっと申しましたが、現状はやっぱりループに限定されているという話です。更にもう少し突っ込んでいうと、ループの中にサブルーチンコールがあるようなケースですと、並列が上手くできないということです。 これに対するアプローチとして、一つは手続き間でループの中に手続きの呼び出しがあっても並列化できるような技術。これはプログラム全体を解析するような技術開発が必要になります。それからループに限らず、ループ以外の行動も含めた形で並列化するという意味でタスクの並列化技術といったものを開発していきたいと思っています。 それからもう一つは細粒度並列化と呼んでいますが、シングルチップのマルチプロセッサという意味で、細粒度とタスクという名前をつけましたが、命令の集まりを各マイクロプロセッサの上で実行させてやろうといったような技術開発をしております。 それから二点目ですが、現状の分散メモリ型の並列計算機ではMPIとかPVMといった通信ライブラリを使って並列プログラムを書かなければならず、これは例がいいかどうかわかりませんが、基本的にはアセンブラでプログラムを書くのに近いレベルになっており、なかなか素人はとっつきにくいのではないかなと思います。もう一つはハイパフォーマンス・フォートラン(HPF)というフォートランに並列のいろいろな指示文を追加したような仕様ですが、これが出てきてからかなり時間がたつわけですが、なかなか実情通りにはなっていない。やはり一般のユーザから見ると少し難しいかなという面があるかなと思います。それからもう一つはDSM、論理ディストリビューティドシェアードメモリ、こういったような機構を備えた並列計算機といったものが世の中に出てきています。こちらは共有メモリのプログラムがそのまま実行できるという意味で非常に使い勝手はいいわけですが、やはり性能を狙おうとすると、現状ですと4台ないしは8台で急激に性能が下がってくるという問題があります。この機構そのものはこれからどんどん技術開発が進められていきますので、スケールアビリティという面では良くなっていくのではないかなと思われます。しかし、やはり遅いリモート参照というのが最後まで残ってくるだろうと思われます。そういったわけで、基本的にはこちらは物理的にはメモリは分散しているわけですので、分散メモリということを考えると、やはりデータをローカライズする機能が必要になります。データをどう各プロセッサに分割するかといった話、それに従ってループをどう分散するか、あるいはプロセッサ間の通信をどうするか、こういった技術開発が必要になってきます。我々はデータローカライゼーションという一言で代表させていますが、こういう三つの技術を含めた形で進めていきたいと思っております。 それから三点目はデータのプリフェッチです。要するに実際にデータを使う前に、主記憶からキャッシュに持ってこようというアプローチが多くとられています。しかしキャッシュそのものは容量が限られていますので、科学技術計算のような大規模なプログラムを実行した場合には、せっかく持ってきたデータが、次のプリフェッチで追い出されてしまうといったようなキャッシュポリューションの問題が起きてきています。 あともう一つは、これは日立のSR2201等で使った、キャッシュをバイパスするという技術です。ところがキャッシュをバイパスしますと、一旦先行的に持ってきたデータをずっとレジスタに保持しなければならないという問題があります。これはこれでレイテンシが伸びてくる、レジスタの消費量が爆発するという問題があります。そこで我々のアプローチとしては、キャッシュをもう少し上手くソフトウェア、具体的にはコンパイラですが、制御してやろうと、プリフェッチとプリロードといったようなものをデータの参照特性に合わせて使い分けようという技術、それからコンパイラから見て、どういったキャッシュだったらいいのかというところを検討していこうと思っています。
 図9
平成9年度における成果の概要ですが(図9)、マルチグレイン並列化技術ということでは、実時間の並列化技術というものに取り組んでおりまして、データフロー解析技術の高度化、これまでと違って線形不等式という、表現形式を使ってデータフローを解析する技術ですとか、並列化の変換技術としてはいろいろと並列ループを開始、あるいは終了する時に初期値を入れたり、条件付きで終値を保障するといった技術開発をしてきました。 それからシングルチップ向けという意味では細粒度、中粒度の並列化技術ということで、こちらで並列化の検出の終わったループを、シングルチップのマイクロプロセッサのループにマッピングするような技術ですとか、プロセッサ間でデータをやりとりするような技術開発を進めてきました。あとはシミュレータです。これは基本的には我々のシングルチップマルチのVLIWを少し拡張したようなアーキテクチャを考えておりますので既存のシミュレータを拡張するといった形で仕様のシミュレータを作ってきました。 データローカラリィゼーションにつきましては、手続き単位でデータを分散するための基本技術の開発をしています。それからあともう一つはDSM機構、これはSGIのOrigin2000を使いまして、現状の一つの代表例だと思いますが、DSMを使ったマシンがどういう特性を持っているのか、その時にどういったコンパイラ技術が必要なのかといったようなことを調査する目的で、特性の分析を進めてまいりました。 メモリ参照につきましては、どうやってキャッシュメモリを活用するかといったところの検討を進めています。
2 .富士通分散研究室 次に富士通研究室、ここからは各研究室及び再委託先からいただいたレシピで説明させていただきます(図10)。
 図10
富士通研究室では、並列化基盤技術と分散型マルチプロセッサ、DMP、ディストリビューティド・メモリ・マルチプロセッサですが、これ向けの技術開発ということでスケジューリングと並列化支援アーキテクチャ技術を研究しています。こちらは基本的にVLIWをベースにしたプロセッサでベクトル計算機のスカラプロセッサにVLIWのものを使った時にどうなるのかといったようなことを検討しています。スケジューリングについては現状、命令レベルということで行われているわけですが、それを並列のタスクレベルまで押し上げようということで進めています。あと、支援のアーキテクチャということでは、プレディケーションと呼ばれるものですが、条件付きの実行ですとか、先ほどちょっと申しましたプリフェッチといったものが現状いろいろ行われています。それにもう少しシングルチップマルチプロセッサということを考えた時のアーキテクチャ的な支援技術を考えていこうということで進めています。ただDMP向けの方につきましては、現状の商用のコンパイラの多くはやはりまだフォートラン77レベルしかサポートできていないのが実情でありまして、最新のフォートラン90というのがなかなかうまく最適化できていないということがあります。こちらの分散研ではフォートラン90といったものを上手く並列のマルチプロセッサシステム上で動かすための技術開発をしております。プログラム開発支援につきましては、現状人手によっていますデータの分散を自動で分散するといったようなところに取り組んでいます。
 図11
富士通研究室の成果概要ですが(図11)、昨年度と今年度はスケジューリング技術ということで、ソフトウェアバイパス方式、これは、通常はハードウェアがバイパスをするわけですが、それをコンパイラのレベルでパイプラインを読みきってバイパスをさせようという技術です。これによってレジスタの容量を抑えるといったような効果が見込まれます。それから並列化支援アーキテクチャ、先ほどVLIWをベースにと言いましたが、VLIWの場合はやはり命令レベルでNOPがたくさん入って、非常に高度効率が悪くなりますので、富士通ではそれをどうやって圧縮するか、圧縮して実行時にそれを展開しなければならないわけですが、その時のハードウェアのコストを評価する形で研究開発を進めています。DMPという意味では先ほどの並列フォートランの90ベースですが以前に開発した実行論理を拡張する形で、コンパイラの検討、開発を進めています。この説明は、後ほどの発表で触れられると思います。
3.早稲田大学笠原研究室 最後に、早稲田大学笠原研究室の研究概要を説明します(図12)。
 図12
マルチグレイン並列化技術ということでは手続き間の解析技術、こちらの方は日立の分散研とはちょっと違ったアプローチをとっていまして、解析時に関数をインライン展開してしまおうというアプローチです。ちなみに日立の分散研の方はインライン展開しないでサマリー情報をいろいろ解析した後でそれらを集めて解析するというアプローチです。あとクローニング、これは関数をコピーする技術ですが、ここでは省略します。パーフェクトベンチマークは世界標準のベンチマークですが、ここでこれまで研究されてきたマルチグレインの並列性の技術が、アーク2Dというベンチマークで非常にスケールの高い性能を発揮するということが確認されています。 それからデータのローカライゼーション。マクロデータフローと呼ばれるグラフ上の単一データ依存一致で結合されたループでデータと処理を分散して処理を割り当てるという技術ですが、そこでこういった二つのベンチマークで20%以上性能が向上することが確認できました。 それからスケジューリング問題ですが、実行時間最小で並列タスクというか、タスクをマルチプロセッサにスケジューリングするといった問題を扱っています。ここでは開発された並列最適化アルゴリズムで、実時間である程度求解が可能ということを確認しています。 それから、シングルチップアーキテクチャにつきましては、マルチグレイン並列処理、これまで研究してきたこういった技術をベースにアーキテクチャの基礎検討を開始していただいています。 以上、概要を説明させていただきました(図13)。
 図13
|