SlideShare a Scribd company logo
ハードウェアによる並列処理
CPUアーキテクチャ入門(その3)
Dora.Panda Nov 27th, 2015
今日のお題
• ハードウェアによる並列処理
(同時実行)のお話です。
• 以下の3つについて説明します。
• スーパースカラー
• マルチプロセッサー
• ハードウェアスレッディン
グ
本題に入る前に
事前知識の確認
レジスタ・キャッシュ・RAM
• レジスタ
• CPU内部のメモリ領域
• 数個∼数十個程度
• 動作速度はCPUと同速度
• CPUはレジスタ内のデータのみ制御/計算可能
• キャッシュ
• CPUと直結したメモリ領域
• 数k∼数MBytes
• 動作速度はCPUと同速度∼数十分の一
• RAM
• CPU外部のメモリ領域
• ∼xxGBytes
• 動作速度はCPUの百分の一程度
CPU
DRAM HDD
演算回路
レジスタ
レジスタ
キャッシュ
パイプライン
• 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命令実行完了
時間
前回までのおさらい
• パイプラインの現実
• パイプラインとキャッシュにより、理論上は最速で1
クロックあたり1命令実行。=1.0[IPC]
• IPC = Instruction Per Clock
• どんなに工夫してもIPCは1.0の壁を超えることは不可
能。
IPCを1.0以上にする解決策は?
• 実行回路を複数用意すべし
• スーパスカラー
• マルチコア
• ハードウェアスレッディン
グ
スーパースカラー
実行ユニット並列化
スーパスカラーの概念
• CPUコア内部にパイプライン
を複数用意
• 命令を同時実行することで
高速化
• ソフトウェアからは並列実
行数不明
IF RF EX ME WR
パイプライン1段
パイプライン2段
IF RF EX ME WR
IF RF EX ME WR
RAM(Cache)
Register
RAM(Cache)
Register
スーパースカラーの実際1
Inst Decoder
RF EX ME WR
Inst
Cache Inst Decoder
Inst Queue
Inst Inst Inst Inst
RF EX ME WR
Data
CacheRegister
Register
• スーパスカラーの実際のパイプライン
• 複数命令を同時に読み出してデコード
• 複数命令をキューに入れる
• 依存性が無い命令を同時実行
全部が複数あるわけではない
スーパースカラーの実際2
• EXは対称ではない
• SandyBridgeは演算が3way、メモリ制御が3way
• 同時実行する可能性が高い回路のみ複数実装
引用元:http://pc.watch.impress.co.jp/docs/column/kaigai/20130602_601851.html
並列度向上策
• インオーダとアウトオブオーダ実行
• インオーダ(順序通り)
• 互いに関連していない命令だけをプログラムの順序通りに実行
• アウトオブオーダ(順序外)
• 互いに関連していない命令をプログラムの順序が変わっても良い
から実行
• インオーダで実行を開始して、アウトオブオーダで終わることも
ある(命令によって実行クロック数が違う)
実装はCPUによって異なります
複数実行ユニットの問題
• データハザードが発生する例
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行目を実行
複数実行ユニットの問題
• データハザードが発生する例
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行目を実行
複数実行ユニットの問題
• データハザードが発生する例
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ハザード
データハザードの種類
• 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
真の依存と偽の依存
• 真の依存
• 回避不可能なハザード。
• 結果が必要なRAW。
• 偽の依存
• 使用するレジスタを変更す
ると解決可能なハザード。
• WARやWAWはレジスタを実
行時に置き換えて解決。
レジスタリネーミング
• 偽の依存関係を解決する
• レジスタが共通であるために発生
するハザード。
• 論理レジスタを物理レジスタに置き
換えて実行。
• 論理レジスタ
• プログラムが使用するレジス
タ
• 物理レジスタ
• CPU内部の実行用レジスタ R1 P1 P2
R3 <- R3 / R5
R4 <- R3 / 6
R3 <- R5 + 1
…
P1 <- R3 / R5
P2 <- P1 / 6
P3 <- R5 + 1
…
WAW
WAR
論理レジスタと物理レジスタ
引用元: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個
マルチコア
複数CPUによる同時実行
マルチコアにする目的
• CPUを複数用意する目的
• 処理の高速化
• スレッドやプロセスを同
時実行
• 消費電力を抑える
• 消費電力を押さえつつ高速
化
汎用PCで一般的な対象マルチプロセッサ(SMP)について説明します
ソフトウェアから見た問題
• 同期
• 同一のリソース(メモリ領域)に対するアトミックな
アクセス
• キャッシュコヒーレンシ
• それぞれのコアがキャッシュを持つため、一貫性を保
つ仕組みが必要
同期の問題
• セマフォ等、フラグ状態によ
る排他制御が必須
• シングルプロセッサでは割り
込み禁止で実現できる。
• マルチコアはHW支援必須。
• 共有フラグにアクセスすると
きにHWがLock制御
flag = 0:アクセス可能
flag = 1:アクセス不可
CPU1 CPU2
Memory
Shared
Data
Flag
同期問題の解決
• Lock信号を用意
• アトミック命令実行時に
Lock信号をアサート(有効
化)する。
• L1キャッシュにアクセスす
るときはアサートしない。
(コヒーレンシ制御で解決)
CPU1 CPU2
Memory
Shared
Data
Flag
Lock
キャッシュコヒーレンシの問題
• 同じ領域を複数のコアがキャッ
シュしている
• 一方のコアがデータをライ
トすると不整合が発生する。
• リードは問題無い。
• キャッシュコヒーレンシプロ
トコルにより不整合状態を解
決する
CPU1
Memory
Shared
Data
L1 cache
Shared
Data
L1 cache
Shared
Data
CPU2
コヒーレンシプロトコル
• MESI/MOESIプロトコル
• M:Modified
• 自分だけがキャッシュ+DRAM
と不一致
• O:Owned
• 他CPUと同内容をキャッシュ+
DRAMと不一致
• E:Exclusive
• 自分のみがキャッシュ
• S:Shared
• 他CPUと同内容をキャッシュ+
DRAMと一致
• I:Invalid
• 無効(キャッシュしていない)
MO
E S
I
MOESIの例1
• キャッシュが空の状態からデー
タをリード
• Invalid -> Exclusive
MO
E S
I
CPU1 CPU2
I -> E I
Data
Data
MOESIの例2
• CPU1がSharedのデータを書
き換え
• CPU1 : Modified
• CPU2 : Invalid
CPU1 CPU2
S -> M S -> I
Data
MO
E S
I
MOESIの例3
• CPU2がModifiedのデータを
リード
• CPU1 : Modified -> Owned
• CPU2 : Invalid -> Owned
MO
E S
I
CPU1 CPU2
M -> O I -> O
Data
消費電力
• 単純にコア数を増やすと消費
電力も増える。
• コア数を増やしつつ消費電力
を維持したい。
CPUの消費電力
• トランジスタ間の負荷容量(コ
ンデンサ)の充放電
• 配線やトランジスタ入力に
存在する負荷成分
• 漏れ電流
• 様々な要因により意図しな
い電流が流れる。
充放電に着目して考えます
+V
GND
回路 回路
+V
GND
回路 回路
スイッチングによる消費
• トランジスタがOn/Offを繰り
返すとき、コンデンサの放電/
充電が行われる。
• On/Off=CPUのクロックに
合わせて行われる。
• クロックが速ければ単位時間
あたりの充放電が多い。
• =消費電力が大きい。
消費電力はクロック周波数に比例
+V
GND
回路 回路
+V
充電
+V
放電
消費電力と電圧の関係
• クロックを遅くすることで負荷容量による消費電力を低
減できる。
クロックを遅くすると電源電圧を下げられる。
電圧を下げるとコンデンサに蓄えられる電荷が減る。
負荷容量で消費される電力は電圧の2乗に比例する。
クロックの速さと電圧
• 電圧を高くすると立ち上がりが
速くなる。
• 電圧を低くすると立ち上がりが
遅くなる。
• クロックを遅くするなら電圧を
低くしても良い。
0.00[V]
0.75[V]
1.50[V]
2.25[V]
3.00[V]
閾値電圧
同一電圧でクロックを速く
クロック信号として
成り立たなくなる
同一クロックで電圧を高く
奇麗なクロック信号になる
消費電力概算
• 消費電力と周波数、電圧の関係
• 周波数に比例し電圧の二乗に比例
• 周波数を2割下げ、電圧も2割下げる。
• 0.8 x 0.8 x 0.8 = 0.512
• 約半分の消費電力になる。
• クロックを2割下げてコアを2つにすると、ほぼ同じ消費電力で
性能が1.6倍になる。
以下のサイトの情報を私なりに解釈した結果です。
http://news.mynavi.jp/column/architecture/001/
実際の例
• 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
なんとなくそれっぽい値。
実際には様々な要因があり、単純計算はできないようです。
マルチコアのスケジューリング
• 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
…
ハードウェア
スレッディング
スーパスカラーの効率化
スーパスカラーとマルチコア
の問題
• 複数のパイプラインが有効活用されない
• 命令の依存性が高く同時実行が難しい
• 回路規模が大きくなる
• ハードウェアのコスト上昇
• 消費電力上昇
ハードウェアスレッディング(HT)
• ソフトウェアから見たハード
ウェアリソースを複数用意
• ソフトウェアは複数のCPU
と認識して処理を行う
• ハードウェアが複数スレッド
の命令を交互に実行
• OSが行うプロセスス1ケー
ジューリングをハードウェ
アが実行するイメージ
CPU
Reg
IRQ
PIPE LINE
CPU
Reg
IRQ
PIPE LINE
Reg
IRQ
HTのイメージ
• OSは複数CPUとみなしてス
レッドをスケジュール
• 所定のタイミングで実行する
スレッドを切り替える
• レイテンシの長いイベント
• キャッスミスなど
• 一定間隔で交互に
HTの効果があるパターン
• 各スレッドでリソースの競合が発生しない
• 実行ユニット(以下の図ではALUは効果あり)
• メモリ
まとめ
それぞれの特徴を整理
まとめ
• 同時実行するための仕組みには複数の実現手段
• 実行ユニット、物理コア、レジスタを複数用意
• 実現手段により特徴が異なる
• それぞれに特徴があり、組み合わせて性能向上を図る
実験
並列実行の実験
False Sharing
• 2つのスレッドが異なるメモ
リを使用しているにも関わらず、
キャッシュの構造上、メモリ
の共有状態にあることを言う
• どちらかのスレッド(CPU)がメ
モリを書き換えると、もう一
方のスレッドのキャッシュが
無効化される
• キャッシュコヒーレンシ
Core1 Core2
Cache Line Cache Line
DRAM
異なるアドレスだが、
キャッシュは同一領域管理
False SharingとHT
• 実行する物理コアが異なる
• False Sharingが発生
• 実行する物理コアが同一
• False Sharingは発生しない
Core1 Core2
Cache Line Cache Line
Core1 Core2
Cache Line
False Sharing実験
• 実験
• 2つのスレッドが異なるアドレスにデータを書き続ける
• 隣り合ったアドレス、64バイトずらしたアドレスへの書き込みの違い
• 異なる物理コア、同一物理コア内の異なる論理コア
アドレスオフセット/コア 同一物理コア 異なる物理コア
1バイト 2.5[s] 3.7[s]
64バイト 2.5[s] 1.6[s]
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
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[%]
Parallelism of Hardware
Threading
• Hyper Threadingは実行ユニッ
トが複数あるときに効果があ
る
• 例:
• ALUは複数の同時実行可能
• それ以外は1命令のみ ALUは3つあるが、
Divide(除算)は1つ
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]
参考文献
• アーキテクチャ全般
• 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

More Related Content

CPUの同時実行機能