福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室 JAVAアプレットによる 分散処理の実現 福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室
発表の概要 はじめに システムの概要 実行例 今後の展開 まとめ
目標:世界中に存在する計算機を使った 並列分散処理 はじめに ―本作品の動機と目標― 目標:世界中に存在する計算機を使った 並列分散処理 動機: ネットワーク接続されているPCの増加 これらPCの計算能力が生かされているかは疑問 JAVA(アプレット)の特徴である アーキテクチャ非依存性 ネットワーク適用性 を生かして大規模な問題を分散計算させることができないか
システムの概要 サーバはJAVA Program、クライアントはJAVA Appletで実装 Crowd Computingに基づく計算 依存のない小さな 計算単位の集合 クライアント クライアント クライアント サーバ 計算の実行
Client(s) Server 3. ソケット接続を確保し、 計算クライアントになる 1. Httpによる 該当ページへのアクセス resultcode = is.readByte(); startline = is.readInt(); endline = is.readInt(); if (resultcode == 1) { MSubArea msarea = new MSubArea(startline, endline); if (recv_msarea(msarea, is) == 0) { for (int i = 0; i < endline - startline; i++) { marea.area[i + startline] = msarea.subarea[i]; mctrl.Dflag[i + startline] = 1; } os.writeByte(resultcode); os.writeInt(mctrl.startline); os.writeInt(mctrl.endline); ....... send_msarea(msarea, os); is.close(); os.close(); ...... 3. ソケット接続を確保し、 計算クライアントになる 1. Httpによる 該当ページへのアクセス public class Mserv { ……... while (listening) { Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } …….. new MservThread(clientSocket, minfo, marea, mctrl).start(); } ……. class MservThread extends Thread { public void run() { ...... minfo.ix = is.readDouble(); minfo.iy = is.readDouble(); minfo.size = is.readDouble(); mctrl.startline = is.readInt(); mctrl.endline = is.readInt(); // Mandelblot calculation ..... public class Mclient extends Applet implements Runnable { ..... public void run() { while (execflag == true) { try { String hostname = getCodeBase().getHost(); clientSocket = new Socket(hostname, PORT); ...... } ........ reqtype = is.readInt(); switch (reqtype) { case 1: ..... os.writeDouble(minfo.ix); os.writeDouble(minfo.iy); os.writeDouble(minfo.size); os.writeInt(startline); os.writeInt(endline); .... } 2.サーバから Applet送信 Client(s) 4. サーバから 初期データを送信 5.担当部分の 計算を実行 Server 6. 計算結果を受け取る
マンデルブロー集合の計算例における実行の流れ 計算対象を小領域に分割 マンデルブロー集合の計算の場合、縦5ライン単位での分割を行なう
クライアントへの計算の分配 複数のクライアントの同時処理が前提 クライアント数は常に変動 計算済 計算中 次の計算予定部 計算実行中にクライアント終了、その他コネクションの切断 現在はネットワークの例外処理で対処
実行例 1. マンデルブロー集合の計算 2. ナップザック問題
今後の展開 各計算機の能力に合わせた負荷分散 安定性の強化 適用アプリケーションの拡大 レイトレーシングなどに対しては比較的容易に対応が可能 探索問題について可能性を探る
まとめ ネットワーク上に存在する不特定多数の計算機を対象とした分散計算処理の可能性について述べた これによりJAVAとJAVA appletの持つ特徴を生かした、世界中の計算機を利用する並列分散処理の可能性がひらけるものと考える
負荷分散の問題(その2) 本格的な解決 計算機ごとにパフォーマンスを計測、それに基づいて負荷分配を実施 計算時間の計測 ネットワークパフォーマンスの計測
一般の関心を引くページ/プロジェクトとの組み合わせ 今後の展開 ―― 計算機資源の確保 一般の関心を引くページ/プロジェクトとの組み合わせ 例: NASAの“Mars Pathfinder”ページ 一日あたりで数百万単位のアクセス 観測データのレンダリング処理などは関心を引く? 他のアプリケーションとの並立 例:「JAVA将棋」(早稲田大学村岡研究室) 一日あたり2000件のアクセス 一回の接続時間は20分程度 アイドル時間が長いアプリケーション その他 何らかの対価を払う?
計算機資源の確保 理論上は全世界のネットワーク接続された計算機を利用することが可能 一方で極端な場合計算機資源が確保できない場合すら存在する 計算機資源をどう確保するか→当面の課題
ネットワークの問題 HTTPアクセスの可能なすべての計算機を対象とすることを前提とする 現在ネットワークの性能には大きなばらつきが認められる 適用可能なアプリケーションは現状では限定 将来的にはネットワーク状況の改善により適用可能なアプリケーションは増加