Cilk-NOW 米澤研究室 金田憲二 “Adaptive and Reliable Parallel Computing on Networks of Workstations” Robert D. Blumofe (Univ. of Texas) Philip A. Lisiecki (MIT)

Slides:



Advertisements
Similar presentations
G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
Advertisements

演習3 米澤研究室 発表2 山崎孝裕. 主な内容  分散動的サーバモデル(復習)  掲示板システムの問題点と仮定  掲示板システムの大まかな動き(細かい エラー処理は考慮しない)
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
耐故障アルゴリズム.
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
Timeout と再送 往復時間 予知が困難 他のトラフィックに依存 適応再送アルゴリズム データの採取.
キャッシュ付PRAM上の 並列クィックソートと 並列マージソート
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
最新ファイルの提供を保証する代理FTPサーバの開発
報告 (2006/9/6) 高橋 慧.
WagbyR6.5 Update 12 PPT版 更新情報
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
情報工学概論 (アルゴリズムとデータ構造)
全体ミーティング (6/13) 村田雅之.
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
第6章 トランザクション管理 6.1 トランザクションの概念 6.2 同時実行制御 6.3 障害回復.
多数の遊休PC上での 分散ゲーム木探索 導入 ゲーム木探索 ⇒遊休PCを利用して高速化 例)コンピュータ将棋における次手の計算
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
アルゴリズムとデータ構造 2011年6月13日
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
第20章 Flyweight ~同じものを共有して無駄をなくす~
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
モバイルP2Pを用いた携帯電話 動画配信手法の提案 第3回
二分探索木によるサーチ.
第8章 Web技術とセキュリティ   岡本 好未.
Occam言語による マルチプリエンプティブシステムの 実装と検証
第11章 UDPユーザ・データグラム・プロトコル
USENIX 2004 A Transport Layer Approach for Improving End-to-End Performance and Robustness Using Redundant Paths 寺岡研究室 斉藤俊介.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
マルチスレッド処理 マルチプロセス処理について
耐故障処理 Fault Tolerance 「分散計算の基礎」 12章 発表者 : 高橋 慧.
共有メモリマシン上での 並列計算プログラミング
12/14 全体ミーティング 米澤研究室卒論生 山崎孝裕
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
第9回 優先度つき待ち行列,ヒープ,二分探索木
並行プログラミング concurrent programming
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
ロボットの協調動作の研究: マップ作成とマップ情報を利用した行動計画
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
書き換え型プログラムの生成・検証 研究課題:適切な実行戦略を効率よく探索する、 より自動化された手続きの実現 書き換え型プログラム
進捗報告 金田憲二.
アルゴリズムとデータ構造 2010年7月26日
片方向通信路を含む ネットワークアーキテクチャに於ける 動的な仮想リンク制御機構の設計と実装
オブジェクト指向プログラミングと開発環境
プログラミング 4 木構造とヒープ.
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
Virtualizing a Multiprocessor Machine on a Network of Computers
JAVAバイトコードにおける データ依存解析手法の提案と実装
「マイグレーションを支援する分散集合オブジェクト」
マイグレーションを支援する分散集合オブジェクト
第9回 優先度つき待ち行列,ヒープ,二分探索木
全体ミーティング (5/23) 村田雅之.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造1 2008年7月24日
「マイグレーションを支援する分散集合オブジェクト」
GbEにおける TCP/IP の研究について
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
平面走査法を使った 一般線分の 交点列挙アルゴリズム
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
全体ミーティング(9/15) 村田雅之.
Presentation transcript:

Cilk-NOW 米澤研究室 金田憲二 “Adaptive and Reliable Parallel Computing on Networks of Workstations” Robert D. Blumofe (Univ. of Texas) Philip A. Lisiecki (MIT) Proceedings of the USENIX Annual Technical Conference, 1997

Cilk言語 C言語に並列性を表現するためのプリミティブを加えたもの DAG型計算モデル

Cilk-NOW 遊休のPC上でCilkプログラムを実行するランタイムシステム 分散版Cilk PCの参加・脱退にあわせた並列度の調整 耐故障性

発表の概要 Cilk言語 並列度の調整 耐故障性 まとめ 動作例 work stealingスケジューラ PCの参加・脱退時の処理 再実行・チェックポイント まとめ

