佐藤 三久(RWCP)、 中田 秀基(電総研)、 関口 智嗣(電総研)、 松岡 聡(東京大学)、 長嶋 雲兵(お茶の水大学)
コンピュータネットワークの発展に伴い、ネットワークを利用した情報提供サー ビスが盛んに行われている。 近年、WWWに代表される、様々な情報に容易にアクセスことを可能にするサー ビスが普及し、情報を共有することが可能になってきた。すなわち、情報への アクセスが容易、迅速であることにより、情報がどこにあろうとも、必要な時 点でその情報にアクセスすればよく、その情報を手元にある必要がなくなる。 このようなサービスの特徴は、ユーザが情報の所在を意識することな く利用できることあり、情報資源の仮想的な共有化がなされることである。 ネットワークの発展により、ネットワークを通じての物理的な距離を超え て、計算資源へのアクセスが可能になっている。 現在のネットワークサービスは、主にデータ自体の共有化であるが、これを 推し推めることにより、計算に必要な資源、すなわちCPUなどの計算に必要な 資源をも広域のネットワークにより仮想的に共有することが考えられる。
我々は、このような情報資源の共有のための枠組として、Ninf (Network based Information library for High Performance Computing)[1]を提案してい る。Ninfの目的は、数値計算ライブラリや数値情報に必要なデータベースを通 じて、おもに科学技術計算分野の情報ならびに計算資源を提供・共有すること である。Ninfはサーバークライアントモデルを基本とし、サービスは、Ninfサー バーを通じて提供される。Ninfサーバーでは、数値計算ライブラリは実行可能 な形で提供され、NinfのRPC (Remote Procedure Call)により、ユーザープロ グラムから呼び出すことにより、提供されている計算資源を利用することがで きる。ソースプログラムとして提供される情報に比べて、インストールなどの 作業も必要なく、必要な時に最新のものを利用することができる。このことに よって、計算資源の共有のみならず、共有されるライブラリを選択することに より、高品質な計算を得ることができる。Ninfメタサーバーは、複数のサーバー 間の情報を管理し、サーバーが提供するサービスの内容や状況に応じて、適当 なサーバーを選択する機能を提供する。これにより、ユーザは実際に計算が行 われる計算機を意識することなく、計算資源を利用できる。さらに、メタサー バーを通じて、複数のサーバーを利用することによって、分散環境での並列処 理も可能である。
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に、Ninf RPCの実行の様子を示す。
RPCでは、目的のライブラリの実行が終了するとサーバ側の情報が失われてし まうが、クライアント側のユーザ定義の関数を呼び出すCall backを用いる インタフェースを構成することによって、サーバ側の状態を保持し つつ、ユーザプログラムを実行するco-routine的なプログラムも可能である。
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実行ファイルとなる。
IDLの記述には、ライブラリ関数の説明も含まれており、インタフェース情報 とともに、Ninfサーバを通じて得ることができる。現在構築中の Ninfブラウザでは、これを用いて、サーバから提供されている関数の一覧やそ れぞれの関数のマニュアルページを生成し、WWWを通じて参照できようになっ ている。
並列処理を行う場合はメタ・サーバは負荷分散を行う機能 を提供することになる。 クライアント側のNinfインタフェースには複数の独立なライブラリを呼び出す 並列プログラミングのための操作が提供されており、複数のライブラリを並列 に呼び出す場合には、それ ぞれのリクエストは負荷分散されて複数のサーバで並列に処理される。
単一のメタサーバにリクエストが集中するとボトルネックを生じるため、メタ サーバも複数にすることができる。メタサーバが複数ある場合には、それら の情報を互いに交換して、適切なサーバが選択するようになっている。 これにより、Ninf サーバを立てる際には、最寄りのメタサーバ に対して登録を行なえば、その情報は自然に伝搬するため、世界中からアクセス されることが可能になる。その概念を図3に示す。
Ninfで提供される計算リソースを利用する場合、ライブラリとして実行される 単位が十分に規模が大きければ、 それをネットワークで結合された高性能な計算機で利用するメリットは大きい。 たとえ、ネットワークが低速であっても、Ninfの簡便性や、数値情報や高品質 の結果を与えるライブラリは有用であろう。並列分散計算の場合には、 メタサーバを用いることによって疎粒度のライブラリ処理が負荷分散され、 効率的な実行が可能になる。
現在、電子技術総合研究所において、Ninfサーバの試行的な運用を準備中である。 CRAY J90をサーバーにLAPACKを始めとする線形計算ライブラリ、数学関数ライ ブラリ、CRAY社のLibSciライブラリなどが提供される。 クライアント側の言語についても、C言語bindingのほかに、FortranとJavaの 言語bindingが用意されている。これから、MatLabやMathematicaなどから、利用 できるようにすることで、数値処理と数値処理の融合計算なども期待されてい る。ライブラリだけでなく、理科年表に代表される数値データベースも準備中 である。
Ninfのようなサービスがつきあたる問題として、アカウントやせキュリティ、 耐故障対策の問題があるが、これからの検討課題である。