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命令実行完了
時間
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. 複数実行ユニットの問題
• データハザードが発生する例
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. 複数実行ユニットの問題
• データハザードが発生する例
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. データハザードの種類
• 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
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
…
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