慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp 共有メモリ型計算機  慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp.

Slides:



Advertisements
Similar presentations
連続系アルゴリズム演習 第2回 OpenMPによる課題.
Advertisements

情報理工学系研究科 コンピュータ科学専攻 上嶋裕樹
キャッシュ付PRAM上の 並列クィックソートと 並列マージソート
メモリコンシステンシモデル memory consistency model
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
記憶の階層とキャッシュ 天野英晴.
Chapter11-4(前半) 加藤健.
メモリコンシステンシモデル memory consistency model
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機システムⅡ キャッシュと仮想記憶 和田俊和.
オペレーティングシステム 第10回 仮想記憶管理(1)
基本情報技術概論(第12回) 埼玉大学 理工学研究科 堀山 貴史
入 出 力 管 理 オペレーティングシステム 6/26/09.
10. メモリ 五島 正裕.
計算機システムⅡ 主記憶装置とALU,レジスタの制御
情報塾( ) CPUとメモリがどんなふうに動くのだろう。 レジスタやI/O プログラムの実行、マシン語。
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
キャッシュ 頻繁にアクセスされるデータを入れておく小規模高速なメモリ 当たる(ヒット)、はずれる(ミスヒット) マッピング(割り付け)
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
小型デバイスからのデータアクセス 情報処理系論 第5回.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
並列分散プログラミング.
プログラムはなぜ動くのか.
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
計算機システムⅡ 入出力と周辺装置 和田俊和.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
専門演習Ⅰ 国際経済学部 国際産業情報学科 2年 石川 愛
第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ 不可分命令の実装 プロセス間通信 PV命令
15.同時実行制御,トランザクション, データベースの回復
第8回入出力制御 デバイスコントローラ ポーリングと割込み 入出力の方式 PIO DMA 入出力のためのソフトウェア技法.
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
SpectreとMeltdown ITソリューション塾・第28期 2018年5月30日 株式会社アプライド・マーケティング 大越 章司
Lazy Release Consistency
All IP Computer Architecture
第6回 メモリの種類と特徴 主記憶装置、ROM、RAM
作りながら学ぶコンピュータアーキテクチャ(改訂版)授業資料 テキスト ページ対応 天野英晴
勉強会その5    2016/6/15 マルチコア/マルチプロセッサ キャッシュコヒーレンス 10 8分35秒.
第9章 Error and Control Messages (ICMP)
耐故障処理 Fault Tolerance 「分散計算の基礎」 12章 発表者 : 高橋 慧.
梅澤威志 隣の芝は茶色いか 梅澤威志
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
リモートホストの異常を検知するための GPUとの直接通信機構
オペレーティングシステム イントロダクション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
通信機構合わせた最適化をおこなう並列化ンパイラ
コンピュータ概論B ー ソフトウェアを中心に ー #02 システムソフトウェアと アプリケーションソフトウェア
SiTCP-VME変換モジュールの開発 KEK 物構研:中性子 佐藤節夫.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁
コンピュータの仕組み 〜ハードウェア〜 1E15M009-3 伊藤佳樹 1E15M035-2 柴田将馬 1E15M061-1 花岡沙紀
仮想環境を用いた 侵入検知システムの安全な構成法
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
明星大学 情報学科 2012年度前期     情報技術Ⅰ   第1回
コンピュータアーキテクチャ 第 9 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 5 回.
SMP/マルチコアに対応した 型付きアセンブリ言語
高度プログラミング演習 (11).
BSPモデルを用いた 最小スパニング木 情報論理工学研究室 02-1-47-134 小林洋亮.
明星大学 情報学科 2014年度前期     情報技術Ⅰ   第1回
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp 共有メモリ型計算機  慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp

共有メモリ型計算機 共有するメモリに対する読み書きでデータ交換を行う 並列OSが動作する→従来のコンピュータと同じに見える 理解のポイント プログラムを高速化するには並列化が必要 プログラマによる明示的並列化(OpenMPなど) 並列化コンパイラ 理解のポイント メモリの構造をどうするか? 同期をどうするか? キャッシュの一貫性をどうするか?

1.メモリの構造をどうするか? 集中メモリ型と分散メモリ型 プロセッサ Node 0 メモリ Node 3 Node 1 Node 2 Interconnecton Network メモリが一か所に集中 UMA(Uniform memory access model) いわゆるマルチコア メモリが分散 NUMA(Non-Uniform memory access model)

典型的な集中メモリ型

Copyright © 2012, Elsevier Inc. All rights reserved. The University of Adelaide, School of Computer Science 平成31年4月10日 典型的な分散メモリ型 IBM Power 7 AMD Opteron 8430 Distributed Shared Memory and Directory-Based Coherence Copyright © 2012, Elsevier Inc. All rights reserved. Chapter 2 — Instructions: Language of the Computer 5

