Up: 「KLICの実行時システ
ムの改良・拡張」に関する成果概要 Previous: 研究の内容
研究上の成果
- 世代方式ガーベジコレクタの実現
- KLIC に対する世代方式のガーベジコレクタとしては、第五世代コンピュー
タの研究基盤化プロジェクトにおいて、設計・部分試作されたものがあった。
この設計について見直しを行なったところ、世代間の参照を管理するアルゴリ
ズムに問題があり、複雑な挙動をするプログラムに対してはそのままでは正し
く動作しない場合があることがわかった。
この結果に基づき、新たな世代間参照管理アルゴリズムを設計、従来のアルゴ
リズムの問題点を解決し、機能を拡張したアルゴリズムを設計した。
- デバッグ機能の強化
- KLIC の従来持っていた処理系レベルでのトレース機構に加えて、KL1 自
身で記述したデバッグ機構を実現するために、KLIC の持つジェネリック・オ
ブジェクトの枠組にしたがって、ゴール・オブジェクトと呼ぶ、新たなメタレ
ベル機構を導入した。この機構により、実行可能なゴールをデータとして管理
しながら、ゴールの子ゴールへのリダクションは KLIC 処理系に任せることが
可能になった。また、データ不足による実行中断、ゴールのリダクションやユ
ニフィケーションの失敗などの処理を、処理系の低レベルで行なうのではなく、
ゴールを管理する KL1 プログラムに報告することが可能になった。
このゴール・オブジェクトを用いたステッピング・トレーサを試作し、処理系
レベルでのトレーサと同等の機構を実現することを通じて、ゴール・オブジェ
クトの機構が柔軟なトレーサの実現機構として妥当なものであることを確認し
た。
- 自動負荷分散機構の実現
- 単純な負荷分散を行なうと、通信量や通信頻度の増加が生じ、かえって
計算速度の低下を招くおそれが強い。そこで、プログラム中に負荷分散候補と
なるゴールを指定することによって、通信負荷を抑制しながら負荷分散を実現
する方式が従来から試みられている。
本研究においては、通信負荷の増大を最小限に止めるために、あるワーカ・プ
ロセスで生じたゴールは、なるべくそのワーカ・プロセス内で処理するような
負荷分散モデルを設計した。この実現のために、各ワーカ毎に負荷分散単位
(「タスク」と呼ぶ) を管理するプロセス (ローカル・マネージャ) を置き、
全体としてワーカ間での負荷調整のためにワーカの忙しさを管理するプロセス
(グローバル・マネージャ) を置く管理方式を設計、実装を通じて設計の妥当
性・有効性を確かめた。
- 上位レベル言語の設計
- 従来の KL1 上にオブジェクト指向言語を構成する試み (A'UM, AYA など)
は、いずれもプロセス指向のプログラミング・スタイルをそのまま言語機能と
して取り込む設計をとっていた。この方法は全体として統一性の高い構成にな
る利点がある一方、KL1 とは外見上まったく異なる言語となることから、従来
から KL1 でプログラミングしてきたユーザに受け入れられにくいという欠点
があった。
この点を克服し、KL1 プログラムとの親和性の高い言語とするために、オブジェ
クト指向言語の諸機能の内、継承機能に焦点を絞った言語を設計、これを実装
し、KLIC の段階的な拡張の一方向を示した。
ソフトウェアとしての成果
- 世代方式ガーベジコレクタの実現
- 今年度は既存の部分試作システムの見直しと、アルゴリズムの再設計に
止まり、ソフトウェアとしてまとまった成果を出すには至らなかった。
- デバッグ機能の強化
- 以下のふたつのモジュールからなる。
- 自動負荷分散機構の実現
- 自動負荷分散機構を実現する管理機構を KL1 自身で記述したもの。自分
で実行すべきタスクがなくなったワーカ上のローカル・マネージャが、グロー
バル・マネージャにその旨を報告すると、グローバル・マネージャが、タスク
を多く抱える他のローカル・マネージャに通知して、タスク単位の分散を行な
わせる方式を取っている。
また、分散候補ゴール指定を付加記述した KL1 プログラムを、この管理機構
下で実行するのに必要な形式に自動変換するツールも提供する。
- 上位レベル言語の設計
- 継承機構を持つ上位言語のプログラムを、通常の KL1 言語プログラムに
変換するコンパイラ。変換後のプログラムは通常の KLIC 処理系でコンパイル・
実行できる。
この他にも、処理系の比較的細かな諸点について数多くの改良・拡張や、バグ
修正などを行なってきた。
残された課題
- 世代方式ガーベジコレクタの実現
- 設計したアルゴリズムに基づく世代方式 GC の実装と、その評価が課題
として残されている。
- デバッグ機能の強化
- 試作したステッピング・トレーサには、以下の点で改良の余地が残され
ている。
- 処理速度の改善。現状では、ブレークポイントを指定した実行など、ユー
ザとの対話が不要な場合も、ゴール・オブジェクト機構を用いたステップ実行
を KL1 プログラム・レベルで繰り返している。このため、処理系の低レベル
で実現したトレーサに比べてかなり低速である。速度の改善のためには、ゴー
ル・オブジェクト機構自体の機能拡張も必要と考えられる。
- トレーサ機能強化。処理系の低レベルで実現したトレーサと同様の機能
が実現できることは示せたが、さらに柔軟なトレース指定などが可能なような
拡張が望ましい。トレーサが KL1 自身で記述されていることから、このよう
な拡張に大きな困難はないだろうと予測される。
- 自動負荷分散機構の実現
- 実現した負荷分散方式の評価は未だ不十分である。また、ほぼ同じ枠組
でも細部で異なるさまざまな方式が考えられることから、そのような諸方式を
実現し、比較評価する必要がある。
- 上位レベル言語の設計
- 実装した処理系を、実際にプログラミングに用いて評価する必要がある。
また、その結果に基づき、実行時システムにどのような改良・拡張を施すこと
がこうした上位レベル言語の実現に役立つかを検討していく必要がある。
評価
上述のように全体として実装・評価に不十分な点が少なくない。この主原因は、
今年度の年度途中から開始したばかりの研究であるため、研究担当者のシステ
ムの理解に時間がかかり、研究にかける時間が不足していた点にある。
しかしながら、KLICの実行時システムについて、さまざまな面からの改良・拡
張の試みを行なうことができ、今後の研究の道筋をつけることができた成果は
大きいものと考える。
www-admin@icot.or.jp