Hidemoto Nakada Yoshio Tanaka Osami Tatebe

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

Humble and Honorific Language By: Word-Master Leo, Mixer of Ill Beats.
て -form - Making て -form from ます -form -. With て -form, You can say... ~てもいいですか? (= May I do…) ~てください。 (= Please do…) ~ています。 (= am/is/are doing…) Connecting.
第 5 章 2 次元モデル Chapter 5 2-dimensional model. Contents 1.2 次元モデル 2-dimensional model 2. 弱形式 Weak form 3.FEM 近似 FEM approximation 4. まとめ Summary.
この部分こそが必 要とされている ! Runtime 自身と Expression が カバーする!
Essay writing rules for Japanese!!. * First ・ There are two directions you can write. ・よこがき / 横書き (same as we write English) ・たてがき / 縦書き (from right to.
VE 01 え form What is え form? え? You can do that many things with え form?
ネットワークからみるPCC 寺内康之.
SS2-15:A Study on Image Recognition and Understanding
Globus ToolkitによるGridRPC システムの実装と評価
S. Tsuboi(1), H. Mizutani(1), N. Takeuchi(2) T. Arai (3), Y. Yanaka(3)
小水力班/ Small Hydro Generation Group 研究背景 / Research background
The Bar バー.
英語勉強会.
第1回レポートの課題 6月15日出題 今回の課題は1問のみ 第2回レポートと併せて本科目の単位を認定 第2回は7月に出題予定
 辞書系(じしょけい).
Chapter 11 Queues 行列.
日本語... ジェパディー! This is a template for you to use in your classroom.
Webサービス技術を基盤とするGridRPCシステムの評価
Ruby Extended Library Howto
2009年 3月 17日 法政大学 常盤祐司、児玉靖司、八名和夫、Ivan Ho、Billy Pham
Chris Burgess (1号館1308研究室、内線164)
Ruby Extended Library Howto
What did you do, mate? Plain-Past
Verb Plain Negativeform
ネットワーク構成法 スケール 第6回 11月19日.
Noun の 間(に) + Adjective Verb てform + いる間(に) during/while.
最新情報技術を活用した超大規模 天文データ解析機構の研究開発
INSERTを高速化したPostgreSQL
都市情報学専攻 情報基盤研究分野  M04UC513  藤田昭人
視覚的な分散アプリケーション 構築ツールuBlockの開発
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
Tohoku University Kyo Tsukada
Nagoya University Global 30 program
にほんご JPN101 Sep. 23, 2009 (Wednesday).
Network Programming in C ネットワークプログラミング Lecture 8, Network Programming (3) 第8回「ネットワークとプログラミング(3)」 2010年秋学期 Rodney Van Meter.
十年生の 日本語 Year 10 Writing Portfolio
Licensing information
Provisioning on Multiple Network(NIC) env
The Sacred Deer of 奈良(なら)
Did he/she just say that? Get your head out of the gutter! Oh wait….
“You Should Go To Kyoto”
Air Pen -- an introduction of my recent result --
DataGrid ミニワークショップ@天文台 12/12
動的なアプリケーション開発実行を可能にするグリッドポータルアーキテクチャ
New accessory hardware Global Platform Division
情報の科学的 な理解(2) 情報科教育法 8回目 2005/6/4 太田 剛.
Causative Verbs Extensively borrowed from Rubin, J “Gone Fishin’”, Power Japanese (1992: Kodansha:Tokyo) Created by K McMahon.
-Get test signed and make corrections
デバッガ dbx の使い方.
Term paper, Report (1st, first)
My Favorite Movie I will introduce my favorite movie.
Where is Wumpus Propositional logic (cont…) Reasoning where is wumpus
There is/are X (living thing)
Term paper, report (2nd, final)
第1回レポートの課題 6月24日出題 今回の課題は1問のみ 第2回レポートと併せて本科目の単位を認定 第2回は7月に出題予定
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
ー生命倫理の授業を通して生徒の意識に何が生じたかー
Created by L. Whittingham
The Facilitative Cues in Learning Complex Recursive Structures
Cluster EG Face To Face meeting
Grammar Point 2: Describing the locations of objects
Cluster EG Face To Face meeting 3rd
セッション名: (35) システム化技術 講演番号 2P
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
中田 秀基(AIST/Titech), 田中 良夫(AIST) 松岡 聡(Titech/JST), 関口 智嗣(AIST)
Improving Strategic Play in Shogi by Using Move Sequence Trees
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
Windows Azure メディアサービス
Presentation transcript:

Hidemoto Nakada Yoshio Tanaka Osami Tatebe Ninf Tutorial Hidemoto Nakada Yoshio Tanaka Osami Tatebe

Network Enabled Server (NES) (1) A simple RPC-based programming model for the Grid Servers serve computation resources Network-enabled Libraries (and Apps) Clients makes calls with data to be computed Task Parallelism (synch. and asynch. calls) Key property: EASE OF USE 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

Network Enabled Server (2) Some characteristics Very simple RPC API (prog API, browser API, etc.) Existing libs and apps into NES components IDL embodying call info, minimal client-side management Here is the typical API of network enabled server. The only thing client user have to do is just replace this function invocation by this one. Here, I wrote that NES_call double A[n][n],B[n][n],C[n][n]; /* Data Decl.*/ dmmul(n,A,B,C); /* Call local function*/ NES_call(“dmmul”,n,A,B,C); /* Call server side routine*/

Network Enabled Server (3) Programming Model middleware between “the Grid” and Application Bases for more complex form of global computing Success stories of large computational problems happening Parameter sweeping Monte Carlo Simulation – MCell (Netsolve) Coarse-Grained Iterative Algorithms Fork-Join per iteration SCRM-SDPA App (Ninf) Network-enabled “generic” libraries SCLAPACK for Netsolve/Ninf 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

Examples of NES systems Netsolve (UTK) Ninf (ETL/TITECH) Nimrod, Nimrod/G Punch RCS CORBA-based sys. (several) …etc. Intermediary position between Grid Portals and Grid Components (ease-of-use, automated programming interface on top of components)

Ninf: Features At-a-Glance Ease-of-use, client-server, Numerical-oriented RPC system User’s view: ordinary software library Asymmetric client vs. server Transparent server discovery Problem solved on an arbitrary network node running the Ninf server Dynamic allocation of resources with metaserver Data Access: NinfDB, WebAccess Client APIs: Fortran, C/C++, Java, COM etc.

Brief History of Ninf The first design paper (Jun.’94) A proto implementation (Sep.’94) w/PVM Paper POOMA’95 at Santa Fe (Mar.’95) ETL Cray J90 installed as Ninf server Sep.’95 The Metaserver introduced Feb.’96 The v.1.0 released Jun.’96 Ninf/Netsolve Collaboration, Fall ’97 Extensive Tools Development Early ’98~, v.1.2 Ninf v.2.0, Globus Integration Development ’00~ GridRPC and DataFarm 2000~

Basic Ninf Client API Ninf_call(FUNC_NAME, ....); FUNC_NAME = NAME | ninf://HOST:PORT/ENTRY_NAME API for C, C++, Fortran, Java, Lisp, COM, Mathematica, ... No client stub generation (c.f., CORBA) 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 Ninf Func */ “Ninfy” via IDL descriptions

Ninf Interface Description (Ninf IDL) 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 “ Required “libXXX.o” CalcOrder n^3 Calls “C” dmmul(n,A,B,C); IDL information: library function’s name, and its alias (Define) arguments’ access mode, data type (mode_in, out, inout, ...) required library for the routine (Required) computation order (CalcOrder) source language (Calls)

Ninf RPC Protocol Two-phase, runtime exchange of interface info No client stub routines (cf. SunRPC) No modification of client program when server’s libs updated Client library stays relatively static Client Program Ninf library program Result Argument Client Library Interface Info Stub Program Interface Info Interface Info. Interface Request Ninf Server Interface Info

Architectural Layers of Ninf Ninf Protocol Ninf MetaServer Hardware Service Resource Manager Programming Tool Application Gigabit Net LAN WAN FTP HTTP NetSolve Adpter TCP/IP Ninf Client API (F77, C, Java,…) Ninf DB Ninf Computation Server NetSolve NinfCalc+ ExcelNinf Mathematica ... Numerical Scientific Computing Progs. Mathematical Libraries

Ninf MetaServer Architecture Directory Service Server Client Side Load Measurement Server Proxy Scheduler Probe Client Server Side Data Throughput Measurement Client Client Proxy

Client API (2) Client File Handling "Filename" type is supported Local file is automatically shipped to the server Server side output file is forwarded to the client Ninf_call("plot/plot", "inputfile", "outputfile"); inputfile Server Client Program outputfile

Ninf Client API(3) - asynchronous calls - Waiting for reply Client ServerA ServerB Ninf_call_async Ninf_call_async(“FUNC”, ...); Ninf_call_async Ninf_wait_all Ninf_wait(ID); Ninf_wait_all(); Ninf_wait_any(); Ninf_wait_and(IDList, len); Ninf_wait_or(IDList, len); Ninf_cancel(ID); We also have asynchronous call API. Ninf_call_async immediately returns with session ID. And with the ID, you can wait the result of the call. Using this API, we can invoke several calls in parallel. We have another API for parallel execution , called transaction. It specifies a certain program region as a transaction, and execute all ninf_calls in the region in parallel. Data dependency among the ninf_calls is automatically detected, and the ninf_calls scheduled properly. Various task parallel programs spanning clusters are easy to write

Ninf Client API(4) - Callback - Server Server side routine can call back clients (ex.) Display of interim results of computation on servers to a client machine Ninf_call CallbcakFunc void CallbackFunc(...){ .… /* define callback routine */ } Ninf_call(“Func”, arg .., CallbackFunc); /* call with pointer to the function */

Using Ninf to “Gridify” a Library/Application (1)Write interface description to Gridify an app/library in Ninf IDL Ninf IDL file (2)Run Ninf interface generator on server stub programs and Makefile (3)Compile the library program and link with stub programs Ninf executables (4)Register Ninf executables with Ninf server

Gridifying(2) Executable Generation and Registration Ninf Clients Ninf IDL file xxx.idl Ninf_call("goo",...) Ninf_call("bar",...) Ninf_call("foo",...) Ninf_gen stub main programs _stub_foo.c _stub_foo Ninf Server _stub_bar.c module.mak _stub_goo.c stubs.dir _stub_bar Library program yyy.a stubs.alias _stub_goo Ninfserver.conf

Tutorial 計算ライブラリを用いるプログラムのNinf化 ファイルインターフェイスプログラムのNinf化 行列乗算 ファイルインターフェイスプログラムのNinf化 gnuplot パラメータサーベイプログラムのNinf化 複数サーバを用いた並列実行 動的負荷分散 モンテカルロによるPIの計算

Directoryの構成 tutorial mmul - 計算ライブラリを用いるプログラム server client gnuplot - ファイルインターフェイスプログラム pi - 複数サーバを用いたプログラムの並列実行

計算ライブラリを用いるプログラムのNinf化 サーバ側 IDLの準備とコンパイル サーバへの登録 クライアント側 ルーチン呼び出し部のNinf化 Ninfccによるコンパイル

計算ライブラリを用いるプログラムのNinf化 – 準備 ライブラリインターフェイスの整備 暗黙のグローバル変数を用いたインターフェイスを抽出しインターフェイスを整える 引数配列のサイズがインターフェイスに明示的に登場するように変更 void mmul(int n, double * a, double * b, double * c){ double t; int i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { t = 0; for (k = 0; k < N; k++){ t += a[i * n + k] * b[k * n + j]; } c[i*N+j] = t;

計算ライブラリを用いるプログラムのNinf化 – サーバ側 インターフェイス情報をIDLで記述 Module mmul; Define mmul(IN int N, IN double A[N*N], IN double B[N*N], OUT double C[N*N]) "matmul" Required "mmul_lib.o" Calls "C" mmul(N, A, B, C);

計算ライブラリを用いるプログラムのNinf化 – サーバ側 IDLのコンパイルとサーバ側実行時ファイルのMake ninf_gen mmul.idl mmul.mak _stub_mmul.c cc _stub_mmul mmul_lib.o > ninf_gen mmul.idl > make -f mmul.mak

計算ライブラリを用いるプログラムのNinf化 – サーバ側 サーバへの起動とNinf Executableの登録 設定ファイルに記述して起動 起動後のサーバに動的に登録 stubs ./_stub_mmul > ninf_serv_tcp mmul.conf > ninf_serv_tcp > ninf_register _stub_mmul

計算ライブラリを用いるプログラムのNinf化 – クライアント側 ソースプログラムの変更 初期化ルーチンの挿入 関数呼び出し部の置き換え main(int argc, char ** argv){ argc = ninf_parse_arg(argc, argv); : mmul(N, A, B, C); if (Ninf_call("mmul/mmul", N, A, B, C) != NINF_ERROR) Ninf_perror("mmul");

計算ライブラリを用いるプログラムのNinf化 – クライアント側 コンパイル コンパイルドライバ ninfccを使用 実行 サーバ名、ポート番号を引数で指定 > ninf_cc -o mmul_ninf mmul_ninf.c > ./mmul_ninf -server hpc.etl.go.jp -port 3010

ファイルインターフェイスプログラムのNinf化 Gnuplotを使用 set terminal postscript set xlabel "x" set ylabel "y" plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x) > gnuplot gplot > graph.ps

ファイルインターフェイスプログラムのNinf化 - サーバ側 IDLの記述とコンパイル Module plot; Define plot(IN filename plotfile, OUT filename psfile ) "invoke gnuplot" { char buffer[1000]; sprintf(buffer, "gnuplot %s > %s", plotfile, psfile); system(buffer); } > ninf_gen plot.idl > make -f plot.mak > ninf_serv plot.conf

ファイルインターフェイスプログラムのNinf化 - クライアント側 main(int argc, char ** argv){ argc = Ninf_parse_arg(argc, argv); if (Ninf_call("plot/plot", argv[1], argv[2]) == NINF_ERROR) Ninf_perror("Ninf_call plot:"); } > ninfcc -o plot_main plot_main.c > ./plot_main gplot graph.ps ローカルホストへでの実行 > ./plot_main -server hpc.etl.go.jp -port 3010 gplot graph.ps 電総研サーバでの実行

複数サーバを用いた並列実行 モンテカルロ法による円周率の計算 X、Yの乱数を生成し、それが円の内部に入るかどうかをテスト、その確率から円の面積を逆算 PI = 4 p

複数サーバを用いた並列実行 Module pi; Define pi_trial(IN int seed, IN long times, OUT long * count) "monte carlo pi computation" Required "pi_trial.o" { long counter; counter = pi_trial(seed, times); *count = counter; }

複数サーバを用いた並列実行 - 単純な Ninf化 if (Ninf_call("pi/pi_trial", 10, times, &count) == NINF_ERROR){ Ninf_perror("pi_trial"); } pi = 4.0 * ( count / (double) times);

複数サーバを用いた並列実行 - 複数サーバへの拡張 複数サーバを用いた並列実行 - 複数サーバへの拡張 非同期呼び出し機構を用いて同時に複数のサーバを使用 Ninf_call_async(); Ninf_wait_all(); for (i = 0; i < NUM_HOSTS; i++){ char entry[100]; sprintf(entry, "ninf://%s:%d/pi/pi_trial", hosts[i], port); if (Ninf_call_async(entry, i, times, &count[i]) == NINF_ERROR){ Ninf_perror("pi_trial"); exit(2); } Ninf_wait_all();

複数サーバを用いた並列実行 - 複数サーバへの拡張 複数サーバを用いた並列実行 - 複数サーバへの拡張 会場の計算機を用いた並列実行 > ninf_serv_tcp pi.conf -port 4000 user1 4000 user2 4000 user3 4000 : hostfile > ./parallel_pi hostfile 1000000

複数サーバを用いた並列実行 - 動的負荷分散 複数サーバを用いた並列実行 - 動的負荷分散 サーバ性能にばらつきがある場合には負荷の不均衡が生じうる 負荷を細分化しセルフスケジューリングを行って動的に負荷分散を行う Ninf_wait_any で終了したサーバを検出

複数サーバを用いた並列実行 - 動的負荷分散 複数サーバを用いた並列実行 - 動的負荷分散 for (i = 0; i < NUM_HOSTS; i++){ sprintf(entry[i], "ninf://%s:%d/pi/pi_trial", hosts[i], port); if ((ids[i] = Ninf_call_async(entry[i], rand(), times, &count[i])) == NINF_ERROR){ Ninf_perror("pi_trial"); exit(2); } while (1) { int id = Ninf_wait_any(); /* WAIT FOR ANY HOST */ if (id == NINF_OK) break; for (i = 0; i < NUM_HOSTS; i++) /* FIND HOST */ if (ids[i] == id) break; sum += count[i]; done += times; if (done >= whole_times) continue; if ((ids[i] = Ninf_call_async(entry[i], rand(), times, &count[i])) == NINF_ERROR){

おわりに Ninf の特徴 Ninf2 使うのは(わりに)容易 クラスタでの並列計算が容易に実現できる Globusとの関連を強化 強固なセキュリティ グローバル環境