共有メモリをどう繋ぐか? 集中メモリ型 分散メモリ型 共有バス: クロスバスイッチ 直接網:メッシュ、ハイパーキューブ 一度に一つのプロセッサのみ転送可能 ボトルネックになるので小規模なシステムに限られる スヌープキャッシュに利用できる→後程解説 クロスバスイッチ コストが大きい 分散メモリ型 直接網:メッシュ、ハイパーキューブ 間接網:Fat Tree、Dragonfly この辺の話は次々回に解説

共有バスの構造 色々な形の共有バスがあり得る バスの基本は共通の 信号線、しかしこれは もうあまり使われない。 バスの本質は、唯一のモジュールがデータを送信できること Multiplexer 色々な形の共有バスがあり得る

クロスバスイッチ バスの交点に スイッチを置く n クロスポイント数 nxm m バスの拡張として考える ことができる 同時に複数のプロセッサ メモリ間が交信できる m

2.同期の必要性 あるプロセッサが共有メモリに書いても、別のプロセッサにはそのことが分からない。 同時に同じ共有変数に書き込みすると、結果がどうなるか分からない。 そもそも共有メモリって結構危険な代物 多くのプロセッサが並列に動くには何かの制御機構が要る 不可分命令、同期用メモリ、バリア同期機構

排他制御 プリンタがあり、一度に一つのプロセッサしか使えない。同時に要求があった場合に一人を選びたい。 アイディア: 変数xを0に初期化しておく。 xを読んだプロセッサは、0ならば素早く1を書き込み、プリンタを利用。終わったら0を書き込む。 1を読み込んだプロセッサは0を読み込めるまで繰り返し読み続ける(Busy Waiting) →しかしこれはうまく行かない。なぜか?

P1とP2が同時に変数を読んだら? 1.xを読み出す 3.1を書きこむ 1.xを読み出す 2.0かどうかをチェック 3.1を書きこむ 1.xを読み出す 3.1を書きこむ 1.xを読み出す 2.0かどうかをチェック 3.1を書きこむ 2.0かどうかをチェック P1 P2 P1がxを読んで0かどうかをチェックしている間に、P2がxを読み出すかも しれない→P1,P2共に0を取ることができる。 読む操作と書く操作を不可分(Atomic/Indivisible)に行う命令が必要 →不可分命令

Test & Set (x) xを読み出す。 1を書きこむ 2つの操作を不可分に行う この間共有メモリを占有 Test&Set(x) Test&Set(x) Test&Set(x) P1 P2 同時に命令が実行されても、必ず一つだけ0を読み、他は1にする。 →ハードウェアの支援が必要 他にもSwap, Compare&Swap, Fetch&Dec, Fetch&Addなど色々 あるが、原理は同じ

Critical Sectionの実行 Test&Set(x)=0? No. Yes. Critical Section この例ではプリンタを使う 一つだけが実行できる領域 x = 0 忘れずにx=0にしておく. 不可分命令があればCritical Sectionが作れる→なんでもできる! でもちょっと使いにくい

バリア同期 バリア成立を待つ P1 P2 P3 Barrier; . Barrier; バリア成立 Barrier; バリア同期は不可分命令があれば作れるが、専用の ハードウェアを使う場合もある

3.キャッシュの一貫性問題 キャッシュを分散すれば、当然それぞれのキャッシュで データの不一致が生じる A A A’ Main Memory Interconnection P P P A A A’ P キャッシュを分散すれば、当然それぞれのキャッシュで データの不一致が生じる

キャッシュ一貫性問題の解決 キャッシュを分散する限り不一致は起きる いつでも一致させる 同期の時だけ一致を取る:緩いモデルも使われる。 コストは高いが共有メモリとして完全なモデルが実現できる→ Sequential Consistency 共有バスなどの「皆が見れる通信路」があればSnoop Cache 分散メモリ型ではDirectory方式が使われる 同期の時だけ一致を取る:緩いモデルも使われる。

復習:Write Back (Hit) 0011010 … … From CPU Main Memory (1KB=128Lines) 100 Dirty 0011 1 Hit 一方、ライトバックキャッシュでは、キャッシュにだけデータを書き込み、主記憶には書き込みません。このため、キャッシュの内容と主記憶の内容が違ってしまいます。この状態をダーティ(汚れちゃった)と呼び、主記憶と一致している状態をクリーンと呼びます。キャッシュディレクトリにこの状態を示すダーティビットを付けておき、最初に書いたときにこのビットをセットします。 Cache (64B=8Lines) Write Data Cache Directory (Tag Memory) 8 entries X (4bit+1bit )

