複数の計算機で計算を行なう場合に重要になる点の一つとして 引数の引渡し方法がある。呼出側のプログラムと呼ばれる側のプログラム の間に、引数の型、大きさ、順番などに関して、 何らかの形で合意がなければならない。
単純に計算をサーバ・クライアントに分散するものとしては UNIX RPC(Remote Procedure Call)がある。 UNIX RPCは、サーバから起動されるターゲットプログラムと クライアントのプログラムの間には密な関係があることを 前提としており、このため引数は単一の構造体として渡している。 しかし、このためにはターゲットプログラムとクライアントが 引数のための構造体の記述を共有している必要がある。 このためRPCをもちいてNinf を実現するには引数構造体の ヘッダーファイルを例えば ftp などで取得しなければならない。
Ninfは、クライアントプログラムのプログラマには、計算機ネットワークに 関する知識を要求しない手法を目的としている。このため上記のような方法はとれない。 これを解決するためには、ターゲットのインターフェイス を動的に転送する必要がある。
また、Ninf のターゲットである数値演算分野では、計算ライブラリに対する データの転送量が動的に変化する場合がある。 たとえば行列の乗算を例にとって考えてみよう。 一般に行列のサイズは行列乗算プログラムのコンパイル時には 決定しない。このため演算ライブラリは、引数によって行列のサイズを指定する。 このライブラリのインターフェイスは下のようになる。
matrix_multiply(int size, double * A, double * B, double * C)これは一辺
size
の行列 A
と B
を乗算して
C
に代入するという計算ライブラリのインターフェイス である。
このとき、乗算ルーチンを呼び出すメインプログラムと乗算ルーチンの間で、
インターフェイスとしては、Integer 一つとポインタが3つが渡されている
だけである。
しかし実際に計算を行なうには、行列A
,B
,C
のそれぞれに対して
size * size * sizeof(double)の大きさの領域を共有しなければならない。
単一のプロセッサで実行する場合には、 メインプログラムと乗算ルーチンが全メモリ領域を共有 しているのでこれは問題にならない。 しかし乗算ルーチンを別の計算機で実行するためには、 この領域を転送しなければならない。 このため行列のサイズが変化すると転送量が変化することになる。 UNIX RPCではこれを実現することはできない。