next up previous contents index
: Quick Sort : OpenXMと分散計算 : OpenXMと分散計算   目次   索引

OpenXM Asir server

関数 ox_launch を引数なしで実行すると, OpenXM Asir server (ox_asir) が起動する. 同時に, メッセージ表示用ウィンドウが現れる.

[0] Id0 = ox_launch();
0
戻り値 0 が, ox_asir を識別する番号で, その後の通信で必要となる. ox_asir は複数立ち上げることも可能である.
[1] Id1 = ox_launch();
1
[2] Id2 = ox_launch();
2
ox_asir を終了させるには, 識別番号を引数にして ox_shutdown() を実行すればよい.
[3] ox_shutdown(Id1);
0
対応するメッセージウィンドウが消えるはずである. あるいは, Asir 自体を 終了させれば, 全ての ox_asir は自動的に終了する. ox_asir の機能自体は通常の Asir と全く同様であるが, という点が異なる. ox_asir に対する関数実行は, ox_rpc() で 行う.
[10] ox_rpc(Id0,"fctr",x^10-y^10);
0
[11]
即ち, Asir における xxx(Arg0,Arg1,...)ox_rpc(Id,"xxx",Arg0,Arg1,...) とすればよい. ファイルのロードも ox_rpc(Id,"load","filename") でできる. 即ち, キーボードから 入力したい内容をファイルに書いて, それをロードさせれば, 通常の Asir と何らかわらないことになる. ox_rpc() は, ox_asir での実行終了を待たないで すぐに復帰する. 結果の受け取りは ox_pop_local() で行う.
[12] ox_pop_local(Id0);
[[1,1],[x^4+y^2*x^3+y^4*x^2+y^6*x+y^8,1],[x^4-y^2*x^3+y^4*x^2-y^6*x+y^8,1],
[x-y^2,1],[x+y^2,1]]
[13]
この時点で, ox_asir での計算が終っていない場合には, 計算が終るまで ox_pop_local() は復帰しない. このような仕組みは, 一見不便そうに 見えるかもしれないが, 複数の server を使って分散計算を行う場合に, 一度に複数の server で計算をスタートさせたり, 同時に自分も他の計算を 始めたい場合などに必須である. その結果がなければ先の計算ができなくなった時点で server に結果をもらいに いくようにすれば, 待たされても何も困ることはないのである. サーバが計算結果を送信可能状態かどうかは関数 ox_select により調べる.

さて, 最低限以上のことを知っていれば, 分散計算を試す準備は OK である. 以下では, 2 つのアルゴリズムを OpenXM で並列計算してみよう.



Nobuki Takayama 平成15年9月12日