Ninf: World-Wide Computing指向のネットワーク数値情報ライブラリ

佐藤 三久(RWCP)、 中田 秀基(電総研)、 関口 智嗣(電総研)、 松岡 聡(東京大学)、 長嶋 雲兵(お茶の水大学)


はじめに

コンピュータネットワークの発展に伴い、ネットワークを利用した情報提供サー ビスが盛んに行われている。 近年、WWWに代表される、様々な情報に容易にアクセスことを可能にするサー ビスが普及し、情報を共有することが可能になってきた。すなわち、情報への アクセスが容易、迅速であることにより、情報がどこにあろうとも、必要な時 点でその情報にアクセスすればよく、その情報を手元にある必要がなくなる。 このようなサービスの特徴は、ユーザが情報の所在を意識することな く利用できることあり、情報資源の仮想的な共有化がなされることである。 ネットワークの発展により、ネットワークを通じての物理的な距離を超え て、計算資源へのアクセスが可能になっている。 現在のネットワークサービスは、主にデータ自体の共有化であるが、これを 推し推めることにより、計算に必要な資源、すなわちCPUなどの計算に必要な 資源をも広域のネットワークにより仮想的に共有することが考えられる。

我々は、このような情報資源の共有のための枠組として、Ninf (Network based Information library for High Performance Computing)[1]を提案してい る。Ninfの目的は、数値計算ライブラリや数値情報に必要なデータベースを通 じて、おもに科学技術計算分野の情報ならびに計算資源を提供・共有すること である。Ninfはサーバークライアントモデルを基本とし、サービスは、Ninfサー バーを通じて提供される。Ninfサーバーでは、数値計算ライブラリは実行可能 な形で提供され、NinfのRPC (Remote Procedure Call)により、ユーザープロ グラムから呼び出すことにより、提供されている計算資源を利用することがで きる。ソースプログラムとして提供される情報に比べて、インストールなどの 作業も必要なく、必要な時に最新のものを利用することができる。このことに よって、計算資源の共有のみならず、共有されるライブラリを選択することに より、高品質な計算を得ることができる。Ninfメタサーバーは、複数のサーバー 間の情報を管理し、サーバーが提供するサービスの内容や状況に応じて、適当 なサーバーを選択する機能を提供する。これにより、ユーザは実際に計算が行 われる計算機を意識することなく、計算資源を利用できる。さらに、メタサー バーを通じて、複数のサーバーを利用することによって、分散環境での並列処 理も可能である。

Ninf Remote Procedure Callの概要

例えば、C言語において、行列の乗算を行うルーチンを考えてみる。
double A[N][N],B[N][N],C[N][N];
....
dmmul(A,B,C,N);	/* 行列乗算ルーチンの呼び出し */
これを、NinfのC言語bindingではこの関数を以下のような形で呼び出すことが できる。
Ninf_call("dmmul",N,A,B,C);
既存言語に対する親和性を高めるために、このように、通常のC言語での呼び 出しとほとんど同じ形式でNinf の関数を呼び出すことが可能である。 他のRPCとの最大の差異は、インターフェイス情報を事前にクライアント側と サーバー側で共有している必要がないことである。このため、ユーザがRPCを 使用するためには、対象の名前を知っているだけでよく、既存言語との親和性 が高くなり、ユーザの負担が小さい。 データをどのように送信し、結果をどのように受け取るのかのインタフェース 情報は、実行時にサーバーから取得して、それにしたがってRPCが行われる。 この例の場合は、サイズNの大きさに従った配列A,Bが引数として送信され、結 果としておくられてくるデータが、配列Cの領域に書き込まれる。 Ninf RPCの特徴を以下に挙げる。
  1. 既存言語からの関数呼出に親和性のあるインタフェースを提供する。 呼出しの手続や引数情報のマーシャリング、データの送受信を行うために、 呼出のインタフェース情報を動的に供給する。
  2. 上記のインターフェース情報を用いることによって、 メモリ空間を共有するイメージを提供する。共有される引数などのサイズは動 的に決定される。
  3. 主に、数値計算ライブラリを目的としているため、簡略化されている。
Ninfで提供される関数は関数自身とデータ通信を行うスタブを含む実行ファイ ル(Ninf Executable) としてサーバー側で用意されている。呼び出し時には、 この実行ファイルがサーバによって、execされる。 これらの通信を行うために、TCP/IP上にNinf protocol[2]を設計した。

図1に、Ninf RPCの実行の様子を示す。


図1: Ninf RPC

RPCでは、目的のライブラリの実行が終了するとサーバ側の情報が失われてし まうが、クライアント側のユーザ定義の関数を呼び出すCall backを用いる インタフェースを構成することによって、サーバ側の状態を保持し つつ、ユーザプログラムを実行するco-routine的なプログラムも可能である。

Ninf IDL(Interface Description Language)

計算ライブラリの提供者は、計算ルーチン自身とそのインターフェイス情報を 提供する必要がある。インターフェイス情報はNinf IDLと呼ぶIDL(Interface Description Language)で記述する。Ninf IDL ではデータの型を基本型とその 配列のみに限定しているため簡潔であり、インターフェイス情報の記述は容易 である。例えば、例として上げた行列乗算dmmulの記述は以下のようになる。
Define dmmul(long mode_in int n, mode_in double A[n][n],
	mode_in double B[n][n],	mode_out double C[n][n])
