並列分散プログラミング.

Slides:



Advertisements
Similar presentations
P2P 技術を応用した 分散システムの排他制御機構の試作 九州工業大学 情報科学センター 山之上 卓.
Advertisements

7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
耐故障アルゴリズム.
メモリコンシステンシモデル memory consistency model
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
4章 制御の流れ-3.
プログラミング基礎I(再) 山元進.
Ex7. Search for Vacuum Problem
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
基礎プログラミングおよび演習 第9回
テープ(メモリ)と状態で何をするか決める
オペレーティングシステムJ/K 2004年10月7日
詳解TCP/IP TCPタイムアウトと再転送 れにうむ.
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
小型デバイスからのデータアクセス 情報処理系論 第5回.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
Observable modified Condition/Decision coverage
条件式 (Conditional Expressions)
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
プロトコル検証器SPINの紹介 並列分散プログラミング講義 田浦.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ 不可分命令の実装 プロセス間通信 PV命令
ソフトウェア動的更新の理論について 産総研 橋本政朋.
並行プログラムと同期.
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
大規模アドホックネットワークにおける 階層的な名前解決法
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
Lazy Release Consistency
第11章 UDPユーザ・データグラム・プロトコル
プログラミング言語入門 手続き型言語としてのJava
第9章 Error and Control Messages (ICMP)
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
耐故障処理 Fault Tolerance 「分散計算の基礎」 12章 発表者 : 高橋 慧.
近況: Phoenixモデル上の データ並列プログラム
プログラミング 4 記憶の割り付け.
アルゴリズムとプログラミング (Algorithms and Programming)
Advanced Computer Architecture
Structured programming
情報とコンピュータ 静岡大学工学部 安藤和敏
予測に用いる数学 2004/05/07 ide.
実践プログラミング入門2 配列を使ってゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
並行プログラミング concurrent programming
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
SiTCP-VME変換モジュールの開発 KEK 物構研:中性子 佐藤節夫.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング 4 整列アルゴリズム.
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
Ex7. Search for Vacuum Problem
リカバリ 東大生研 情報融合研究センタ 喜連川優.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
「マイグレーションを支援する分散集合オブジェクト」
マイグレーションを支援する分散集合オブジェクト
プログラミングⅡ 第2回.
KL1 による並列プログラミング 早稲田大学理工学部情報学科 上田研究室 4 年 高木祐介
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
「マイグレーションを支援する分散集合オブジェクト」
卒業研究 JCSPを用いたプログラム開発  池部理奈.
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
情報処理Ⅱ 2006年11月24日(金).
SMP/マルチコアに対応した 型付きアセンブリ言語
プログラミング基礎演習 第4回.
コンパイラ 2012年10月11日
PROGRAMMING IN HASKELL
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
Presentation transcript:

並列分散プログラミング

続き 共有メモリ 1アドレスに対する不可分なread-modify-write 複数アドレスに跨る不可分な更新/読み出し 排他制御 versioning + indirection Lamportのconcurrent reading and writing

Lamportのconcurrent reading and writing 問題設定 共有変数 a1, …, an (最初は 0) writer一人: a1++; …; an++; reader複数: a1 = … = an = 0またはa1 = … = an = 1のどちらかだけを読みたい 排他制御をしない(readerにwriterがblockされない)

手法 v1, v2 : 新たな共有変数(最初は0) writer () { v1++; update(a1, …, an); v2++; } reader () { while (1) { t2 = v2; read(a1, …, an); t1 = v1; if (t1 == t2) break; }}

なぜ正しいか? W1; W2; R2; R1; W1; R2; W2; R1; W1; R2; R1; W2; R2; W1; W2; R1; R2; W1; R1; W2; R2; R1; W1; W2;

メッセージパッシング 基本的モデル 名前(例えば0, 1, …, P–1)のついた固定台数のプロセス+ローカルメモリ メッセージ: (大きくても良い)バイト列 send(p, M); M = recv(); M = poll();

通信 send/recv

順序制約 (1) 2ノード間の順序制約 p: result := 100; send(q, “done”): q : if (recv() == “done”) { result@p == 100のはずダナ… } result := 100 p: ここではresult == 100 q:

順序制約 (2) q : if (recv() == “done”) { result@r == 100 ??? } p: send(r, “do result := 100;”); send(q, “done”): q : if (recv() == “done”) { result@r == 100 ??? } r: if (recv() == “do result := 100”) { result := 100; } result := 100; r: p: result@r == 100??? q:

不可分・原子性(1) 1ノードのメモリに対するread-modify-writeはno problem

不可分・原子性(2) 複数ノードにまたがる不可分・原子性の保証はややこしい 例題: 値交換プロトコル

値交換プロトコル 問題 二つのノードの値を「不可分に」更新できればこんなに単純な話はない 各ノードが一つずつ値を持っている 時々各ノードは他の人と値を交換したくなる 値が永遠に消滅したり重複したりしてはならない 二つのノードの値を「不可分に」更新できればこんなに単純な話はない t = vp; vp = vq; vq = t;

簡単? if (feel-like-so) send(any, ask(v, id)); while (1) { received(ok(x))  v = x; received(ask(u, q))  { send(q, v); v = u; } } p q ask(Vp) ok(Vq)

ダメな例 r (10) p (20) q (30) ask(20) ask(10) ok(30) ok(20) 20 30 20

次の試み Q = {}; if (feel-like-so) { send(any, ask(v, id)); asking = true; } while (1) { received(ok(x))  { v = x; asking = false; } received(ask(u, q))  Q.enq(ask(u, q)); !Q.empty() && !asking  { ask(u, q) = Q.deq(); send(ok(q, v)); v = u; } }

またダメ p (20) q (30) ask(20) ask(30)

まとめ 並列プログラムの難しさの根源 すでに観測した具体例 「次におこること」を神様が決める 神様の選択肢はあまりにも多い どの選択をされても動くようにプログラムを書かなくてはならない すでに観測した具体例 順序の保証(X must happen before Y) 複数の場所に跨る不可分(原子的)操作

並列プログラムのモデル化: 基本アイデア プログラム: 状態の集合と各ノードが起こしうる状態遷移を規定している 系全体: プログラムを複数,通信手段(メッセージ配送手段,共有メモリ)で組み合わせたもの 可能な状態遷移の中から(神様が)次の状態を決める

メッセージパッシング メッセージ = M (可能な全てのメッセージ) ノードプログラム = < Z, I, |-I, |-s, |-r > メッセージ配送システム = Mのマルチ集合(送られて,まだ到着していないメッセージ) 系全体: 多数のノードプログラム+配送システム

メッセージパッシングプログラムの表記法 ガード  コマンド | ガード  コマンド | … コマンド ::= … | send(p, M); | … ガード ::= … | received(パターン); | …

共有メモリ