OmniRPC:グリッド環境での並列プログラミングのためのGrid RPCシステム
12
0
0
全文
(2) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. 35. グリッドによる広域分散コンピューティングではパ ラメータを変化させながら類似の計算を行うことが 多い.開発する並列プ ログラミングシステムにおい ては簡便に,しかも背後にあるグリッド 上の計算資源 の割当てを意識することなく,このような計算を行え ることが望ましい.そのための遠隔計算機へのインタ フェースとして,遠隔手続き呼び出し( RPC: Remote. Procedure Call )を用いて,遠隔の計算資源でのプロ グラムの実行を可能にする OmniRPC システムを試 作実装した.. Fig. 1. 図 1 OmniRPC によるプログラミング Overview of programming with OmniRPC.. グリッドの計算資源を RPC を用いて利用する Grid RPC は,グリッド でのプログラミング インタフェー. 次章において OmniRPC システムの設計の概要を述. スとしてこれまでもいくつか提案されている.広域. べ,3 章において実装について述べる.4 章では Om-. 1),9). の Globus 向けの実装である Ninf-G 10)は,その Grid. niRPC の基本的な評価について報告する.5 章にて OpenMP による OmniRPC を用いた並列プログラミ. ネットワーク向けの RPC として提案された Ninf. RPC の 1 つである.OmniRPC も,基本的な API. ングの例について述べ,簡単な実行例を示す.6 章に. とし て Ninf システムを踏襲し ており,Ninf システ. て関連研究について述べ,7 章に結論,今後の課題に. ムから派生し たグ リッド 向け RPC である.このほ. ついて述べる.. 7). かにも,NetSolve や従来 LAN 内の RPC であった. CORBA 3)をグリッド 環境上で利用する試みも行われ. 2. OmniRPC システムの概要と設計. ている.. 2.1 設 計 目 標 OmniRPC の設計目標は,以下のものである.. 我々の想定する典型的なグリッド 環境とは,複数の. スタを相互に利用する環境である.クラスタの各計算. • サポ ート す るプ ログ ラ ミン グ モデ ル とし て , master-worker 型の並列プログラミングをサポー トする.特に,グリッド 環境において典型的なア. 機はローカルなネットワークで構成されている場合が. プリケーションであるパラメータ検索などのアプ. 計算機クラスタが計算資源として広域あるいはロー カルなネットワークに接続されており,これらのクラ. あり,広域のネットワーク環境で利用するには,外部 のネットワークからのアクセスをサポートする機能を 提供する必要がある.また,並列プログラムの開発は 個々のクラスタで行うことができるようにし,大きな. リケーションを効率的にサポートする.. • 簡便な並列プ ログラミング 環境を提供する.非 同期呼び 出しによる並列プ ログラミングのほか に,RPC をスレッド セーフにすることにより,. プログラムの変更なしに大規模な計算資源を利用でき. OpenMP の指示文による並列プログラミングを. る広域のグリッド 環境に移行できることが望ましい.. サポートし,ベースとなる既存の逐次プログラム. そのため,図 1 に示すように,OmniRPC はローカ ルなクラスタから,広域のネットワークで接続された. をなるべく書き換えずに並列化できるようにする. • 遠隔の計算資源として,クラスタを想定する.特. 複数の組織の計算資源を相互利用するグリッド 環境ま. に,クラスタ内のネットワークとしてプライベー. で,同一のプログラミングができる環境を提供する.. トなアドレスを用いて構成されたクラスタについ. 本稿での「グリッド 環境」とは,広域のネットワーク,. てもサポートする.. ローカルなネットワークにかかわらず,ネットワーク に接続された計算資源を利用する環境であり,広域の ネットワークによるグリッドからローカルなクラスタ. • 大規模なプログラムでは 100 ホストから 1000 ホ スト規模までの計算資源をサポートできるように する.. さらに,OmniRPC では,RPC システムがスレッ. • 各計算資源の管理ポリシーを考慮したジョブ起動 をサポートする.たとえば ,クラスタでは PBS. ドセーフに実装されており,並列プログラミングには. などのバッチシステムで運用されていることが多. 並列プログラミング インタフェースである OpenMP. いが,このような場合は指定された起動方法で遠. を用いることができるため,指示文による並列記述を. 隔のプログラムを起動する.. までを含むものである.. 可能にし,プログラマの負担を軽減することができる.. • 簡便な環境設定.あらかじめ特定のサーバなどの.
(3) 36. 情報処理学会論文誌:コンピューティングシステム. Aug. 2003. プログラムの設定をしなくても,利用できるよう. 録することによって,モジュール内の関数をローカル. にする.. ホスト上のプログラムから呼び出すことができるよう. • グリッド 環境においては,通信の確立に認証を行 うなど ,セキュリティについて配慮する.遠隔の 計算機で実行されるプログラムについては個々の. になる.たとえば,上の行列積のルーチンに対しては,. ユーザのアカウントで実行されるようにする. • グリッド 環境として,Globus で構成されたグリッ. ... OmniRpcCall("dmul",N,A,B,C);. #define N 100 double A[N][N],B[N][N],C[N][N]. ド 環境のほか,ssh を用いた遠隔計算機の利用環. OmniRPC の最も基本的な API である OmniRpcCall. 境構築も可能にする.また,プログラムの開発な. は,その名前 dmul から,その関数が登録されている. ど ,ローカルなクラスタにおいても rsh による環. リモート実行プログラムがあるリモートホストを探し,. 境を構築できるようにする. • 動的な環境への対応.実行中に利用可能なホスト の変更に対応できるようにする.また,実行中の ホストの障害などに対応できるようにする.. 2.2 OmniRPC の概要 OmniRPC は,ローカルホストで実行されるプログ ラムにおいて,指定された手続き( procedure )をリ モートホスト上で実行する機構を提供する.ここでは, 呼び出し側のプログラムが実行される計算機をローカ ルホストと呼び,呼び出された手続きを実行する計算 機をリモートホストと呼ぶことにする.. 遠隔呼び出しを行う.. 1 つのリモート実行プログラムは複数の関数を含む ことができる.このため,インタフェースを記述する. IDL 記述において,複数の関数のインタフェースを まとめてモジュールとして定義する.1 つのリモート 実行プログラムに含まれる関数群を,リモート実行モ ジュールと呼ぶ.. 2.3 再初期化可能リモート 実行モジュールと実行 モジュールの永続性 OmniRPC がターゲットとする典型的なアプリケー ションの 1 つが,同じ関数をパラメータを変えつつ呼. リモートホストで実行される,その手続きを含む. び出すパラメータ検索型の並列プログラムである.こ. プログラムをリモート実行プログラム( remote exe-. のタイプのアプリケーションでは共通のデータ設定も. cutable )と呼ぶ.リモート実行プログラムを作成す. しくは初期設定の後に,数個のパラメータを変化させ,. るためには,まず,Ninf IDL( interface description. 繰り返し実行することが多い.リモートホストで実行. language )を用いて,遠隔呼び出しをする関数のイン タフェースを定義する.これをリモートプログラム生. される関数において副作用を残さない場合,このよう なアプリケーションをプログラミングするには,関数. 成プログラム omrpc-gen を用いて,ローカルホスト. の呼び出しごとに引数によるデータ転送もしくは初期. と通信するためのスタブルーチンを生成し,呼び出す. 設定をする必要があり,データ転送が大量の場合や初. 関数や必要なライブラリとリンクすることによって,. 期設定の時間がかかる場合など ,大きなオーバヘッド. リモート実行プログラムを作る.. になってしまうことが考えられる.. たとえば,行列積のルーチンのインタフェースは次. この解決方法としては,リモート実行プログラムを. のように定義できる.. 関数呼び出しの終了後も実行を継続して内部データを. Module MatrixMult;. 保持し,同じモジュールの他の関数呼び出しを受け付. ... 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]). けるという方法が考えられる.これはいわゆるリモー 方法であり,基本的なデータをあらかじめリモート実 行モジュールに送りセットしておき,実際のパラメー タ検索は必要なパラメータのみを変えて実行すること. "... description ..." Calls "C" dmmul(n,A,B,C); mode_in と mode_out は,入力パラメータであるか,. によって,不必要な通信を省くことができる.実際,. 出力パラメータであるかを指定する.配列の引数に対. の関数でセットした変数を他の関数で利用するといっ. 後で述べるように OmniRPC では複数の関数が 1 つの リモート実行プログラムに定義されているため,1 つ. しては入力パラメータを使ってサイズを指定すること. た,永続性を利用したプログラミングのための API. ができる.. を提供している.これを行うためには,リモートホス. リモート実行プログラムは,リモートホスト上に登. トを指定し,モジュールを起動し,OmniRpcHandle.
(4) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. という構造体を得て,この handle を用いて特定の実. 37. 行中のリモート実行モジュールに対し,モジュール内. OmniRpcCall("dmulB",N,A,C); OmniRpcInitModule は初期化のデータを登録するの. の関数の遠隔関数呼び出しを行うことができる.. みで,OmniRpcCall が実行された時点で,実行され. しかし,永続性を利用したプログラムではリモート. るモジュールが提供されているリモートホストを探し,. 実行プ ログラムの実行状態をユーザが管理しなくて. リモート実行プログラム起動時に初期化を行う.負荷. はならなくなり,負荷分散をユーザがプログラミング. の状況や障害によって,リモート実行プログラムの実. する必要があるため,プログラムの簡便性を失うこと. 行を終了しても,他のリモートホストで初期化し,再. なる.. 実行できる.. OmniRPC の最も基本的な API である OmniRpcCall では実行するリモートホストを指定せずに,シス. 設けることによって,基本的なデータをリモートホス. テムが適当なホストに割り当てることにより,簡便な. トにあらかじめ転送しておき,関数呼び出しごとに異. インタフェースを提供している.OmniRpcCall では. なるパラメータを与えるプログラミングができるよう. 遠隔手続き呼び出しに関して,基本的に,永続性を保. になる.. 証しない.すなわち,リモート実行プログラムは 1 つ の関数呼び出しが終ると終了することがある.これは,. このような再初期化可能リモート実行モジュールを. 2.4 OmniRPC の環境設定 OmniRPC の 環 境 設 定 を 行 う た め の デ ィレ ク. 関数呼び出しを動的に任意のリモートホストに割り当. ト リを ,レ ジ スト リと 呼 ぶ .デ フォール ト で は ,. てることができるようにするためである.. $(HOME)/.omrpc_registry が用いられる.. このため,OmniRPC ではリモート実行モジュール. クライアントプログラムを実行するホストにおいて. の起動時に実行される初期化手続きを定義すること. は,どのホストをリモーホストとして用いるかをレジ. によって,実行モジュールを起動時に自動的に初期化. ストリの hostfile で指定する.この hostfile では,以. する機構を提供している.このような実行モジュール. 下の項目を指定する.. を再初期化可能モジュールと呼ぶ.他のホストに手続. • リモートホストのホスト名. き呼び 出しが割り当てられたときには,再度実行モ. • 実行できるジョブの最大数 • リモートホストのレジストリのパス • リモートホストの remote shell のタイプ( rsh,. ジュールを起動し ,自動的に初期化を行う.これは, パラメータ検索などの OmniRPC がターゲットとす る典型的なアプリケーションに対して,初期化のみに 対する永続性をサポートし,効率的な実行をサポート するための機能である. たとえば,上の行列積の例において,行列 B が初期 化された後,変化しないという場合には,. Module MatrixMult; ... Initialize(long int n, double B[n][n]){ storeB(n,B); /* store B somewhere */ } Define dmmulB(long mode_in int n, mode_in double A[n][n],. ssh,globus のいずれか ) • リモートホストのジョブ起動のスケジューラ.具 体的には,PBS( portable batch system )や Sun Grid Engine などのローカルスケジューラの名前. クラスタに対しては,クラスタのノードに roundrobin で rsh を用いてジョブを割り当てる簡単な スケジューラが用意されており,default として 用いることもできる. • リモートホストとの通信を多重化するか. リモートホストが,1 台の計算機の場合には単に fork を使ってジョブを起動することになる.それに対し , リモートホストがクラスタである場合にはホストの名 前としてクラスタホストを登録し,ジョブ起動の種類. mode_out double C[n][n]) Calls "C" dmmulB(n,A,C);. を指定する必要がある.実行できるジョブの最大数は. と定義しておき,呼び出し側のプログラムでは,以下. クラスタのノード 数としてもよい.. のようにモジュールに対し,初期化の指定を行う.. プライベートアドレスで構成されたクラスタの場合. #define N 100. は,通信の多重化の指定を行い,クラスタホストとを. double .... 経由して通信を行うようにしなくてはならない.. A[N][N],B[N][N],C[N][N]. OmniRpcInitModule("MatrixMult",n,B); ..... リモートホストのレジストリには,そのリモートホ スト上で登録されたリモート実行プログラムと実行モ ジュールで提供されている手続きに関するデータベー.
(5) 38. 情報処理学会論文誌:コンピューティングシステム. スが格納されており,omrpc-register コマンドを用い て,登録しておく.. 2.5 OmniRPC の API 基本的な API として,Ninf システム( Ninf v1 )の API を踏襲している.以下に,主な API をあげる.. Aug. 2003. のスケジューリングを行っている.. 3. OmniRPC の実装 3.1 omrpc-agent:リモート 実行プ ログラムの 起動. • void OmniRpcCall(char *proc_name,...) proc_name で指定された手続きを,この手続きが. 動するために,ライブラリ初期化時( OmniRpcInit ). 実行できる適当なリモートホストを選択して,実. に hostfile に登録されているリモートホストに対し ,. 行する.. omrpc-agent を 起動する.omrpc-agent の起動は , rsh や ssh,Globus では GRAM を用いて行われる.. • OmniRpcRequest OmniRpcCallAsync( char *proc_name,...) 非同期の呼び 出しを行う.リクエストに対する. リモートホストでのリモート 実行プ ログラムを起. omrpc-agent は,クライアントプログラムの実行ごと に起動され,以下の機能を提供している.. handle を返す. • int OmniRpcWait(OmniRpcRequest req) リクエストに対応する手続き呼び出しが終了する. • リモートホストごとに設定されている起動方法に 従って,リモート実行プログラムを起動する. • 実行し たリモート 実行プ ログラムのプ ロセスの. まで待つ. • void OmniRpcWaitAll(int n_req,. 管理. • レジストリの情報などの,リモートホストの情報. OmniRpcRequest req[]) n 個のリクエストの handle への配列を与え,す べてのリクエストが終了するまで待つ. • int OmniRpcWaitAny(int n_req, OmniRpcRequest req[]) n 個のリクエストの handle への配列を与え,ど れかのリクエストが終了したときに,終了したリ クエストに対応するインデックスを返す. • int OmniRpcProbe(OmniRpcRequest req) リクエストが終了したかど うかを確かめる. • OmniRpcHandle OmniRpcCreateHandle( char *hostname,char *module) 指定されたモジュールをリモートホストで起動し, それへの handle を得る.. • void OmniRpcCallbyHandle(. の取得.. • 通信の多重化による,ローカルアドレスクラスタ との通信の中継. omrpc-agent でリモート実行プログラムを起動する理 由の 1 つは,rsh などでは短時間に多数のジョブの起 動が行われるとセキュリティ管理上,サービスが拒否 されて,起動できなくなってしまうからである.また,. Globus 環境ではリモート実行プログラムの起動は直 接 GRAM を用いて行うことができるが,GRAM で はリクエストごとに認証を行うために非常に時間がか かってしまうことがある.そのため,どの環境におい ても,omrpc-agent を使うことで実装を統一した. なお,omrpc-agent や個々のリモート実行プログラ ムとの通信は TCP/IP を用いているが,コネクション に関しては,クライアントプログラムにおいて,ロー. OmniRpcHandle handle,char *proc_name,...). カルホスト上の空きポートを取得し,リモートのプロ. 起動しているリモート実行モジュールに対し,手. グラム起動時にそのポートを指定することによって,. 続き呼び出しを行う. • void OmniRpcDestroyHandle( OmniRpcHandle handle). コネクションを行っている.あらかじめ,固定のポー トを必要しないため,固定ポートでのサービスにあり がちなセキュリティの問題を避けることができる.ま. 起動しているリモート実行モジュールを終了させ,. た,すべてユーザの設定で済むために,インストール,. handle を開放する.. 環境設定が容易になる.. • void OmniRpcInit(int *argc,char **argv[]) ライブラリの初期化を行う. • void OmniRpcFinalize() ライブラリの finalize を行う.. 3.2 コネクションの維持とスケジューリング omrpc-agent を起動した後,クライアントプログラ ムは omrpc-agent を用いて,それぞれのリモートホ ストで登録されているリモート実行モジュールの情報. なお,OmniRpcCall では,手続きが実行できるリ. を収集する.OmniRpcCall で,手続き呼び出しが行. モートホストについて,順次空いたものから,手続き. われると,指定された手続きがあるリモートホストを. 実行を割り当てる FCFS( Frist Come First Serve ). 検索し,そのホストに対して,omrpc-agent を使って.
(6) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. 39. リモート実行プログラムを起動する.手続きが提供さ. 実行プログラムに関しては上記のスケジューリングの. れているリモートホストが複数ある場合には,最初に. 対象から外されて,ユーザが起動,終了を管理するこ. 検索されたホストを選択している.. とになる.. 起動されたリモート実行プログラムに対しての手続 き呼び出しは,Ninf と同様,IDL に記述されたイン. 3.3 omrpc-agent による通信の多重化 omrpc-agent により,クライアントプログラムと複. タフェースの情報を実行時に取得することによって,. 数のリモート実行プログラムとの通信を多重化し,1. リモートプログラムの引数データの送受信を行う.初. つのコネクションで行うことができる.これにより,. 期化が必要なリモート実行モジュールに対しては,起. 次の利点が得られる:. 動時に他の呼び出しと同様の手順を使って,初期化が 行われる.. • リモートホストがクラスタであり,クラスタが ローカルアドレスで構成されたネットワークの場. 一度起動され,関数の実行が終了したリモート実行. 合,この機能を使って,omrpc-agent が各クラス. モジュールは,次の呼び出しに備えて,コネクション. タノードで実行されるリモート実行プログラムと. が維持され,待機中になる.次に,同じリモート実行 中のリモート実行モジュールに対し,呼び出しが行わ. の通信を中継する. • 1,000 台規模のリモートホストを用いる場合には, クライアントプログラムでは通信に対するファイ. れる.これによって,リモート実行プログラムの起動. ルティスクプリプタが不足してしまう.この場合. の手間を省くことができる.. には,数十のホストごとにリモートホストを作り,. モジュールの手続き呼び出しがあった場合には,待機. リモート実行プログラムは必要に応じて,hostfile. ここに omrpc-agent を起動し ,中継させること. で指定されたホストごとの最大のジョブ数まで起動さ. によって,クライアントプログラムへの直接コネ. れる.そして,待機中になったリモート実行プログラ ムに対して,順次,手続き呼び出しが行われる.. クションされる数を削減させることができる. 通信の多重化を行う場合には,リモート実行プログラ. 現在の実装では,default のスケジューラは個々の. ムはそのプログラムを起動した omrpc-agent とコネ. リモートノード のジョブの実行の状況を反映したスケ. クションし,omrpc-agent はその入出力をパケット化. ジューリングを行っていない.しかしながら,それぞ. することによって,1 つのコネクションを使ってクラ. れのリモートホストに指定されたジョブスケジューラ. イアントプログラムと通信する.. が PBS などの場合にはジョブリクエストのキューに入 れられ,実行が始まったリモート実行プログラムから. 3.4 ssh による port forwarding の利用 グリッド 環境として,Globus が利用されることが. 順次関数呼び出しが行われることになる.最大のジョ. 多いが,いまだにインストール管理の繁雑さから利用. ブ数を指定するが,これはリクエストするジョブの最. されていない場合が多い.OmniRPC では,最も一般. 大数で,それぞれのリモートホストへの過剰な要求を. 的に使われているリモートシェルである ssh( secure. 防ぐとともに,リモートホストの処理能力についての. shell )を用いて,リモート手続き呼び出しができるよ うにした.ssh 環境では,ssh を用いて omrpc-agent. 目安を与えるものである. リモート実行プログラムが終了するのは以下の場合 である.. • ホストごとのリモート実行プログラムのジョブの 数が上限に達しており,手続き呼び出しを行う手 続きがどの現在実行中のリモート実行プログラム. をリモートホストで起動する.ssh が用いられている 環境では通常,ポートが制限されていることが普通で ある.そのため,omrpc-agent とクライアントプログ ラムの通信は,ssh の port forwarding の機能を用い て行う.また,omrpc-agent が起動するリモート実行. にない場合(つまり,別のモジュール) .この場合,. プログラムとの通信も,omrpc-agent で多重化するこ. 適当な待機中のリモート実行プログラムを終了さ. とによって omrpc-agent が中継することになる.. せ,そこに呼び出しを行おうとしているリモート. なお,ssh 環境では,ssh-agent による自動認証が必. 実行プログラムを起動する. • 強制的,あるいは障害で,リモート実行プログラ. いため,リモート実行プログラムからの他のホストへ. ムが停止した場合.たとえば,長時間待機中のリ モート実行プログラムは終了する場合も含まれる.. • クライアントプログラム終了時 なお,handle による呼び出しが行われるリモート. 要となる.また,ssh 環境では認証の伝搬が行われな の起動が制限される..
(7) 40. 情報処理学会論文誌:コンピューティングシステム. Aug. 2003. 信の暗号化などの設定は行っていない. • g-mxio-hosts:g-hosts と同じであるが,スケジュ ーラにクラスタ用の default のスケジューラを使っ て,リモート実行プログラムを host C で実行する.. host C とクライアントの通信は,omrpc-agent に より通信の多重化機能を用いて中継する.この設 Fig. 2. 図 2 実験環境 Experimental setting.. 4. OmniRPC の基本性能の評価 4.1 実験環境および設定 OmniRPC の基本的な性能とオーバヘッドを定量的 に評価するために,筑波大学のキャンパス内にて実験 環境を構築した. 図 2 に示す.host A は筑波大学計算物理学研究セン ター内のクライアントホストであり,CPU は Pentium. 定は,クラスタのサーバホストには Globus でジョ ブが起動できるが,クラスタのノードとクライア ントが直接通信できない設定である. • ssh-hosts:g-hosts と 同じ で あ る が ,omrpc-. agent の起動を ssh を用いて行う.リモート実行 プログラムは host B で実行されるが,通信は直 接 TCP/IP を用いて host A と通信する.この設 定は認証を ssh で行い,ポートの制限はない場合 に対応する.. • ssh-mxio-hosts:g-mxio-hosts と同じで,omrpcagent を host B に起動し,host C でリモート実. 4 2.8 GHz の PC である.クラスタが我々の研究室に 設置されており,外部ネットワークから接続できるク ラスタのサーバホスト host B とクラスタ内の 1 つの. いて,host C と host A の通信を omrpc-agent で. ノード host C を使用した.クラスタはプライベート. 用いて通信しているため,この設定はポートの制. 行プログラムを実行する.通信の多重化機能を用 行う.omrpc-agent は ssh の port forwarding を. アドレスで構築されており,クラスタ内部のノードは. 限した firewall 内にあるクラスタを用いる設定で. 直接は外部から通信ができない( NAT を用いて,内. ある.. 部から外部へは接続はできる) .クラスタは,AMD. AthlonMP processor 1800 + (1.5 GHz) dual CPU で,100 BaseT ethernet で接続されている.すべての ホストのオペレーティングシステムは Linux である. クラスタと host A は,物理的には 300 メートル ほど離れており,traceroute で調べたところ,5 hops. • rsh-hosts:クライアントプログラムを host B で 実行する.hostfile に host C を設定し ,omrpcagent を rsh を用いて host C に起動し ,リモー ト実行プログラムも host C で実行する.これは, ローカルな環境で OmniRPC を用いる設定である. 4.2 評価プログラムと結果. で接続されている.host A とクラスタのあるネット. リモート 実行モジュールとして,リモート 実行プ. ワークを結ぶバックボーンネットワークは 1 Gbps の. ログラムが実行されるホスト名を取得する関数と,n. ネットワークであり,バンド 幅は内部ネットワーク. ワード を転送し n ワード を返す関数を含むモジュー. の 100 BaseT と同等のバンド 幅の通信が可能である.. ルを用意した.以下に,IDL を示す.. ping コマンドでの roundtrip 時間は,host C と host. Module sample;. B の間は 150 µ 秒,host A と host C の間は 370 µ 秒 であった.. host B に Globus の gate keeper を設定し,Globus の GRAM を用いてプログラムを起動できるようにし た.host A は Globus のクライアントとなることがで きる. 以下の設定の場合について,基本性能を調べた. • g-hosts:クライアントプ ログラムを host A で. Define echo(IN int in_size,IN int in_buf[in_size], IN int out_size, OUT int out_buf[out_size]) { /* do nothing */ } Define hostname(OUT string ss[],OUT int r[]) { char s[100]; *r = gethostname(s,100); *ss = s; }. 評価プログラムは,初めに hostname を呼び 出し ,. 実行する.hostfile に host B を指定し ,omrpc-. その後,転送ワード 数を 100 ワードずつ増やしながら,. agent を GRAM を用いて起動する.リモート実. echo を呼び出すプログラムである.初めに hostname を呼び出した時点で,リモート実行プログラムが起動. 行プログラムを omrpc-agent と同じ host B で実 行する.通信は Globus IO を用いて行われる.通.
(8) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. 41. 表1. 初期化,リモート実行プログラムの起動,インタフェース情 報の取得時間( 秒) Table 1 Time of initialization, invocation, getting interface information of remote executable (sec).. Configuration g-hosts g-mxio-hosts ssh-hosts ssh-mxio-hosts rsh-hosts. OmniRpcInit 1.20 1.27 0.39 0.44 0.08. hostname (invocation) 0.014 0.075 0.009 0.228 0.011. echo (1st) (interf. info) 0.0012 0.0022 0.0012 0.1214 0.0011. される.そして,初めに echo を呼び出したときには リモート実行プログラムからインタフェースの情報が 転送される.その後,echo を出す場合には最初に取. 図 3 転送サイズを変化させたときの OmniRPC の実行時間 Fig. 3 Execution time of OmniRPC varying the size of data transfer.. 得したインタフェース情報が使われるため,引数の転 送のみとなる. 表 1 に,初期化の OmniRpcInit の実行時間,最初 の hostname を呼び出す実行時間,最初の echo を呼 び出す時間を示す.なお,OmniRpcInit の時間には. niRPC の 1 つの特徴である OpenMP による並列プ ログラミングについて述べる.. 5.1 OpenMP による並列プログラム. omrc-agent の起動するための時間,レジストリの取 得の時間が含まれる.hostname の呼び出しには,リ. OmniRPC はスレッドセーフに実装されているため, クライアントのプログラムに OpenMP を用いて並列 プログラミングすることができる.本来,OpenMP は. モート実行プ ログラムの起動と hostname のインタ. 共有メモリの並列マシンにおいて並列プログラミング. フェースの取得,実行の時間が含まれている.最初の. をするための API であるが,ここではマルチスレッ. echo の呼び出しでは,すでにリモート実行モジュール が起動されているため,インタフェースの取得と実行 の時間である.示した結果は数回実行したうちで最小. ド のプログラミング環境として用いる.. の値であるが,特に初期化の時間など ,システムの状. 付けることによって,pthread の同期操作を mutex で. Omni OpenMP コン パ イラ2)では ,Linux では pthread を用いて,-omniconfg=mutex オプションを. 態により多少の変動があった.表の初期化の時間より,. 行い,オペレーティングシステム下でスケジューリン. Globus の GRAM を用いる場合は起動に数秒かかるこ とが分かる.OmniRPC ではリモート実行プログラム. グさせることができる.ローカルホストが単一 CPU. を起動する OmniRpcCall については,omrpc-agent. に,それぞれのスレッドからのリモートマシンへの関. のマシンであっても,複数のスレッドで実行するため. を経由して起動しているため,直接 GRAM を用いて. 数実行要求はスレッドごとに並列に行われることにな. 起動するのに比べて短時間で起動できることが分かる.. る.次に,簡単な例を示す.. 次に,echo の呼び出しで転送を 10,000 ワード まで, 100 ワードずつ増やして呼び出しを行った実行時間を. OmniRpcInit(...); /* initialize RPC */ ..... 図 3 に示す.通信の多重化を行わなかった設定の実 の多重化のオーバヘッドがみられる.ssh の port for-. #pragma omp parallel for for(i = 0; i < N; i++) OmniRpcCall("work",i,...);. warding で通信の多重化を行った場合のオーバヘッド. この例では,リモート関数 work が,違う i について,. 行時間はほとんど同じである.g-mxio-hosts では多少. は非常に大きい.なお,これは 10 回行ったうちで最. スレッド 数分だけ遠隔手続き呼び出しが並列に実行さ. 小のものであり,実際の値は変動する.また,ssh の. れる.. オーバヘッドが引数のサイズによりに変動が大きく, さらなる解析が必要であると思われる.. 5. OmniRPC を用いた並列プログラミング OmniRPC による並列プ ログラミングには,非同 期呼び出しを用いることもできるが,ここでは Om-. Omni OpenMP システムの実行環境として,リモー トノード の数分だけのスレッドを指定しておくことに よって,すべてのリモートノードで並列に実行させる ことができる.なお,OmniRpcCall のリクエストは 前に述べたとおり FCFS でスケジューリングされてお り,OpenMP のスレッド 数がリモート ノード 数より.
(9) 42. Aug. 2003. 情報処理学会論文誌:コンピューティングシステム. も多い場合には,スレッドが発行した OmniRpcCall のリクエストが終了するまでブロックされる. このほかにも,OpenMP の section 指示構文などを 用いて,タスク並列の記述を用いることができる.. 5.2 プログラムの実行例 プログラム例として,0-1 ナップサック問題を取り 上げる.この問題はいわゆる探索問題の 1 つで,組合 せをノードとする木を探索する問題になる.このタイ. 表2. OmniRPC によるナップサック問題の実行時間と対逐性能比 Table 2 Execution time and speedup of knapsack problem with OmniRPC. Configuration seq rsh-hosts rsh-hosts g-mxio-hosts ssh-mxio-hosts. No.of proc 1 8 16 8 8. exec. time (sec) 1230.00 173.32 99.81 477.15 174.46. (speedup) (1.0) (7.1) (12.3) (2.6) (7.1). プの探索問題もグリッド 環境で重要なアプリケーショ ンの 1 つである.. OpenMP を用いて解く方法の 1 つは,まず最初に. セッサ,16 プロセッサを用いて評価したが,各部分木 の探索時間にバラツキがあるため,16 プロセッサで. 幅優先で検索を行い,部分問題を作り,その 1 つ 1 つ. 12 倍程度にとど まっている.. の部分問題を別々のスレッドで深さ優先で最適値を計 に,一般的には並列に行う深さ優先の検索の実行時間. ssh-mxio-host について,4 章の基本性能の評価で は個々の OmniRpcCall のオーバヘッドは大きかった が,このような並列の実行においては通信が他のス. は一定ではない.. レッドにより隠蔽されて,結果としてローカルな rsh-. 算すればよい.この検索には分枝限定法が使えるため. 以下に,プログラムの主要な部分を示す. main(int argc,char *argv[]){ OmniRpcInit(&argc,&argv); ... r = knap_bfs(Cap,breadth); #pragma omp parallel for private(rr) for(k=0;k<breadth;k++){ OmniRpcCall("knap_dfs", N,W,P, states[k].i,states[k].cp,states[k].M,&GLow,&rr); #pragma omp critical { if(rr > r) r = rr; } } ... OmniRpcFinalize(); }. knap_bfs で幅優先で部分問題を生成し,深さ優先 検索knap_dfs を RPC で実行している. 最初に幅優先で生成する部分問題を 100 とし ,4.1 節で述べた実験環境において,クラスタを用いて評価 を行った.各設定での実行時間を表 2 に示す. 問題データは,40 個のオブジェクトの単位容量あ たりの価値を同じにして,ランダ ムに生成したもの ある.問題データによる影響を低減するために,単位 容量あたりの価値を同じにしたが,ちなみに,各部分 木の深さ優先の実行時間は最大 60 秒,平均 12.3 秒 であった.なお,OpenMP のスレッド 数は使用する ノード 数と同じにしてある.OpenMP プログラムは,omniconfig=mutex オプションで Omni OpenMP コ ンパイラを用いてコンパイルし,スレッドのスケジュー リングが pthread レベルで行えるようにした.クラス. host と大差のない実行時間となっている.それに対し, Globus を用いた g-mxio-host の結果は大きく実行時 間が増えている.この原因は,Globus IO のライブラ リとして,マルチスレッド に対応した gcc32dbgpthr の flavor のライブラリを用いたが,このライブラリの 内部で用いられているスレッドが OpenMP のスレッ ドと干渉して,スレッド スケジューリングに悪影響を 及ぼしているのではないかと推測される.これについ ては,さらなる調査が必要である.. 5.3 OmniRpcInitModule を用いた例 以下に,同じプログラムを OmniRpcInitModule を 用いた例を示す. main(int argc,char *argv[]){ OmniRpcInit(&argc,&argv); ... r = knap_bfs(Cap,breadth); OmniRpcInitModule("knap",N,W,P); #pragma omp parallel for private(rr) for(k=0;k<breadth;k++){ OmniRpcCall("knap_dfs", states[k].i,states[k].cp,states[k].M,&GLow,&rr); #pragma omp critical { if(rr > r) r = rr; } } ... OmniRpcFinalize(); }. この例では,基本的な knapsack のデータであるN,. W,P を初期化データとして設定している.このデー タはリモート実行モジュールが起動されたときに初期. タは占有し ,数回計測し たうちの最小の実行時間で. 化関数 Initialize が呼び出され,転送された後はこの. ある.. モジュールが終了するまで保持される.そのため,そ. ローカルな設定である rsh-hosts において,8 プロ. れぞれの OmniRpcCall では変化するパラメータのみ.
(10) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. を送るだけでよい. 前節と同じ ssh-mxio-hosts の設定で実行したとこ. 43. てやればよい.これに対し,Ninf では環境変数に よる直接指定もしくはメタスケジューラの自動選. ろ,169.30 秒と実行時間の減少は数%にとど まった.. 択により行われ,Ninf-G においては API にてプ. この例では,N,W,P の転送コストは比較的小さいた. ログラム中でホストを指定する仕様になっている.. めに,初期化関数を使ってもその効果は小さかったが, データが必要な場合はその効果は大きいと予想される.. 6. 関 連 研 究 6.1 Ninf システムとの違い これまで述べたとおり,OmniRPC は Ninf( ver.1 ). • リモート実行モジュールのデータベースに関し , Ninf では Ninf サーバにより提供され,Ninf-G で は LDAP を用いて提供されている.それに対し,. OmniRPC ではそれぞれ個人のディレクトリにあ るレジストリに格納されており,これを起動時に 読み出す方式をとっている.Ninf および Ninf-G. の API の一部を踏襲している.以下に,関連の深い. では基本的にデータベースが複数のユーザで共有. Ninf システムとの違いについてまとめる.. されることになるが,これは共通して使えるライ. • まず,Ninf では IDL に記述されたリモート関数 1 つ 1 つにリモート実行プログラムを生成するの に対し,OmniRPC では 1 つのファイルに記述さ. ブラリを提供するという使い方を想定したもので ある.これに対し ,OmniRPC は 1 つのアプ リ ケーションプログラムをグリッド 環境で並列化す. れたモジュール全体に対し,モジュール内の関数. ることに重点をおいており,個々のユーザの環境. を含むリモート実行モジュールを生成する.Ninf. を設定できるほか,レジストリのパスを指定する. では呼び出された関数が終了するごとにその関数. ことによりアプリケーションごとの環境を設定で. のリモート実行モジュールが終了するのに対し ,. OmniRPC ではいったん起動されたリモート実行. きるようにしてある. • OmniRPC では,計算資源がクラスタの場合には,. モジュールは他のリモート実行モジュールをスケ. クラスタのサーバーホストを指定しておくことに. ジューリングする必要があるまで,そのリモート. より,クラスタのジョブスケジューラによりクラ. 実行モジュールを終了させずにコネクションを維. スタノード を割り当てることができる.Ninf-G. 持する.これにより,起動のためのオーバヘッド. では,Globus の GRAM を用いて,直接リモー. がなくなるため,同じリモート関数呼び出しが高. ト実行モジュールを起動しており,適当なジョブ. 速化されるのはもちろん,同じ実行モジュールに. タイプを指定することにより同様のことができ. ある他の関数を呼び出しする場合にも実行中のリ. るが,実験で示したとおり GRAM によるリモー. モート実行モジュールが使われるため高速化され. トプログラムの起動のオーバーヘッドが大きい.. る.これにより,リモートホストで実行される関. OmniRPC では omrpc-agent を GRAM で最初. 数が副作用がない限り,Ninf と同じセマンティク. に一度起動し,これを用いてリモート実行モジュー. スを提供していることになる.また,このことに. ルを起動することによりオーバヘッドを低減して. より,同じモジュール内のリモート関数間でデー. いる.. タを共有できるようになり,再初期化可能リモー ト実行モジュールで初期化されたデータを他の関. • Ninf-G では,プライベートアドレスによるクラ スタ内の計算資源を利用する手段を提供していな. 数で利用したり,永続性を利用する API を用い. い.OmniRPC では omrpc-agent に通信を中継. て,効率的なプログラミングができるようになっ. させることができるようにし,このような資源を. ている.. 利用できるようにしている.また,omrpc-agent. • Ninf ではリモートで実行されるプログラムからク ライアント側の関数を呼び出す callback の機能. ションに多重化する機能があり,これによりホス. が提供されている.OmniRPC では,callback の. トへの直接のコネクション数を低減し,システム. 機能は提供していないが,永続性を利用する API. のコネクション数によるホスト数の制限を緩和し,. を使って同様の機能を実現できる.. は通信と中継すると同時にそれを 1 つのコネク. 数百台の大規模なグリッド 環境へのスケーラビリ. • 利用できるリモートホストの指定に関して,OmniRPC では,hostfile に指定しており,プログラ. • Ninf-G においては Globus の認証を用いているの. ムとは独立に指定できる.これにより,他の環境. に対し,OmniRPC では Globus のほか,ssh に. に移行した場合でも,hostfile の指定のみを変え. よる認証を行うことができる.Ninf においては認. ティを提供している..
(11) 44. 情報処理学会論文誌:コンピューティングシステム. Aug. 2003. 証について試験的にしか実装されていない.また,. の関数のみを含むリモート実行モジュールに対するも. Ninf においては Ninf サーバという固定ポートで. のであるといえる.. サービスするサーバを用いているが,このような. 最後に,OmniRPC ではスレッド セーフに実装する. サーバはセキュリティ上問題になることが多く,. ことにより OpenMP による並列プログラミングを提. OmniRPC では omrpc-agent を動的に確保した. 案しているが,これはスレッド セーフである限り他の. ポートを使って,プログラム実行ごとに起動して. RPC システムにも適用できるプログラミングモデル. おり,セキュリティ上の問題点を回避している.. である.. • OmniRPC では API がスレッド セーフに実装さ れており,OpenMP を利用して簡便なプログラ ミングが可能になっている.. 7. 結論と課題 本稿では,グリッド 環境での並列プログラミングの. 6.2 その他の関連研究. ための Grid RPC システム OmniRPC の概要と実装. これまで,RPC システムについては,分散コンピュ. について述べた.. ーティングの分野において数多くの研究が行われてき 5). た .従来の分散コンピューティングの研究は主に機 能的な分散処理をターゲットにしてきたのに対し,本. OmniRPC では,リモートホストで実行されるプロ グラムを起動を高速化するために,omrpc-agent を初 期時にリモートノードに起動し,このプログラムを用. 稿で対象としているグリッド 環境では,並列処理によ. いて起動する.また,一度起動したリモート実行プロ. る高速化ならびに計算資源の統合的な利用を対象とし. グラムとのコネクションを維持して,同じ手続きへの. ている.. 呼び出しを効率化している.また,この omrpc-agent. また,分散コンピューティングの研究では CORBA. により,リモート実行プログラムとクライアントプロ. や Java RMI など 分散オブジェクト指向プログラミ. グラムの通信を 1 つのコネクションに多重化し,中継. ングの研究が行われてきた.OmniRPC において,永. することにより,プライベートアドレスを用いて構成. 続性を明示的に扱う API を用いたプログラミングで. したクラスタを外部から利用できるようにするととも. は,リモート実行モジュールを分散オブジェクトと見. に,クライアントへのコネクション数を削減し,大規. ると同様のプログラミングモデルを提供することがで. 模なグリッドコンピューティングに対応している.こ. きる.OmniRPC で提案した再初期化可能モジュール. れらの機能について,Globus および ssh によるグリッ. は,初期化のみに対する部分的な永続性をサポートす. ド の実験環境を構築し,基本性能に関し定量的に評価. るものであるが,システムが自動的に負荷分散を行う. した.. ことを可能にし,OmniRPC が対象とするパラメータ. また,パラメータ検索など の master-worker のグ. 検索などのアプリケーションに対して柔軟かつ効率的. リッド アプ リケーションを効率的に実行するために,. なプログラミングを可能にしている. たが,NetSolve 7) も類似の機能を与える RPC システ. OmniRPC では初期化を自動的に行う再初期化可能 リモート実行モジュール機能により,初期設定された データをデータを再利用できるようにし,簡便かつ効. 前節において,関連研究として Ninf について述べ ムである.並列プログラミングのために非同期呼び出. 率的なプログラミングが可能である.さらに,簡便な. しのほかに,クラスタなどの一括して遠隔呼び出しを. 並列プログラミング環境を提供するために,API をス. 行う API を導入している.しかし,Ninf と同様に永. レッド セーフとし ,OpenMP を用いることができる. 続性を利用する機能はなく,また,プライベートアド. ようにした.これらについて,プログラム例により例. レス内の計算資源を利用することはできない.これま. 示するとともに,実行結果により有効性を示した.. での Grid RPC の問題点や設計方針については,松 岡らの検討8)に述べられている. 現在,グリッド 技術に関する標準化のためのフォー. 本稿では設計と実装,基本的な評価について述べた が,実際のアプリケーションに用いて,これから大規 模なグリッド 環境での評価を行い,改良を行っていく. ラムである GGF( Global Grid Forum )では,Grid. 予定である.特に,現在の OmniRPC で実装されて. RPC に関する標準の提案がなされている4) .この案. いるスケジューラは FCFS の単純なスケジューラと. は,Ninf と NetSolve を基に設計されており,この仕. なっており,それぞれのリモートホスト上で実行する. 様案の function handle は特定のホストで実行される. ジョブ数に関しても各ホストの負荷状況に応じたジョ. 関数を表現するもので,OmniRPC のリモート実行モ. ブ割当てをする必要がある.これらはヘテロな計算資. ジュールに対する handle に似ているが,これは 1 つ. 源がある場合や,多数のユーザが同時に計算資源を利.
(12) Vol. 44. No. SIG 11(ACS 3). OmniRPC:並列プログラミングのための Grid RPC システム. 45. (平成 15 年 2 月 3 日受付) (平成 15 年 5 月 30 日採録). 用する場合に重要になる. また,これからの課題として,実行状況の確認を行 うためのツールとデバック環境がある.また,リモー トホストでの実行プログラムの登録などの設定を手動. 佐藤 三久( 正会員). で行っているが,これについてもホスト数が多くなる. 昭和 34 年生.昭和 57 年東京大学. に従って,適当な支援ツールが必要となる.. 理学部情報科学科卒業.昭和 61 年. 設計目標の 1 つに動的な環境への対応や故障ホスト. 同大学大学院理学系研究科博士課程. の検出処置があるが,これについても課題として残さ. 中退.同年新技術事業団後藤磁束量. れている.特に,大規模なプログラムの場合,長時間. 子情報プロジェクトに参加.平成 3. 実行されることが想定されるため,リモートホストの. 年,通産省電子技術総合研究所入所.平成 8 年,新情. 追加,削除など 設定変更は必要になると思われる.. 報処理開発機構並列分散システムパフォーマンス研究. 謝辞 本研究を遂行するにあたり,日頃議論いただ. 室室長.平成 13 年より,筑波大学電子情報工学系教. く Ninf プロジェクト メンバー諸氏に感謝いたします. 本研究の一部は,科学研究費補助金特定領域研究( 2 ) 課題番号 14019011「 計算物理学分野の Grid アプ リ. 授.同大学計算物理学研究センター勤務.理学博士.. ケーションと並列プログラミングシステムの研究」お. 研究に従事.日本応用数理学会,IEEE 各会員.. 並列処理アーキテクチャ,言語およびコンパイラ,計 算機性能評価技術,グリッドコンピューティング等の. よ JST-ACT「創薬プラットフォームのためのグリッ 朴. ド 環境の開発」による.. 昭和 59 年慶應義塾大学工学部電. 参 考 文 献 1) Ninf Project. http://ninf.apgrid.org/ 2) Omni OpenMP Compiler Project. http://www.hpcc.jp/Omni 3) Object Management Group. http://www.omg.org 4) Global Grid Forum Research Group on Programming Models. http://www.gridforum.org/7 APM/APS.htm 5) Birrel, A. and Nelson, G.: Implementing Remote Procedure Calls, ACM Trans. Comput. Syst., Vol.2, No.1, pp.39–59 (1984). 6) Foster, I. and Kesselman, C.: Globus: A metacomputing infrastructure toolkit, Proc. Workshop on Environments and Tools, SIAM (1996). http://www.globus.org/ 7) Casanova, H. and Dongarra, J.: NetSolve: A Network Server for Solving Computational Science Problems, Proc. SC’96 (1996). 8) Matsuoka, S., Nakada, H., Sato, M. and Sekiguchi, S.: Design issues of Network Enabled Server Systems for the Grid, Proc. GRID’2000 (LNCS 1971 ), pp.4–17 (2000). 9) Sato, M., Nakada, H., Sekiguchi, S., Matsuoka, S., Nagashima, U. and Takagi, H.: Ninf: A Network based Information Library for Global World-Wide Computing Infrastructure, Proc. HPCN’97 (LNCS 1225 ), pp.491–502 (1997). 10) 田中,中田,平野,佐藤,関口:Globus による Grid RPC システムの実装と評価,情報処理学会 研究会報告 HPC87,pp.165–170 (2001).. 泰祐( 正会員). 気工学科卒業.平成 2 年同大学大学 院理工学研究科電気工学専攻後期博 士課程修了.工学博士.昭和 63 年 慶應義塾大学理工学部物理学科助手. 平成 4 年筑波大学電子・情報工学系講師,平成 7 年 同助教授,現在に至る.超並列処理ネットワーク,超 並列計算機アーキテクチャ,ハイパフォーマンスコン ピューティング,並列処理システム性能評価の研究に 従事.平成 14 年度情報処理学会論文賞受賞.電子情 報通信学会,日本応用数理学会,IEEE 各会員. 高橋 大介( 正会員) 昭和 45 年生.平成 3 年呉工業高 等専門学校電気工学科卒業.平成 5 年豊橋技術科学大学工学部情報工学 課程卒業.平成 7 年同大学大学院工 学研究科情報工学専攻修士課程修了. 平成 9 年東京大学大学院理学系研究科情報科学専攻博 士課程中退.同年同大学大型計算機センター助手.平 成 11 年同大学情報基盤センター助手.平成 12 年埼玉 大学大学院理工学研究科助手.平成 13 年筑波大学電 子・情報工学系講師.博士(理学) .並列数値計算アル ゴ リズムに関する研究に従事.平成 10 年度情報処理 学会山下記念研究賞,平成 10 年度情報処理学会論文 賞各受賞.日本応用数理学会,ACM,IEEE,SIAM 各会員..
(13)
図
関連したドキュメント
0.1uF のポリプロピレン・コンデンサと 10uF を並列に配置した 100M
このたび牡蠣養殖業者の皆様がどのような想いで活動し、海の環境に関するや、アイディ
第 5
船舶の航行に伴う生物の越境移動による海洋環境への影響を抑制するための国際的規則に関して
3. 利用者の安全確保のための遊歩道や案内板などの点検、 応急補修 4. 動植物の生息、 生育状況など自然環境の継続的観測および監視
パターン1 外部環境の「支援的要因(O)」を生 かしたもの パターン2 内部環境の「強み(S)」を生かした もの
環境への影響を最小にし、持続可能な発展に貢
○事業者 今回のアセスの図書の中で、現況並みに風環境を抑えるということを目標に、ま ずは、 この 80 番の青山の、国道 246 号沿いの風環境を