リモート実行プログラムの直接起動

通常、OmniRpcではリモート実行プログラムをAgent経由で実行しますが、 リモート実行プログラムを指定して直接起動することも可能です。
リモート実行プログラムの直接起動を使う場合
リモートノードの環境設定
リモートプログラム直接起動のためのAPI
プログラムの実行
リモート実行プログラムの直接実行の場合の制限事項

リモート実行プログラムの直接起動を使う場合

通常、OmniRpcではリモート実行プログラムをAgent経由で起動します。これに より、以下の利点があります

ここで説明するのは、Agentを使わずにクライアントプログラムがリモート実 行プログラムを直接起動し、呼び出しを行う方法です。特定のリモートホスト で、決まったパスにあるリモート実行プログラムがある場合にはリモート実行 プログラムの登録などの手続を省くことができる他、以下の利点があります。

リモートノードの環境設定

例として以下のような環境設定を仮定します。

  1. クライアントホストは、jones.tsukuba.ac.jp
  2. リモートホストは、dennis.hpcc.jp
  3. 最初のプログラミング例に挙げたcalc_sin.rexを、 リモートノードの/usr/local/tmp/に置いておく。
  4. dennis.hpcc.jpにはglobusのgete keeperが実行されており、GRAMを用い てプログラムを起動できる。

この機能を使う場合には、下のようにAgentを使わずにrexを直接起動し、 通信を行います。

リモートプログラム直接起動のためのAPI

まず、直接起動のAPIを使うためにはAgentを使いませんので、ライブラリの初 期化は、OmniRpcExecInit()で行います。

リモートホストでのリモート実行プログラムの起動のAPIは、 OmniRpcHandleを用いたAPIに似ています。OmniRpcExecOnHost()は、指定され たホストにおいて、パスで指定されたリモート実行プログラムを起動し、それ についてコネクションを表現するデータ構造であるOmniRpcExecHandleを返し ます。これについて、OmniRpcExecCallを使って、モジュール内の関数を呼び 出すことができます。

以下に例を示します。

#include <OmniRpc.h>
#include <stdio.h>

int main(int argc,char *argv[]){
   double r;
   OmniRpcExecHandle handle;

   OmniRpcExecInit(&argc,&argv);
   handle = OmniRpcExecOnHost("dennis.hpcc.jp","/usr/local/tmp/calc_sin.rex");

   OmniRpcExecCall(handle,"calc_sin",10,&r);
   printf("sin(10)=%g\n",r);
  
   OmniRpcExecTerminate(handle);

   OmniRpcExecFinalize();
   exit(0);
}

OmniRpcExecTerminateは、handleに対応するリモート実行プログラムを終了さ せます。最後に、プログラムの終了時には、OmniRpcExecFinalizeを呼び出し てください。

プログラムの実行

リモート実行プログラムをどのような起動方法を使って起動するかについては、 実行プログラムの引数で指定します。例えば、globusを用いて起動する場合に は、

 % a.out --globus  args 

というように、--globusを指定します。この他に、sshで起動する場合には、 --sshと指定します。何も指定しない場合には、rshで起動することになります。

リモート実行プログラムの直接実行の場合の制限事項

現在のところ、この方法での起動方法については以下の制限があります。

これらの点については、改善していく予定です。