復習:Write Back (Replace) 0000010 0011010 … … From CPU Write Back Main Memory (1KB=128Lines) 0000 010 100 Dirty 0000 0011 1 Miss ライトバックキャッシュはキャッシュにヒットしつづける限り、そこに書いて読めばよいので問題ないです。問題はこのキャッシュブロックがキャッシュから追い出されるときに生じます。今、キャッシュがミスしてブロックのリプレイスが起きる際に、今までのように単純に主記憶からブロックを持ってきて上書きすると、書いたデータが消えてしまいます。そこで、まず、ダーティなブロックを主記憶に書き戻し(ライトバックし)、それから新しいキャッシュブロックを取って来ます。ディレクトリを更新するとともにダーティビットを0にします。この書き戻しはダーティビットがセットされているブロックだけに必要です。クリーンなキャッシュに対しては今まで同様、単にキャッシュブロックを取ってくれば良いです。ダーティビットの存在によりこの部分で効率化を行っています。 Cache (64B=8Lines) Cache Directory (Tag Memory) 8 entries X (4bit+1bit )

基本プロトコル キャッシュの各ブロックの状態 C:Clean (主記憶と一致) D: Dirty I:Invalidate:無効 C C バス上では、一度に 一つのデータ転送が 行われる Main Memory 共有バス P2 P3 P4 C C Read Read P1 同じキャッシュブロックを読み出すと、両方共Cleanになる。

P3が書き込み無効化 無効化信号 I D C C Main Memory 共有バス P2 P3 P4 Write P1 全てのキャッシュがバスを 見ており(スヌープ)、アドレスが 一致すると無効化 書き込みを行う Clean→Dirtyに変化 共有バス上に書いたアドレスを送り コピーを無効化

P1が読み出しをした場合 C I D C Main Memory 共有バス P2 P3 P4 Read P1 共有バス上のアドレスを見て、アドレスが 一致してDのブロックへの読み出し要求を 検出→共有メモリに書き戻してからデータを 要求元に転送→Cleanになる P1が読み出すとミスが起き、 主記憶に共有バスを通して取りに行く Cleanになる

P1が書き込みをした場合 D I W I D Main Memory 共有バス P2 Snoop Cache P3 P4 Snoop 共有バス上のアドレスを見て、アドレスが 一致してDのブロックへの書き込み要求を 検出→共有メモリに書き戻してからデータを 要求元に転送→I(無効)になる P1が読み出すとミスが起き、 主記憶に共有バスを通して取りに行く 書き込みを行ってDirtyになる

スヌープキャッシュの構造 共有バス Directoryは、 両側からアクセス 可能 Directory CPUとは関係なく バスのTransaction をチェックすること ができる Directory Cache Memory 実体 一致を取る Dual Port Directory CPU

ディレクトリ方式のキャッシュ ホームメモリが共有情報をディレクトリで管理 ノード間のメッセージ交換でキャッシュの一致を制御 プロトコル自体はスヌープ方式と似ている バスがないので常にディレクトリをメッセージでアクセスする

キャッシュの制御(Node 3読み出し) I:Invalidated S:Shared D:Dirty U:Uncached req Node 3 I:Invalidated S:Shared D:Dirty U U:Uncached S:Shared D:Dirty Node 2 Node 1

キャッシュの制御(Node 3読み出し) Node 0 Cache line Node 3 S S 1 Node 2 Node 1

キャッシュの制御(Node 1読み出し) S S req Node 0 Node 3 Cache line 1 S 1 Node 2

キャッシュの制御(Node 3書込み) S S Ack Write request D D 1 1 Write → I S Node 0 1 1 Write Ack → I Invalidation Node 2 Node 1 S

キャッシュの制御(Node 2読み出し) Write Back → S Write Back Req D D S 1 1 Cache line req Reads Node 2 Node 1 S

キャッシュの制御(Node 2書込み) Write Back → I Write Back Req D D 1 1 Cache line req Writes Node 2 Node 1 D

スヌープキャッシュとディレクトリキャッシュ スヌープキャッシュは共有バスのように皆が見る(スヌープ)ことのできる通信路が必要 転送、キャッシュブロックの状態制御は分散的に行われる 集中メモリシステムに向いている ディレクトリキャッシュは、ホームメモリのディレクトリが共有バスの代わりに管理センターの役割を果たす メッセージを交換してブロックの状態制御を行う 汎用性が高いが、メッセージ交換のコストは大きい

まとめ スマフォ、ノートPCの全て、サーバー、スーパーコンピュータの多くが共有メモリ型計算機 ポイント 高速化のためには並列化が必要 プログラマによる並列化→来週OpenMPの演習を行う コンパイラによる自動並列化 共有メモリを使ったデータ交換には同期が必要 不可分命令 バリア同期 分散したキャッシュの一貫性制御 スヌープキャッシュ ディレクトリキャッシュ

演習 P1,P2,P3が同じキャッシュブロックについて以下の操作を行った際の各キャッシュの状態を求めよ。無効化信号がバス上に流れるのはどのタイミングか?初期状態は全てIとする。 P1が読み出し P2が読み出し P1が書き込み P3が読み出し P2が書き込み