中田 秀基(AIST/Titech), 田中 良夫(AIST) 松岡 聡(Titech/JST), 関口 智嗣(AIST)

Slides:



Advertisements
Similar presentations
だい六か – クリスマスとお正月 ぶんぽう. て form review ► Group 1 Verbs ► Have two or more ひらがな in the verb stem AND ► The final sound of the verb stem is from the い row.
Advertisements

VE 01 え form What is え form? え? You can do that many things with え form?
1 例題 ex3b ( 配列 ) 科学科プログラミング. 2 例題 : ex3b  以下の 3 つについて例題を進める ステップ 1 :配列 ステップ 2 :最小と最大 ステップ 3 :文字型の配列.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
Globus ToolkitによるGridRPC システムの実装と評価
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
Webサービス技術を基盤とするGridRPCシステムの評価
Hidemoto Nakada Yoshio Tanaka Osami Tatebe
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
What did you do, mate? Plain-Past
プログラミング演習(2組) 第12回
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
Air Pen -- an introduction of my recent result --
動的なアプリケーション開発実行を可能にするグリッドポータルアーキテクチャ
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング言語入門 手続き型言語としてのJava
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
オーバレイ構築ツールキットOverlay Weaver
デバッガ dbx の使い方.
インターネットにおける真に プライベートなネットワークの構築
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
Where is Wumpus Propositional logic (cont…) Reasoning where is wumpus
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
フロントエンドとバックエンドのインターフェース
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
B演習(言語処理系演習)第2回 田浦.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
マイグレーションを支援する分散集合オブジェクト
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
Created by L. Whittingham
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
Db2 Warehouse on Cloud Db2 on Cloud フルマネージドサービス提案時の注意点
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
情報処理Ⅱ 第7回 2004年11月16日(火).
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
ネットワーク・プログラミング 1対多のプロセス間通信.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報処理Ⅱ 2005年11月25日(金).
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報処理Ⅱ 小テスト 2005年2月1日(火).
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

中田 秀基(AIST/Titech), 田中 良夫(AIST) 松岡 聡(Titech/JST), 関口 智嗣(AIST) Oct. 26, 2001 at Wakayama Grid RPCシステムのAPIの提案 中田 秀基(AIST/Titech), 田中 良夫(AIST) 松岡 聡(Titech/JST), 関口 智嗣(AIST) Advanced Industrial Science and Technology / Tokyo Institute of Technology

背景 - The Grid 管理体制の異なる複数のサイトに存在する資源を使用して、高性能計算を行う ツールキットが整備されつつある セキュリティ、不安定性、ヘテロ性 ツールキットが整備されつつある Globus, Global Grid Forum それでもGrid上に計算システムを構築することはなかなかに難しい Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPCシステム 使用が容易なGridシステム 問題点: APIの標準が存在しない ー> 標準APIを提案 Ninf,NetSolve, etc. 複数のシステムが存在 さまざまな領域で使用されつつある 問題点: APIの標準が存在しない 標準APIを策定することにより、 GridRPC システムの普及 より洗練された実装の出現 が期待できる ー> 標準APIを提案 Advanced Industrial Science and Technology / Tokyo Institute of Technology

発表の概要 GridRPCシステムの概要 既存のシステム API 提案する GridRPC API 方針 API関数 サンプルコード Advanced Industrial Science and Technology / Tokyo Institute of Technology

Grid RPC 科学計算向けの使用が容易なGridシステム シンプルな RPC API Fortran / C で記述されたレガシーライブラリ ファイルインターフェイスのアプリケーション double A[n][n],B[n][n],C[n][n]; /* Data Decl.*/ dmmul(n,A,B,C); /* Call local function*/ Ninf_call(“dmmul”,n,A,B,C); /* Call server side routine*/ Grid RPC is a Easy to use grid system fo rscientific computing It has very simple RPC API This code segment demonstrate the simplisity this line is calling matrix multiply as a local function To make it RPC, only you have to do is just rewrite this line into this. It so easy. Now, The arguments automatically shipped to the server and the caliculation is done on the server side , results come back and are automatically stored in the arguments For the RPC component, existing libs and applications can be used It is also very easy to make libs and apps into RPC component. Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC Server Client サーバが計算資源とプログラムを提供 クライアントからデータを提供、結果を回収 Data Network enabled server may be the simplest form of global computing A Server serves computation, namely computation resource and computation program A Client ask for a server to do the computation, and send data for computation. Server will do some computation and returns the result. There are already several implementations of network enabled server. Such as our ninf, netsolve from utk, RCS from ETH, Switzerland . Data Server Client Result Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC アプリケーションとGridの間を埋めるミドルウェア より複雑なGrid対応システムの基盤 アプリケーション パラメータスイープ モンテカルロシミュレーション GA 逐次半正定値計画緩和法 Network enabled servesr may seem to be too primitive. But, it can serve as bases for more complex form of global computing such as parameter sweeping or mote carlo simulation Another important role of the NES is the middleware between the grid and application. Recently, some software for grid infrastructure are proposed, such as Legion and Globus. However, sometimes to implement application directly on top of such grid infrastructure is too hard for application people. NES can serve more friendly API for application people. Application Network Enabled Server Lower-level Grid Systems Advanced Industrial Science and Technology / Tokyo Institute of Technology

