標準KLICのゴール・スケジューリング戦略はResumption Firstと呼ばれるものであり, 中断状態のゴールがbody unificationによって実行可能になると,unify goalの sibling goalに優先してスケジューリングされる。この方法では,並行プロセスの間 で構造体を介した通信が行なわれる場合,構造体の部分的な生成のたびにゴールの中 断/再開が生じるという欠点がある[2]。我々のKLIC/THはこのような 問題点を解消することを目的の一つとしているが,スレッドのスケジューリングを標 準KLICに委ねていたため,同様の問題点が生じていた。
そこでスレッド・スケジューリングをReduction First, すなわちスレッド内のゴー ル実行を再優先とする方式に変更した。なおこの方法はMulti-PSIやPIMにおける Reduction Firstとはことなり,あるゴールのreductionが完了しても,そのゴールが 属するスレッドに実行可能ゴールが存在する限り,resumeされたゴール(スレッド) の実行は行なわれない。したがって前述の構造体を介した通信の際も,部分的な生成 によるスレッド切替を大幅に削減することができる。
このスケジューリング方式を簡単なサーバ/クライアント型プログラムを用いて評価
した結果,表に示すように標準KLICや従来のKLIC/THに対して約
5倍の速度向上が得られることが明らかになった。
? | 実行時間[sec] | 実行時間比 |
---|---|---|
オリジナルKLIC | 4.65 | 5.54 |
従来版KLIC/TH | 3.46 | 4.12 |
改良版KLIC/TH | 0.84 | 1 |