next up previous contents
Next: サイクリック割り付け Up: 4 優先度と負荷分散 Previous: 4.7 負荷分散制御の利用目的

4.8 ゴール分散の指定方法

ゴールの負荷分散の指定は, ボディの各ゴール毎にどのノードで実行するかを 次のようにして指定する.

goal@node(ノード番号)

なお, ノード番号は0以上の整数であり, ノード数は実行する環境に より異なる. そのノード数を得るには次のような組込み述語を用いる.

current_node(PE,N)

なお, ここで PE はこの組込み述語が実行されたノードの番号で, N はノード数のことである.

では, ここで簡単な例を用いて負荷分散の具体的な指定方法を説明しよう. 次のプログラムは, ゴール a をノード 0 と 1 と 2 に投げたもので, ノード番号は整数で指定する.

:- module foo.

        foo:- true |                    %(1)
                a@node(0),              %(2)
                a@node(1),              %(3)
                a@node(2).              %(4)

また, 変数を用いてノード番号を指定することもできる.

:- module foo.

        foo(P0,P1,P2):- true |          %(1)
                a@node(P0),             %(2)
                a@node(P1),             %(3)
                a@node(P2).             %(4)

なお, ゴールを別ノードに投げた後には, そのゴールは元と 同じ優先度で実行される. 従って, 例えばノード0で優先度1000 で動いていたゴールはノード1でも優先度1000で実行される. その時ノード0では優先度1000以上のゴールがなかった場合には, このゴールはノード1では直ちに実行される. しかし, 投げた先のノード1では 優先度2000のゴールが忙しく実行されているかも知れない. その場合, 投げられたゴールはすぐには実行されない. 優先度制御を行なっている場合には, このようなことが起こり得るということを覚えておこう.

なお, ノードの割り付け方法には色々あるが, 幾つかの代表的なものを 例にして, 負荷分散制御の方法を実際のプログラムでみてみよう.





next up previous contents
Next: サイクリック割り付け Up: 4 優先度と負荷分散 Previous: 4.7 負荷分散制御の利用目的



KLIC