thread Fib (cont int k, int n) { if (n <2) { send_argument (k,n); } else { cont int x, y; spawn_next Sum (k, ?x, ?y); spawn Fib (x, n-1); spawn Fib (y, n-2) }} thread Sum (cont int k, int x, int y) { send_argument (k, x+y); }

Cilkの文法 (1/3) spawn T (args …) spawn_next T (args …) 意味:スレッドTを並列に実行 実装:ランタイムがヒープ上にclosureを生成 Sum Fib Join counter k 空のArgument slots 空のArgument slots k Arguments Arguments n=9 ※Join counter:空のArgument slots数(0で実行可能)

Cilkの文法 (3/3) cont continuation 空のempty argument slotへの参照 ※closureへのポインタと   argument slotへのオフセットからなる Sum 2 k Fib x n=8 continuation Fib y n=7

Cilkの文法 (2/3) send_argument(k, value) continuation kで指定されたargument slotにvalueを送る

動作例 Fib k n=9 Sum 2 k spawn_next Fib x n=8 spawn spawn Fib y n=7

動作例 Sum 2 k Fib x n=8 Fib y n=7

動作例 Sum 1 k 21 Fib y n=7

動作例 Sum k 21 13

work stealingスケジューラ (1/3) 各プロセスは ready dequeをもつ 実行可能なclosureが格納される join counterが0になったclosureは        dequeの先頭におかれる dequeの先頭から実行されていく

work stealingスケジューラ (2/3) ready dequeが空になるとwork stealingが起こる thiefはランダムにvictimを選択 steal requestをvictimに送信 victimは ready dequeが空でないなら,dequeの末尾のclosureをthiefに委譲 ready dequeが空なら,thiefに再トライを要求 ※盗む側:thief   盗まれる側:victim

work stealingスケジューラ (3/3) なぜ末尾のclosureから盗むのか? ヒューリスティック的な根拠 末尾のclosureほど多くspawnする場合が多い ⇒末尾のclosureほど大量のworkを含む ⇒なるべく小さい通信量で,大量のworkを盗める アルゴリズム的な根拠 次の3枚のスライドで説明する

work stealingの解析 (1/3) DAG型計算モデル sequential execution spawn spawn_next continuation instruction thread procedure

work stealingの解析 (2/3) well structuredな計算とは 個々のprocedureは親にのみ値を送信 かつ,値の送信はprocedure中の最後のthreadの最後の操作

work stealingの解析 (3/3) well structuredな計算の実行時間は T1/P + T∞とモデル化できる   T1 : DAG中のinstruction数     (1プロセスにおける実行時間) T∞ : DAGの最長パス長         (critical path長) DAG上のcritical pathとなるclosureは, ready dequeの末尾に位置することより導きかれる

並列度の調整 遊休なPC上で(複数の)Cilkプログラムを走らせることを目指す PCの参加,脱退を効率よく扱うことを目指す プログラム A B プログラム C

並列度の調整方法の概要 新たに参加するプロセスは, 他のプロセスからclosureを盗む 脱退するプロセスは, 必要に応じてcontinuationの参照先を更新 ※waiting closureの委譲を扱う必要がある

並列度の調整方法の詳細 work stealing方法の変更 脱退時の処理 subcomputation・result closureの導入

work stealing方法の変更 (1/5) subcomputation ready, waiting, assigned poolから構成される globalにuniqueなnameを持つ PC名+localにuniqueな番号 work steal時に生成される closureの全てのcontinuationは同じsubcomputation中のclosureを参照する 異なるsubcomputation間の通信は,特殊なresult closureを中継させる

work stealing方法の変更 (2/5) thiefは, subcomputationを生成 stealリクエストをvictimに送信 subcomputation r:j用ののclosureを盗みたい victim s thief r subcomputation s:i subcomputation r:j assigned waiting ready ready waiting assigned

work stealing方法の変更 (3/5) victimは, ready poolの空でないsubcomputationをround-robinに選択 ready poolの末尾のclosureをassigned poolに移動 thiefの名前とthiefのsubcomputationの名前を保持 victim s thief r subcomputation s:i subcomputation r:j assigned waiting ready ready waiting assigned

