Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CPUの同時実行機能

2,325 views

Published on

Presentation of basics of Superscalar, Hardware threading(hyper threading), Multicore technology.

Published in: Technology
  • Be the first to comment

CPUの同時実行機能

  1. 1. ハードウェアによる並列処理 CPUアーキテクチャ入門(その3) Dora.Panda Nov 27th, 2015
  2. 2. 今日のお題 • ハードウェアによる並列処理 (同時実行)のお話です。 • 以下の3つについて説明します。 • スーパースカラー • マルチプロセッサー • ハードウェアスレッディン グ
  3. 3. 本題に入る前に 事前知識の確認
  4. 4. レジスタ・キャッシュ・RAM • レジスタ • CPU内部のメモリ領域 • 数個∼数十個程度 • 動作速度はCPUと同速度 • CPUはレジスタ内のデータのみ制御/計算可能 • キャッシュ • CPUと直結したメモリ領域 • 数k∼数MBytes • 動作速度はCPUと同速度∼数十分の一 • RAM • CPU外部のメモリ領域 • ∼xxGBytes • 動作速度はCPUの百分の一程度 CPU DRAM HDD 演算回路 レジスタ レジスタ キャッシュ
  5. 5. パイプライン • CPUの命令実行部分を機能的に分 割したもの • IF:命令フェッチ • RF:命令デコード • EX:命令実行 • MEM:保存先計算 • WR:保存(メモリ/レジスタ) IF RF EX ME WR IF RF EX M W IF RF EX M W IF RF EX M W IF RF EX M W IF RF EX M W 命令1 命令2 命令3 命令4 命令5 この順で命令を実行 5クロックで1命令を実行 同時に5命令を実行可能 毎1クロック毎に1命令実行完了 時間
  6. 6. 前回までのおさらい • パイプラインの現実 • パイプラインとキャッシュにより、理論上は最速で1 クロックあたり1命令実行。=1.0[IPC] • IPC = Instruction Per Clock • どんなに工夫してもIPCは1.0の壁を超えることは不可 能。
  7. 7. IPCを1.0以上にする解決策は? • 実行回路を複数用意すべし • スーパスカラー • マルチコア • ハードウェアスレッディン グ
  8. 8. スーパースカラー 実行ユニット並列化
  9. 9. スーパスカラーの概念 • CPUコア内部にパイプライン を複数用意 • 命令を同時実行することで 高速化 • ソフトウェアからは並列実 行数不明 IF RF EX ME WR パイプライン1段 パイプライン2段 IF RF EX ME WR IF RF EX ME WR RAM(Cache) Register RAM(Cache) Register
  10. 10. スーパースカラーの実際1 Inst Decoder RF EX ME WR Inst Cache Inst Decoder Inst Queue Inst Inst Inst Inst RF EX ME WR Data CacheRegister Register • スーパスカラーの実際のパイプライン • 複数命令を同時に読み出してデコード • 複数命令をキューに入れる • 依存性が無い命令を同時実行 全部が複数あるわけではない
  11. 11. スーパースカラーの実際2 • EXは対称ではない • SandyBridgeは演算が3way、メモリ制御が3way • 同時実行する可能性が高い回路のみ複数実装 引用元:http://pc.watch.impress.co.jp/docs/column/kaigai/20130602_601851.html
  12. 12. 並列度向上策 • インオーダとアウトオブオーダ実行 • インオーダ(順序通り) • 互いに関連していない命令だけをプログラムの順序通りに実行 • アウトオブオーダ(順序外) • 互いに関連していない命令をプログラムの順序が変わっても良い から実行 • インオーダで実行を開始して、アウトオブオーダで終わることも ある(命令によって実行クロック数が違う) 実装はCPUによって異なります
  13. 13. 複数実行ユニットの問題 • データハザードが発生する例 1: ADD R3 <- R1, R2 2: SUB R5 <- R3, R4 RF EX ME WR RF EX ME WR R1 R2 R3 R4 R5 時間 ADD R3 <- R1, R2 SUB R5 <- R3, R4 1行目を実行
  14. 14. 複数実行ユニットの問題 • データハザードが発生する例 ADD R3 <- R1, R2 SUB R5 <- R3, R4 RF EX ME WR RF EX ME WR R1 R2 R3 R4 R5 時間 ADD R3 <- R1, R2 SUB R5 <- R3, R4 2行目を実行
  15. 15. 複数実行ユニットの問題 • データハザードが発生する例 1: ADD R3 <- R1, R2 2: SUB R5 <- R3, R4 RF EX ME WR RF EX ME WR R1 R2 R3 R4 R5 時間 ADD R3 <- R1, R2 SUB R5 <- R3, R4 同時に実行 先行命令の結果待ち Read After Writeハザード
  16. 16. データハザードの種類 • RAR(Read after Read) • ハザードではない。 • RAW(Read after Write) • 先行命令のWriteを待たないと 後続命令がReadできない。 • WAR(Write after Read) • WAW(Write after Write) • 先行命令の実行時間が長いと ハザード。 先行/後続 READ WRITE READ - WAR WRITE RAW WAW IF RF EX ME WR IF RF EX ME WR Reg IF RF EX IF RF EX ME WR Reg EX ME WR IF RF EX ME WR IF RF EX ME WR Reg EX EX EX RAW WAR WAW
  17. 17. 真の依存と偽の依存 • 真の依存 • 回避不可能なハザード。 • 結果が必要なRAW。 • 偽の依存 • 使用するレジスタを変更す ると解決可能なハザード。 • WARやWAWはレジスタを実 行時に置き換えて解決。
  18. 18. レジスタリネーミング • 偽の依存関係を解決する • レジスタが共通であるために発生 するハザード。 • 論理レジスタを物理レジスタに置き 換えて実行。 • 論理レジスタ • プログラムが使用するレジス タ • 物理レジスタ • CPU内部の実行用レジスタ R1 P1 P2 R3 <- R3 / R5 R4 <- R3 / 6 R3 <- R5 + 1 … P1 <- R3 / R5 P2 <- P1 / 6 P3 <- R5 + 1 … WAW WAR
  19. 19. 論理レジスタと物理レジスタ 引用元:http://www.itmedia.co.jp/enterprise/articles/0506/29/news002.html     http://pc.watch.impress.co.jp/docs/column/kaigai/20130602_601851.html 論理レジスタ = 16個 物理レジスタ =160個
  20. 20. マルチコア 複数CPUによる同時実行
  21. 21. マルチコアにする目的 • CPUを複数用意する目的 • 処理の高速化 • スレッドやプロセスを同 時実行 • 消費電力を抑える • 消費電力を押さえつつ高速 化 汎用PCで一般的な対象マルチプロセッサ(SMP)について説明します
  22. 22. ソフトウェアから見た問題 • 同期 • 同一のリソース(メモリ領域)に対するアトミックな アクセス • キャッシュコヒーレンシ • それぞれのコアがキャッシュを持つため、一貫性を保 つ仕組みが必要
  23. 23. 同期の問題 • セマフォ等、フラグ状態によ る排他制御が必須 • シングルプロセッサでは割り 込み禁止で実現できる。 • マルチコアはHW支援必須。 • 共有フラグにアクセスすると きにHWがLock制御 flag = 0:アクセス可能 flag = 1:アクセス不可 CPU1 CPU2 Memory Shared Data Flag
  24. 24. 同期問題の解決 • Lock信号を用意 • アトミック命令実行時に Lock信号をアサート(有効 化)する。 • L1キャッシュにアクセスす るときはアサートしない。 (コヒーレンシ制御で解決) CPU1 CPU2 Memory Shared Data Flag Lock
  25. 25. キャッシュコヒーレンシの問題 • 同じ領域を複数のコアがキャッ シュしている • 一方のコアがデータをライ トすると不整合が発生する。 • リードは問題無い。 • キャッシュコヒーレンシプロ トコルにより不整合状態を解 決する CPU1 Memory Shared Data L1 cache Shared Data L1 cache Shared Data CPU2
  26. 26. コヒーレンシプロトコル • MESI/MOESIプロトコル • M:Modified • 自分だけがキャッシュ+DRAM と不一致 • O:Owned • 他CPUと同内容をキャッシュ+ DRAMと不一致 • E:Exclusive • 自分のみがキャッシュ • S:Shared • 他CPUと同内容をキャッシュ+ DRAMと一致 • I:Invalid • 無効(キャッシュしていない) MO E S I
  27. 27. MOESIの例1 • キャッシュが空の状態からデー タをリード • Invalid -> Exclusive MO E S I CPU1 CPU2 I -> E I Data Data
  28. 28. MOESIの例2 • CPU1がSharedのデータを書 き換え • CPU1 : Modified • CPU2 : Invalid CPU1 CPU2 S -> M S -> I Data MO E S I
  29. 29. MOESIの例3 • CPU2がModifiedのデータを リード • CPU1 : Modified -> Owned • CPU2 : Invalid -> Owned MO E S I CPU1 CPU2 M -> O I -> O Data
  30. 30. 消費電力 • 単純にコア数を増やすと消費 電力も増える。 • コア数を増やしつつ消費電力 を維持したい。
  31. 31. CPUの消費電力 • トランジスタ間の負荷容量(コ ンデンサ)の充放電 • 配線やトランジスタ入力に 存在する負荷成分 • 漏れ電流 • 様々な要因により意図しな い電流が流れる。 充放電に着目して考えます +V GND 回路 回路 +V GND 回路 回路
  32. 32. スイッチングによる消費 • トランジスタがOn/Offを繰り 返すとき、コンデンサの放電/ 充電が行われる。 • On/Off=CPUのクロックに 合わせて行われる。 • クロックが速ければ単位時間 あたりの充放電が多い。 • =消費電力が大きい。 消費電力はクロック周波数に比例 +V GND 回路 回路 +V 充電 +V 放電
  33. 33. 消費電力と電圧の関係 • クロックを遅くすることで負荷容量による消費電力を低 減できる。 クロックを遅くすると電源電圧を下げられる。 電圧を下げるとコンデンサに蓄えられる電荷が減る。 負荷容量で消費される電力は電圧の2乗に比例する。
  34. 34. クロックの速さと電圧 • 電圧を高くすると立ち上がりが 速くなる。 • 電圧を低くすると立ち上がりが 遅くなる。 • クロックを遅くするなら電圧を 低くしても良い。 0.00[V] 0.75[V] 1.50[V] 2.25[V] 3.00[V] 閾値電圧 同一電圧でクロックを速く クロック信号として 成り立たなくなる 同一クロックで電圧を高く 奇麗なクロック信号になる
  35. 35. 消費電力概算 • 消費電力と周波数、電圧の関係 • 周波数に比例し電圧の二乗に比例 • 周波数を2割下げ、電圧も2割下げる。 • 0.8 x 0.8 x 0.8 = 0.512 • 約半分の消費電力になる。 • クロックを2割下げてコアを2つにすると、ほぼ同じ消費電力で 性能が1.6倍になる。 以下のサイトの情報を私なりに解釈した結果です。 http://news.mynavi.jp/column/architecture/001/
  36. 36. 実際の例 • Core i7 Extremeの例 • コア数比:6 ÷ 4 = 1.5 • 周波数比:3.2 ÷ 3.6 = 0.889 • 電圧比 :0.889(仮) • 3820を130[W]とした場合の3930KのTDPを計算 • 130 × 1.5 × 0.889 × 0.889 × 0.889 = 137[W] http://ja.wikipedia.org/wiki/Intel_Core_i7#Core_i7_Extreme CORE CLOCK [GHZ] TDP[W] 3930K 6 3.2 130 3820 4 3.6 130 なんとなくそれっぽい値。 実際には様々な要因があり、単純計算はできないようです。
  37. 37. マルチコアのスケジューリング • Linuxの場合 • CPU毎に実行キューを用意 する • スレッドがCPUに割り当 てられたあとは基本的に はそのCPUで実行し続け る。 • CPUを切り替えると キャッシュ等リソースの入 れ替えが発生。 Run Queue Task Low <- Priority -> High TaskTaskTask CPU 0 Run Queue Task Low <- Priority -> High Task CPU 1 CPU n Run Queue Task Low <- Priority -> High TaskTask …
  38. 38. ハードウェア スレッディング スーパスカラーの効率化
  39. 39. スーパスカラーとマルチコア の問題 • 複数のパイプラインが有効活用されない • 命令の依存性が高く同時実行が難しい • 回路規模が大きくなる • ハードウェアのコスト上昇 • 消費電力上昇
  40. 40. ハードウェアスレッディング(HT) • ソフトウェアから見たハード ウェアリソースを複数用意 • ソフトウェアは複数のCPU と認識して処理を行う • ハードウェアが複数スレッド の命令を交互に実行 • OSが行うプロセスス1ケー ジューリングをハードウェ アが実行するイメージ CPU Reg IRQ PIPE LINE CPU Reg IRQ PIPE LINE Reg IRQ
  41. 41. HTのイメージ • OSは複数CPUとみなしてス レッドをスケジュール • 所定のタイミングで実行する スレッドを切り替える • レイテンシの長いイベント • キャッスミスなど • 一定間隔で交互に
  42. 42. HTの効果があるパターン • 各スレッドでリソースの競合が発生しない • 実行ユニット(以下の図ではALUは効果あり) • メモリ
  43. 43. まとめ それぞれの特徴を整理
  44. 44. まとめ • 同時実行するための仕組みには複数の実現手段 • 実行ユニット、物理コア、レジスタを複数用意 • 実現手段により特徴が異なる • それぞれに特徴があり、組み合わせて性能向上を図る
  45. 45. 実験 並列実行の実験
  46. 46. False Sharing • 2つのスレッドが異なるメモ リを使用しているにも関わらず、 キャッシュの構造上、メモリ の共有状態にあることを言う • どちらかのスレッド(CPU)がメ モリを書き換えると、もう一 方のスレッドのキャッシュが 無効化される • キャッシュコヒーレンシ Core1 Core2 Cache Line Cache Line DRAM 異なるアドレスだが、 キャッシュは同一領域管理
  47. 47. False SharingとHT • 実行する物理コアが異なる • False Sharingが発生 • 実行する物理コアが同一 • False Sharingは発生しない Core1 Core2 Cache Line Cache Line Core1 Core2 Cache Line
  48. 48. False Sharing実験 • 実験 • 2つのスレッドが異なるアドレスにデータを書き続ける • 隣り合ったアドレス、64バイトずらしたアドレスへの書き込みの違い • 異なる物理コア、同一物理コア内の異なる論理コア アドレスオフセット/コア 同一物理コア 異なる物理コア 1バイト 2.5[s] 3.7[s] 64バイト 2.5[s] 1.6[s]
  49. 49. Producer Consumer Threading Model • Producer : データ生成 • Consumer : データ使用 • 例: • P : ファイル読み出し • C : 動画デコード P C P C P C P C P P C C P P C C Model 1 Model 2 time Thread 1 Thread 2 Thread 1 Thread 2
  50. 50. Producer Consumer実験 • Model1とModel2の比較 • Model1はキャッシュが同一 • Model2はキャッシュが異なるため、コヒーレンシ制御が多発 MODEL/コア 同一論理 同物理 異論理 異物理 MODEL1 3.6[s] 2.4[s] 1.9[s] 99.9[%] 99.9[%] 99.9[%] MODEL2 3.3[s] 2.4[s] 2.1[s] 99.9[%] 99.9[%] 98.9[%]
  51. 51. Parallelism of Hardware Threading • Hyper Threadingは実行ユニッ トが複数あるときに効果があ る • 例: • ALUは複数の同時実行可能 • それ以外は1命令のみ ALUは3つあるが、 Divide(除算)は1つ
  52. 52. Hardware Threadingと Sperscaler実験 • 実験1 • 加算だけを行うスレッドを2つ実行 • 実験2 • 除算だけを行うスレッドを2つ実行 スレッド/コア 同一 論理 同一物理 異論理 異物理 加算 3.4[s] 1.8[s] 1.9[s] 除算 4.2[s] 3.4[s] 2.2[s]
  53. 53. 参考文献 • アーキテクチャ全般 • 1. David A.Patterson/John L.Hennessy; パターソン&ヘネシー コンピュータの構成と設計 第4 版, 日経BP社, 2011年. • 2. 中森 章; マイクロプロセッサ・アーキテクチャ入門, CQ出版, 2004年. • 3. 安藤壽茂; コンピュータアーキテクチャの話, マイナビニュース • 実例 • 4. Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1 • 5. Intel® 64 and IA-32 Architectures Optimization Reference Manual • 6. Performance Analysis Guide for Intel® Core™ i7 Processor and Intel® Xeon™ 5500 processors

×