既存のGrid RPCシステム Ninf (AIST ・ Titech) NetSolve (UTK) Since1995 プロキシ(MetaServer)による負荷分散 IDL記述が比較的容易 ファイルのステージング サーバ側ルーチンからクライアント上の関数を呼び出すコールバック farmingのためのグループAPI NetSolve (UTK) Since 1995? Agentによる負荷分散 Matlab,Mathematica インターフェイス クライアントからサブルーチンを送り込む User Supplied Function FarmingAPI Advanced Industrial Science and Technology / Tokyo Institute of Technology

Ninf クライアントAPI API関数名 機能 int Ninf_call(char *, ...) ブロッキングRPC 第1引数でRPCライブラリ名を指定する 返り値は 成功時には NINF_OK、失敗時にはNINF_ERROR int Ninf_call_async(char *, ...) ノンブロッキングRPC 第1引数でRPCライブラリ名を指定する 返り値は 成功時には正の整数値であるセッションID 失敗時にはNINF_ERROR int Ninf_session_probe(int) 特定のノンブロッキングRPCが実行中かどうかの検出 引数はセッションID 返り値は真偽値を示すint int Ninf_session_cancel(int) 特定のノンブロッキングRPCの実行中止 引数はセッションID 返り値は成功時にはTRUE、失敗時にはFALSE int Ninf_wait(int) 特定のノンブロッキングRPCの終了を待つ 引数はセッションID 返り値は 成功時には NINF_OK、失敗時にはNINF_ERROR int Ninf_wait_all() 実行中のノンブロッキングRPCのすべての終了を待つ 返り値は 成功時には NINF_OK、失敗時にはNINF_ERROR int Ninf_wait_any(int *) 実行中のノンブロッキングRPCのいずれかの終了を待つ 第1引数のポインタに終了したセッションのIDを返す 返り値は 成功時には NINF_OK、失敗時にはNINF_ERROR Advanced Industrial Science and Technology / Tokyo Institute of Technology

Ninf サーバ側記述 プロトタイプ宣言にモードを追加したもの 任意のCコードを書くことも可能 Define dmmul( mode_in int n, mode_in double A[n][n], mode_in double B[n][n], mode_out double C[n][n]) Required "mmul.o" Calls "C" mmul(n,A,B,C); Advanced Industrial Science and Technology / Tokyo Institute of Technology

NetSolve クライアントAPI Ninfとほとんどセマンティクスは同じ Wait系が貧弱なのはfarming 専用APIがあるから 機能 int netsl(char *, ...) ブロッキングRPC 第1引数でRPCライブラリ名を指定する 返り値は ステイタスコード int netslnb(char *, ...) ノンブロッキングRPC 第1引数でRPCライブラリ名を指定する 返り値は 成功時には 正数であるのリクエストハンドル、失敗時にはエラーコードを返す int netslpr(int) 特定のノンブロッキングRPCが実行中かどうかの検出 返り値はNetSolveNotReadyまたは NetSolveOK int netslwt(int) 特定のノンブロッキングRPCの終了を待つ Ninfとほとんどセマンティクスは同じ Wait系が貧弱なのはfarming 専用APIがあるから Advanced Industrial Science and Technology / Tokyo Institute of Technology

NetSolveサーバ側記述 記述はかなり面倒 基本的にCプログラムのテンプレートとなるので非常に柔軟 @PROBLEM linsol @INCLUDE <math.h> @LIB -L/home/lib/ @FUNCTION linsol @LANGUAGE FORTRAN @MAJOR COL @PATH LinearAlgebra/LinearSystems/ @DESCRIPTION Solves the square linear system A*X = B. Where: A is a double-precision matrix of dimension NxN B is a double-precision matrix of dimension NxNRHS X is the solution @INPUT 2 @OBJECT MATRIX D A Matrix A (NxN) @OBJECT MATRIX D B Matrix B (NxNRHS) @OUTPUT 1 @OBJECT MATRIX D X Solution X (NxNRHS) @COMPLEXITY 3,3 @CALLINGSEQUENCE @ARG I0 @ARG I1,O0 @ARG nI0,mI0,mI1 @ARG nI1 @ARG lI0 @ARG lI1,lO0 @CODE 記述はかなり面倒 基本的にCプログラムのテンプレートとなるので非常に柔軟 Advanced Industrial Science and Technology / Tokyo Institute of Technology

