Go to the first, previous, next, last section, table of contents.

## OpenXM

Asir は, 分散計算における通信プロトコルとして, OpenXM (Open message eXchange for Mathematics) プロトコルを採用している. OpenXM プロジェクトについては, `http://www.math.sci.kobe-u.ac.jp/OpenXM/` を参照してほしい.

OpenXM プロトコルは, 主として数学オブジェクトをプロセス間でやりとりする ための規約である. OpenXM においては

1. client が server に対して計算実行依頼のメッセージを送る.
2. server が計算を実行する.
3. client が server に結果送付依頼のメッセージを送る.
4. server は結果を返し, client は結果を受け取る

という形で分散計算が行われる. server はスタックマシンである. すなわち, client から送られたデータオブジェクトは, 指定がない限り server のスタッ クに積まれ, コマンドが送られた時に, 必要なだけスタックからデータを取り出 して, 関数呼び出しの引数とする.

OpenXM において特徴的なことは, 計算結果は単に server のスタックに 積まれるだけで, client からの依頼がない限り, 通信路にデータは流れない という点である.

プロトコルには, オブジェクトの共通フォーマットを規定 する CMO (Common Mathematical Object format), プロセスに対する 動作を指定する SM (Stack Machine command) が含まれる. これらは, データを送る際に, データの種類を指定する ための OX expression としてラッピングされる.

OpenXM による分散計算を行う場合には, まず, server を立ち上げて, 通信を成立させる必要がある. このために, `ox_launch()`, `ox_launch_nox()`, `ox_launch_generic()` などの関数が用意されている. さらに, 通信の成立した server に対して 以下のような操作が関数として用意されている.

``ox_push_cmo()``
  データを server のスタックに積む
``ox_pop_cmo()``
  データを server のスタックから取り出す.
``ox_cmo_rpc()``
  server の関数を呼び出し, 結果をスタックに積む.
``ox_execute_string()``
  server 固有のユーザ言語 (Asir なら Asir 言語) で書かれた文字列を server が実行し, 結果をスタックに積む.
``ox_push_cmd()``
  SM コマンドの送信.
``ox_get()``
  既に通信路にあるデータの取り出し.

Go to the first, previous, next, last section, table of contents.