神戸大学PrologマシンPEKの資料

Table of Contents

1 概要

PrologマシンPEK (Prolog Engine of Kobe University)は, 論理型言語Prologを高速に実行するための専用計算機アーキテクチャについて研究を行うために試作したマシンであり, 1984年に完成した. 1982年に第五世代プロジェクトが開始されたこともあり, 当時はProlog専用計算機の開発が注目されていた.

images/pek.jpg

神戸大学Prologマシン PEK (当時の写真)

1.1 試作の目的

PrologマシンPEK (Prolog Engine of Kobe University)は, 論理型プログラミング言語のPrologを高速に実行するための専用計算機について研究を行うために試作した. 1982年に第五世代コンピュータ・プロジェクトが開始されたこともあり, Prologを高速に実行するための専用計算機の開発が注目されていた. Prolog言語の特徴として,ユニフィケーションおよびバックトラックがある. これらの実現をハードウェアでなんとかサポートできないだろうか, という点が大きな設計目標だった.

1.2 開発の時期

1983年の1月頃から概要設計を始め,8月にはハードウェアの詳細設計が終り, 年末にはハードウェアが一応稼働し始めたと記憶している. 比較的短時間であったのは,Lispマシンから始まる専用マシン開発の経験が生きていたのだと思う.

明けて1984年の5月頃までにハードウェアの修正を行い, プロトタイプのProlog処理系が完成し,簡単なプログラムが動くようになった. 年の終り頃には処理系全体が完成し,一応実験機としての完成を見た.

1.3 開発に関与した人々 (学部学生を除く)

  • 金田悠紀夫, 和田耕一, 田村直之, 小畑正貴, 小林久和, 綾部雅之, 宮本昌也, 日根俊冶

1.4 開発のエピソード,苦労話,裏話

振り返ると,「できるだけ高速に」をモットーに開発したおかげで, 同時期に開発された第五世代コンピュータ・プロジェクトの Prologマシン(PSI)よりも良い性能を出すことができたのはラッキーだったと思う (もちろん,PEKの方は小規模な実験機なので,一概には比較できないが).

ただ,その後Prolog処理系の方向は,専用マシンではなく, 汎用マシン上のコンパイラに向かっていった. 1984年にロサンゼルスで開かれたHigh-Level Computer Architecture のワークショップでPEKについて発表したところ, 同じセッションの次の発表がWAM (Warren Abstract Machine, 現在Prologコンパイラで標準的に用いられている抽象機械) についてのものだった点に歴史の皮肉を感じる.

実装上苦労した点は, 45cm×30cm程度の比較的大きな汎用基板にラッピングによって配線したために生じた基板の歪みへの対処であった. 微妙な歪みがエッジコネクタの接触不良を招き,初期の不安定さの一因になった.

ソフトウェア開発上で苦労した点は, PEKでは水平型マイクロ命令形式(96ビット幅)を採用していたため, 直接マイクロプログラムを記述するのはほぼ不可能に近かった. そのため,マイクロアセンブラ自体をPrologで記述し,パターンマッチでコード生成を行うようにした.

1984年の始めごろだと思うが,外部の方々がPEKの見学に来られた. まだ小さなプログラムが動く程度のころである. まだ,ホスト計算機との共有メモリへのアクセスが安定せず, 何度かプログラムを実行すると,かなりの確率でエラーとなっていた. そこで,デモは一回だけにしようと打ち合せていた. 一回目のデモはなんとか成功したのだが, なんと,デモ担当者はもう一度プログラムを実行してしまった. ところが,偶然(?)にもうまく動いたのである. 「デモは必ず失敗する」というマーフィーの法則の反例になったのが幸いであった.

1.5 応用例,使用経験と評価

PEK上でのPrologの実行速度は約40K LIPS (Logical Inference Per Second,一秒当たりの推論数)で, 同様の回路技術を用いてたLISPマシン上のProlog処理系と比較して2〜4倍の速度向上が得られた. 小規模な実験機ではあったが, ユニフィケーションのためのタグ・マッチング回路, バックトラックのための自動トレイル回路および自動アンドゥ回路など, ユニークな機能を実現していた点に特徴がある.

また,Prolog特有の処理を極力ハードウェアで支援する方針で設計したため, プロセッサ内部のモジュール間で, その処理を完了するまでの時間が大きく異なることになった. 実行効率を上げるために,アクティブになるモジュールの種別によって, マイクロ命令毎にデューティ比とサイクル長を動的に変化させる機能を持たせた.

1.6 その計算機はその後どうなったか

その後, Prologプログラムを直接マイクロプログラムにコンパイルする処理系などを開発するために用いた.

2 参考文献

3 その他の資料

?????

Date: 2014-12-25 01:07:48 JST

Author: 田村直之

Validate XHTML 1.0