API 策定の方針 (1) 方針 APIの範囲 初期段階としてクライアントプログラムが共有できることを目指す コンパイルドライバ、サーバ側インターフェイス、などは定めない Advanced Industrial Science and Technology / Tokyo Institute of Technology

API 策定の方針 (2) 機能の選択 サーバ選択機能(負荷分散機能) コールバック、User Supplied Function は含めない 実装が困難で、需要が不明なため FarmingAPI,グループAPIは含めない 双方とも未成熟 基本機能APIで実現が可能 サーバ選択機能(負荷分散機能) GridRPC APIからは分離、別レイヤで実現 基本ブロックとしての使い勝手を重視 別レイヤでの実現を容易にするために関数ハンドラという概念を導入 Advanced Industrial Science and Technology / Tokyo Institute of Technology

API 策定の方針 (3) エラーコード、ステイタスコード プログラム中に直接現れるため定義する必要がある。 エラーコードのバリエーションはシステム依存 →なるべく一般的なコードを作成 システム依存の部分はコードに対応するメッセージで記述 Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (1) ステイタスコードとエラーコード 意味 GRPCERR_NOERROR エラーではない GRPCERR_NOT_INITIALIZED 初期化がされていない GRPCERR_SERVER_NOT_FOUND サーバが見つからない GRPCERR_CONNECTION_REFUSED サーバへの接続に失敗した GRPCERR_NO_SUCH_FUNCTION 指定した関数が存在しない GRPCERR_AUTHENTICATION_FAILED サーバでの認証に失敗した GRPCERR_RPC_REFUSED サーバで実行する権限がない GRPCERR_COMMUNICATION_FAILED 通信に障害が起きた GRPCERR_PROTOCOL_ERROR プロトコルがおかしい GRPCERR_CLIENT_INTERNAL_ERROR クライアントの内部エラー GRPCERR_SERVER_INTERNAL_ERROR サーバの内部エラー GRPCERR_EXECUTABLE_DIED 実行ファイルがなんらかの理由で落ちた GRPCERR_SIGNAL_CAUGHT 計算中になんらかのシグナルが発生した GRPCERR_UNKNOWN_ERROR 不明なエラーが発生した ステイタスコード コード 値 意味 GRPC_OK 0 成功を表す GRPC_ERROR -1 失敗を表す Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (2) 初期化と後処理 int grpc_finalize(); int grpc_initialize( char * config_file_name); コンフィギュレーションファイルを読み出して、 RPCシステムに必要な初期化を行う。 この関数が呼ばれるよりも前に、RPC用の関数を呼び出した場合には、正常な動作は保証されない。 引数としてコンフィグレーションファイルの名前を与える。コンフィグレーションファイルの機能は、各システムの構成に依存するので、ここでは規定しない。 初期化が成功すればGRPC_OK、失敗すればGRPC_ERRORを返す int grpc_finalize(); RPCに使用した資源を解放する。 この関数が呼ばれた以降にRPC用の関数を呼び出した場合には、正常な動作は保証されない。 Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (3) リモート関数ハンドル int grpc_function_handle_default( grpc_function_handle_t * handle, char * func_name); デフォルトのホスト、ポートを使用して、第1引数で与えられる構造体領域を初期化 初期化が成功すればGRPC_OK、失敗すればGRPC_ERROR int grpc_function_handle_init( grpc_function_handle_t * handle, char * host_name, int port, char * func_name); サーバのホストとポートを明示的に指定して初期化 grpc_function_handle_t * grpc_get_handle( int sessionId); 引数で指定したセッションIDが使用したハンドルのポインタを取得する。 Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (4) RPC呼び出し 第1引数で指定したハンドラを使用してブロッキングでRPC呼び出しを行う int grpc_call( grpc_function_handle_t *, ...); 第1引数で指定したハンドラを使用してブロッキングでRPC呼び出しを行う 成功すればGRPC_OK、失敗すればGRPC_ERROR int grpc_call_async( grpc_function_handle_t *, ...); 第1引数で指定したハンドラを使用してノンブロッキングでRPC呼び出しを行う 成功すればその呼び出しのハンドラとなる正数、セッションIDを、失敗すればGRPC_ERRORを返す Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (5) RPC呼び出し int grpc_probe(int sessionID); 第1引数で指定する呼び出しが終了したかどうかを調査 終了していれば1を、していなければ0を返す。調査自体に失敗すればGRPC_ERRORを返す int grpc_cancel(int sessionID); 実行中の関数をキャンセル 成功すればGRPC_OK、失敗すればGRPC_ERROR 関数がすでに終了していた場合にもGRPC_OK int grpc_wait(int sessionID); 第1引数で指定する呼び出しの終了を待つ Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (6) RPC呼び出し int grpc_wait_and( int * idArray, int length); 複数の呼び出しがすべて終了するのを待つ。第1、第2引数でセッションIDの配列とその長さを指定する。すべての呼び出しが成功すればGRPC_OK、いずれかが失敗すればGRPC_ERRORを返す。 int grpc_wait_or( int * idArray, int length, int * idPtr); 複数の呼び出しのいずれかが終了するのを待つ。 第1、第2引数でセッションIDの配列とその長さを指定する。 終了した呼び出しが成功していればGRPC_OK、失敗していればGRPC_ERRORを返す。第3引数に終了したセッションのIDをセットする。 int grpc_wait_all(); それまでに行ったノンブロッキング呼び出しがすべて終了するのを待つ。 すべての呼び出しが成功すればGRPC_OK、いずれかが失敗すればGRPC_ERRORを返す。 int grpc_wait_any( int * idPtr); 終了した呼び出しが成功していればGRPC_OK、失敗していればGRPC_ERRORを返す。第1引数に終了したセッションのIDをセットする。 Advanced Industrial Science and Technology / Tokyo Institute of Technology

