next up previous contents
Next: 1.2 構文と実行機構の基本 Up: 1 KL1 入門 Previous: 1 KL1 入門

はじめに

KL1 という言語の特徴をひとことで言うならば 記号処理を並列に行な うための言語ということになる.

数値処理にくらべて記号処理では, 複雑に絡み合うデータを取り扱う必要があ ることが多い. このため, こうしたデータをどのようなデータ構造で表現す るかが重要になる. また, そうしたデータ構造をどのようにメモリ上 (ある いはディスク装置上) で管理するかも問題である. こうした管理にプログラ マが多くの労力を割かずに済むように, 言語システムで基本的な機能を用意し て, もっと本質的なプログラミングに集中できるようにしよう, というのが記 号処理言語の考え方である. 具体的には, 一意性のあるものに名前をつける と自動的に一意な表現を与えてくれる 記号アトムの機構や, 標準的なデー タ構造についてそのためのメモリ割り付けや解放の労力を減らしてくれる 自動メモリ管理機構などが, 代表的な特徴である. この点, KL1 は代表的な 記号処理言語である Lisp 一族と同様の機能を提供している.

並列処理のためには, 全体の処理を複数の部分処理に分割して, 必要なところ では部分処理間の同期を取りながら計算を進める必要がある. このために, 逐次処理言語に並列実行を指定する機構と同期のための機構を追加し, 並列処 理にも使えるようにした言語 (あるいは OS の機能まで含めたシステム) は数 多い.

こうしたアプローチにはふたつの大きな問題点がある. ひとつは, もともと の言語の設計の原則は逐次処理のままなので, 並列に実行できる部分をいちい ち指定しなければならないことである. このため, 同じプログラムをプロセ サ台数の大きく異なるハードウェアで共通に使い, しかも効率良く動かすよう にすることが難しく, ハードウェアごとにプログラム全体をかなり書き直す必 要が生じる. まして, どのような並列処理が適当なのか良くわからない問題に ついて, 実験を積み重ねながら並列処理の仕方を模索していくような場合, そ のたびにプログラムを書き直してデバッグし直すことになり, 多大な労力が必 要になる. もうひとつは同期処理の面倒さである. 同期の必要性を意識しな がらのプログラミングは非常に厄介であるし, 同期にバグが入ると, そのバグ がどのように表面化するかに再現性がない (実行するたびに違う現象が起きる) ことが多いので, デバッグは非常に困難になる.

KL1 は逐次処理に並列実行のための機構を付加するという方法で設計した言語 ではない. 最初からすべてが並行動作することを前提とした言語である. こ うすると非常に頻繁な同期が必要になるのだが, データフロー同期機構 を導入して同期を自動化することによって, プログラマによる同期の誤りが入 り込む可能性を排除している. 物理的な並列実行の指定は別途 プラグマ と呼ばれる記述によって行なう. プラグマはプログラムの正当性 gifを変えないように設計してあ るので, 並列処理の仕方を変えるたびにデバッグし直す必要がない.

こうした KL1 の特徴のおかげで, 並列処理ソフトウェアの研究開発の労力は 非常に軽減される. 同じプログラムのプラグマ部分を変更するだけでさまざ まな並列実行の仕方を指定できるので, いったんバグを取ってしまえば並列実 行指定を変えるたびにバグに悩まされる必要はない. このため第五世代コン ピュータプロジェクトでは, 並列処理のもっとも困難な課題である負荷分散方 式の研究などを, 数多くの実験を行ないながら実証的に進めることができたわ けである.



next up previous contents
Next: 1.2 構文と実行機構の基本 Up: 1 KL1 入門 Previous: 1 KL1 入門



KLIC