近年、並列計算環境のハードウェア的な基盤が急速に整備されつつあるのに対 し、ソフトウェアに関する課題は山積しており,特に高い性能を発揮するプロ グラムを容易に開発する技術が強く求められている。そこで、KL1をはじめと する並行/並列型のプログラミング言語が期待されている。これらの言語は、 プログラムの並行性/並列性の記述を言語の基本的プリミティブとして備えて いるため、並列処理にともなうバグ混入を最小化できるという特質を持つ。ま た、並行/並列プロセスのネットワークを自然に記述できるため、所謂データ 並列に留まらない多種多様な応用とプログラミング・パラダイムに対する高い 包容力も有している。
しかしながら、並列処理の重要な側面である高速性の観点からは、これらの並 行/並列型言語の処理システムの性能は十分とは言えない。この性能上の問題 点の大きな理由に、言語の本質である並行性制御にともなうオーバヘッドがあ る。KL1はその端的な例の一つであり、各々のゴールが並行実行の単位である ため、ゴール・スケジューリングの方式がプログラムの性質に適合していない と、本来逐次的に実行するのが最適な部分を並行実行するなど、無駄な処理に よるオーバヘッドが著しく大きくなる場合がある。
本研究の目的は、KL1のゴール・スケジューリングを個々のプログラムに対し てできるだけ適合させることができる、コンパイラとランタイム・システムを 得ることにある。
一般に並行/並列型プログラムのスケジューリングでは、逐次実行が最適であ るようなシーケンスを発見し、それを逐次的に実行する逐次化が重要である。 例えばKLIC [1]などこれまでのKL1 処理系では、プログラムを深さ/左優先に実行するのが逐次化の最適シーケン スとみなしている、と考えることができる。しかしプログラムの性質が、この ような単純な推定には適合しないことが普通であり、様々な性能上の問題点が 発生する。したがって、コンパイル時により詳細な解析を行って、プログラム の性質に適合した逐次化を行うことが、まず第一の目的となる。次に、適切に 逐次化されたプログラム断片を効率的に実行するには、本質的な並行動作との 関係などによる逐次実行の中断に対して、最小のオーバヘッドで対処できるよ うにすることも必要である。この実行メカニズムを求めることが、本研究の第 二の目的である。