研究計画書 600P031-4 高木祐介 専門分野:情報科学 研究指導:並列知識情報処理研究 指導教員:上田和紀 研究題目:分散並行論理型言語の設計と実装 123456789012345678901234567890 1.研究目的 近年、コンピューティングの主流は単独のシステムから分散環境へ と移行しつつある。安価なPCを複数台接続した並列クラスタは1 台の専用並列機よりもコストパフォーマンスが高い。最高性能にお いても、例えばカリフォルニア大学バークレイのSETI@homeプロジェ クトはインターネットという分散環境を利用して、スーパーコンピュ ータを凌駕する計算能力を示している。 しかし、分散環境において複数のプロセスが協調しつつ処理を行な う分散アプリケーションの実装は、逐次アプリケーションの実装に 比較して非常に難しい。その理由は次の2つである。 a) 1つ目は分散アルゴリズムに関する研究が逐次アルゴリズムほど 蓄積されていないことである。逐次であることを前提として蓄積さ れてきた従来のアルゴリズムを不用意に分散アプリケーションに適 用すると、かえって効率が落ちることがある。 b) 2つ目は分散プログラミングのためのツールが未熟であることで ある。広く普及している手続き型言語の分散拡張は分散のための言 語機能がネットワーク透過でない。このため、逐次アプリケーショ ンの分散化に伴ってセマンティクスが変わってしまい、正当性が失 われることがある。 本研究では b) の問題を解決することによって、a) の問題を解決す るための基盤を整備することを目指す。具体的には並行論理型言語 KL1の分散処理系の設計と実装を行ない、正しい分散アプリケーショ ンを容易に構築するための環境を整備する。 2.従来の研究 並行論理型言語は変数が単一代入であるという点において純関数型 言語に近く、静的解析に望ましい特徴を共有している。また、並行 論理型言語は関数型言語や手続き型言語の並行拡張と異なり、並列 ・分散を含む並行な計算モデルが言語自体に内包されている。この ため、プログラムの並列化・分散化に伴ってセマンティクスが変わ ることはない。ネットワーク透過なセマンティクスと静的解析の容 易さという特徴を持つ並行論理型言語は、分散アプリケーションを 記述するのに最適な言語である。 KLICはKL1言語の並列処理系である。KL1言語は並行論理型言語の中 でも最も単純で最も研究の蓄積されたFlat GHCに基づいており、並 列化によってセマンティクスが変わることはなく、静的解析による 最適化や自動デバッグなどの研究が行なわれている。 Distributed Ozは並行オブジェクト指向言語である。単一代入変数 を用いる点において静的解析に望ましい特徴を持つが、並行スレッ ドをプログラマが明示的に操作する点において並行論理型言語より も純関数型言語に近い。 Javaは分散アプリケーションの記述に広く用いられている。インタ ーネット上のWWWサービスと連動してバイトコードを輸送・実行する 機能を持つが、プリミティヴには逐次の手続き型言語であるため並 行アプリケーションの静的解析は非常に難しい。 CORBAは分散オブジェクトのためのフレームワークである。KL1のプ ロセスはオブジェクトと見なすことができ、分散KL1をCORBAの枠組 に適応させることも考えられる。 3.研究計画 dklicはKL1言語の分散処理系である。KLICを下位処理系とし、dklic 自身をKL1言語で記述することによって実装の容易さと実用性を重視 している。 dklicの最終目標はネットワーク透過な広域分散コンピューティング 環境であり、その点ではCORBAに通じるものがある。既存分散環境と の最大の違いは、並行論理型言語の性質の良さを基礎に持つ点である。 分散環境では逐次・並列環境以上に通信の信頼性が低く、 外部から受け取ったデータや実行コードの正当性を検証するためには 静的解析の容易な並行論理型言語が有利である。 また、KL1の計算ノードの概念は計算機に限らず IPアドレスの振られた機器や計算機の部品(ストレージやビデオチップなど) のような広域分散環境に容易に敷衍することができる。 2001年度の本研究では、より普遍的な広域分散環境の構築を目指す。 以下では、遠隔述語呼び出しの実装の最適化、 ソケットインタフェイスの仕様と設計について順に述べる。 ●dklic処理系の改善 ・変数表の性能向上。 変数識別子の再利用を採り入れることによって変数表のワーキング セットが限定できることを期待し、データ構造をリストから配列へ 移行して定量比較実験を行なう。 ・遠隔述語呼び出しのための分散実行環境の再検討。 dklicはKLICを下位処理系とすることによってKLICの制限を受けてい る。具体的にはKLIC変数を識別することができず、分散実行環境の 最適化を進めることができない。 KLICにはC言語によってKL1言語を拡張する機能があり、これを利用 することによってKLICの制限を回避できる。しかし、KL1言語でなく 下位のC言語によってKLIC処理系を拡張することは、KLICのバージョ ンアップも考えると高コストで移植性が低いため、望ましくない。 本研究では分散環境における変数識別の機能とコストを模索し、安 価にKLICを拡張して変数識別機能を提供する方法を探る。 ・下位処理系をKLIC処理系だけでなくKLIJava処理系, KL1/J処理系へも対応する。 下位言語をUnix/CからJavaへ移行することによって、Windowsや Macintoshでも分散KL1プログラムが動作することを期待できる。 ●分散KL1におけるサーバとソケットのインタフェイスの再検討 逐次KL1サーバが併合器を用いて複数のクライアントに応対するのに対し、 分散KL1サーバはサーバソケットを用いる。 KL1の入出力ストリームに変数を含む項を流すことができない問題は 変数表の実現によって解消できた。しかし、信頼性の低い外部入出 力を内部通信と全く同じに扱うのは望ましくない。 ネットワーク透過な(内部通信に近い)セマンティクスを持ちながら フォールトトレラントな外部入出力の仕様と設計を検討する。 Unixにおけるプロセス、ファイル、ストリーム、サーバ、ソケット 等の概念を分散KL1に敷衍する。 例えば、具体的には: ・Javaのイベントモデルに相当する制御用のストリームを同時に提供 し、入出力ストリームを論理的に制御できることを確かめる。 ・クライアント/サーバ型のアプリケーションを書き、 ソケットインタフェイスの改善度を定量比較する。 ・変数の束縛情報の流れを制御することによって ファイルのセーブ・ロードや接続の中断・再開などの 永続プロセスを可能にする。 ・分散エージェントの良い例題を探し、それを分散KL1で実現する。