" ... 説明 ... "
Required "libxxx.o"          /* mmulを含むlibraryの指定 */
Calls "C" dmmul(n,A,B,C);    /* ライブラリはC言語で記述されている */
なお、nで行列の引数のサイズを指定している。 IDL記述をインターフェイス ジェネレータでコンパイルして、インター フェイス情報を埋め込んだスタブプログラムを得る。このスタブと計算ルーチ ンをリンクしたものがNinf実行ファイルとなる。


図2: インターフェイス ジェネレータ

IDLの記述には、ライブラリ関数の説明も含まれており、インタフェース情報 とともに、Ninfサーバを通じて得ることができる。現在構築中の Ninfブラウザでは、これを用いて、サーバから提供されている関数の一覧やそ れぞれの関数のマニュアルページを生成し、WWWを通じて参照できようになっ ている。

Ninfメタ・サーバ

Ninfメタ・サーバ[3]は、Ninfクライアントとサーバの中間に位置し、ユーザに対して、 実際に計算の行われる位置をユーザから隠蔽する機能をもつ。Ninfサーバの数 が増えるとサーバのアドレスやそれぞれの提供するライブラリをユーザが管理 するのが負担になる。メタ・サーバは複数のサーバを管理しており、クライア ントからのリクエストを適当なサーバに委譲する。すなわち、 (1)リクエストされているライブラリの種類、 (2) サーバへのの距離(通信のスループット)、 (3) 計算の能力、 (4) 負荷の状態、 などに応じて、サーバーを選択する。

並列処理を行う場合はメタ・サーバは負荷分散を行う機能 を提供することになる。 クライアント側のNinfインタフェースには複数の独立なライブラリを呼び出す 並列プログラミングのための操作が提供されており、複数のライブラリを並列 に呼び出す場合には、それ ぞれのリクエストは負荷分散されて複数のサーバで並列に処理される。

単一のメタサーバにリクエストが集中するとボトルネックを生じるため、メタ サーバも複数にすることができる。メタサーバが複数ある場合には、それら の情報を互いに交換して、適切なサーバが選択するようになっている。 これにより、Ninf サーバを立てる際には、最寄りのメタサーバ に対して登録を行なえば、その情報は自然に伝搬するため、世界中からアクセス されることが可能になる。その概念を図3に示す。


図3: メタサーバネットワーク

おわりに

Ninfプロジェクトは、広域ネットワーク上でのハイパフォーマンスな world-wide computingのためのglobal network infrastructureを提供するこ と目指している。 Ninfで提供される実行可能なライブラリとして提供される計算リソースを結合 して、広域ネットワーク上での分散計算システムを構築することが可能になる。 world-wide computingを目指した関連する研究として、Legion[4]があるが、 特定の言語Mentatを前提しており、既存の言語から利用可能なNinfと異なる。 また、NetSolve[5]はNinfと類似の仕組みを提案してしている。並列プログラ ミングのライブラリとしては、PVMやMPIがあるが、これらは主にLANでの並列 プログラミングのツールであり、Ninfは共有される計算リソースを提供・共有 する枠組を与えるもので並列プログラミングのためのツールにどどまらない。

Ninfで提供される計算リソースを利用する場合、ライブラリとして実行される 単位が十分に規模が大きければ、 それをネットワークで結合された高性能な計算機で利用するメリットは大きい。 たとえ、ネットワークが低速であっても、Ninfの簡便性や、数値情報や高品質 の結果を与えるライブラリは有用であろう。並列分散計算の場合には、 メタサーバを用いることによって疎粒度のライブラリ処理が負荷分散され、 効率的な実行が可能になる。

現在、電子技術総合研究所において、Ninfサーバの試行的な運用を準備中である。 CRAY J90をサーバーにLAPACKを始めとする線形計算ライブラリ、数学関数ライ ブラリ、CRAY社のLibSciライブラリなどが提供される。 クライアント側の言語についても、C言語bindingのほかに、FortranとJavaの 言語bindingが用意されている。これから、MatLabやMathematicaなどから、利用 できるようにすることで、数値処理と数値処理の融合計算なども期待されてい る。ライブラリだけでなく、理科年表に代表される数値データベースも準備中 である。

Ninfのようなサービスがつきあたる問題として、アカウントやせキュリティ、 耐故障対策の問題があるが、これからの検討課題である。

参考文献

[1]
関口, 佐藤, 長島: ネットワーク数値情報ライブラリ: - Ninf の設計 -, 情報処理学会研究報告 HPC, 94-HPC-52, p. 127 (1994).
[2]
中田, 佐藤, 関口: ネットワーク数値情報ライブラリ Ninf のための RPCシステムの概要, TR 95-28, 電子技術総合研究所 (1995).
[3]
中田,草野,松岡,佐藤,関口: ネットワーク数値情報ライブラリNinf におけるメタサーバアーキテクチャ、96-HPC-60, (1996).
[4]
Grimshaw, A. S.: Easy to Use Object-Oriented Parallel Programming with Mentat, IEEE Computer, pp. 39--51 (1993).
[5]
H. Casanova, J. Dongarra: NetSolve: A Network Server for Solving Computational Science Problems, Techinal Report of University of Tennessee, 1996.