work stealing方法の変更 (3/5) victimは, ready poolの空でないsubcomputationをround-robinに選択 ready poolの末尾のclosureをassigned poolに移動 thiefの名前とthiefのsubcomputationの名前を保持 thief name victim s thief subcomp. thief r subcomputation s:i subcomputation r:j assigned waiting ready ready waiting assigned r r:j

work stealing方法の変更 (4/5) victimからthiefにclosureを送信 thiefはvictim workerの名前を記録 thiefはresult closureを生成 盗んできたclosure中のcontinuationを,      result closureを参照するように変更する s victim name victim s thief r subcomputation s:i subcomputation r:j assigned waiting ready ready waiting assigned r r:j result closure

work stealing方法の変更 (5/5) 3つのpoolがともに空になると終了 subcomputation r:jが終了 ack subcomp.の名前を含んだメッセージをvictimに 送信 victim workerのassigned poolから取り除かれる assigned pool中で同じsubcomp.のものを見つける ackをthiefに送信 thiefはackを受信するとsubcomp.を開放 victim s thief r s subcomputation s:i subcomputation r:j assigned waiting ready ready waiting assigned r r:j

work stealing方法の変更 (5/5) 3つのpoolがともに空になると終了 subcomputation r:jが終了 ack subcomp.の名前を含んだメッセージをvictimに 送信 victim workerのassigned poolから取り除かれる assigned pool中で同じsubcomp.のものを見つける ackをthiefに送信 thiefはackを受信するとsubcomp.を開放 victim s thief r subcomputation s:i ready waiting assigned

脱退時の処理 subcomputationの委譲 subcomputationのserialize continuationの更新 委譲先のプロセスは, victim workerにメッセージを送信 victim closure中のthief subcomputationを変更 assigned pool中の全てのthief workerにメッセージを送信 victim worker nameを変更

脱退時の処理 worker t subcomputation t:k ready waiting assigned s s:i worker s worker u t subcomputation s:i ready waiting assigned r r:j worker r s subcomputation r:j assigned waiting ready

脱退時の処理 worker t subcomputation t:k ready waiting assigned s s:i worker s worker u worker u t subcomputation s:i ready waiting assigned r r:j worker r s subcomputation r:j assigned waiting ready

脱退時の処理 worker t u s:i 更新 subcomputation t:k ready waiting assigned worker s worker u 更新 t subcomputation s:i ready waiting assigned 更新 r r:j worker r s u 更新 subcomputation r:j assigned waiting ready

耐故障性 PCがクラッシュしてもプログラムが動作し続けることを保障する ⇒subcomputationの再実行  +非同期チェックポイント

subcomputationの再実行 (1/2) subcomputationは終了するまで他のsubcomputationに影響しないようにする subcomputationの終了時のみreturn valueを送信する ※well-structuredな計算なら通常 transaction処理を行う return valueを受け取ったときにcommit

subcomputationの再実行 (2/2) 故障が発見されると, 消失したsubcomputationを指すcontinuationをもつsubcomputationをabort abortしたsubcomputationを指すcontinuationをもつsubcomputationもabort 消失したsubcomputationから指されるcontinuationをもつsubcomputationは,消失したsubcomputationを再実行 ※ PCの故障は中央サーバが検出

worker t 再実行 subcomputation t:k ready waiting assigned s s:i worker s t subcomputation s:i ready waiting assigned r r:j worker r s subcomputation r:j assigned waiting ready abort

非同期チェックポイント 再実行のオーバヘッドを回避 subcomputationごとに定期的に状態を保存 c.f.)DAGのルートに近いsubcomputationの再実行 subcomputationごとに定期的に状態を保存

関連研究 ここ数年でCilk-NOWを参照している論文 SilkRoad[2000] Satin[2001] Concert[2002] Cilk-NOW + SoftwareDSM Satin[2001] 広域環境上で効率の良いScheduling方式 Concert[2002] 安全な実行環境を提供することを目指す

まとめ 遊休のPC上でCilkプログラムを実行するランタイムシステム 分散版Cilk PCの参加・脱退にあわせた並列度の調整 耐故障性

疑問点など thief・victim間の参照は常に正しい? 各プログラムへの公平な資源の割り当て 盗み・脱退・故障が同時に起こる場合などは? 現実的には十分? 各プログラムへの公平な資源の割り当て 現在アルゴリズムを考案中とのこと