GridRPC API (7) エラー処理 int grpc_get_last_error(); int grpc_get_error(int sessionID); 第1引数で指定されるセッションIDを持つセッションのエラーコードを取得する。 セッションIDに対応するセッションが存在しない場合は -1を返す void grpc_perror(char * str); 第1引数で与えた文字列の後に、最後に行ったRPC処理のエラー情報の文字列を付加して標準エラーに出力する。 char * grpc_error_string(int error_code); 第1引数で指定されるエラーコードに対応する文字列を返す Advanced Industrial Science and Technology / Tokyo Institute of Technology

サンプルコード #include "grpc.h" #define NUM_HOSTS 8 char * hosts[] = {"host00", "host01", "host02", "host03", "host04", "host05", "host06", "host07"}; grpc_function_handle_t handles[NUM_HOSTS]; int port = 4000; main(int argc, char ** argv){ double pi; long times, count[NUM_HOSTS], sum; char * config_file; int i; if (argc < 3){ fprintf(stderr, "USAGE: %s CONFIG_FILE TIMES \n", argv[0]); exit(2); } config_file = argv[1]; times = atol(argv[2]) / NUM_HOSTS; /* GRPCの初期化 */ if (grpc_initialize(config_file) != GRPC_OK){ grpc_perror("grpc_initialize"); /* ハンドルの初期化 */ for (i = 0; i < NUM_HOSTS; i++) grpc_function_handle_init(&handles[i], hosts[i], port, "pi/pi_trial"); /* ノンブロッキング呼び出しによる並列呼び出し*/ if (gprc_call_async(&handles[i], i, times, &count[i]) == GRPC_ERROR){ grpc_perror("pi_trial"); exit(2); } /* すべての呼び出しの終了を待つ */ if (grpc_wait_all() == GRPC_ERROR){ grpc_perror("wait_all"); /* PIの計算と表示 */ for (i = 0, sum = 0; i < NUM_HOSTS; i++) sum += count[i]; pi = 4.0 * ( sum / ((double) times * NUM_HOSTS)); printf("PI = %f\n", pi); /* GRPC の後処理 */ grpc_finalize(); Advanced Industrial Science and Technology / Tokyo Institute of Technology

まとめ GridRPC のAPIを提案した 現状 クライアントのプログラミングAPIのみ ビルディングブロックとしての柔軟性を重視 Ninfをベースにしたシステム Ninf-G (Ninf on Globus) Advanced Industrial Science and Technology / Tokyo Institute of Technology

今後の課題 柔軟性、機能が十分であることを検証 Global Grid Forum 、APM-WGで提案、修正 ご意見ください http://ninf.apgrid.org/gridrpc_api 複数のGridRPCクライアントが共存可能か? ご意見ください Advanced Industrial Science and Technology / Tokyo Institute of Technology