cpuの速度向上はいかに実現されたのか
TRANSCRIPT
CPUの速度向上はいかに実現されたのか?- 性能向上を支えた技術 -
About Me
Name: Joongjin BaeBlog: http://baepiff.blogspot.com/Twitter: bae_j
世界最古のComputer ENIACは1秒で約5000演算
現代のCPUは1秒で約100億演算
洗濯 脱水 乾燥
寮に洗濯機が1台しかない場合
洗濯機殺す!洗濯機殺す!
問題の解決方法● 洗濯機の性能を上げて洗濯時間を短縮
● 洗濯機を増やす
● 洗濯機、脱水機、乾燥機に分ける
CPUの性能指標● レイテンシ(latency)
データ転送などを要求してから、その結果が返送されるまでの遅延時間のこと
● スループット(Throughput)一般に単位時間当たりの処理能力のこと
分けてみましょう
一体型 学生A(洗濯) 学生A(乾燥) 学生B(洗濯) 学生B(乾燥)
分離型 学生A(洗濯) 学生A(乾燥)
学生B(洗濯) 学生B(乾燥)
時間
分けてみましょう
一体型 A A B B C C D D E E
分離型 A A
B B
C C
D D
E E
時間
2時間短縮
4段階に分けると
一体 A A A A B B B B C C C C D D D D E E E E
分離 A A A A
B B B B
C C C C
D D D D
E E E E
時間
3時間短縮
pipelineの説明終了!
CPU がやっていること● メモリから命令を取得Instruction Fetch, IF
● 命令を解釈・解析Instruction Decoding, ID
● メモリからデータを読込Operand Fetch, OF
● 計算を実行Instruction Execution, EX
● メモリにデータを書込Operand Store, OS又はWrite Back, WB
CPU がやっていること
Memory
Load/StoreUnit
FetchUnit
DecodeUnit
Register FileUnit
ExecutionUnit
IFID
OF
WB
EX
== 1個の命令実行
PIPELINEに戻って
命令A 取得 解析 読込 実行 書込
命令B 取得 解析 読込 実行 書込
命令C 取得 解析 読込 実行 書込
命令D 取得 解析 読込 実行 書込
命令E 取得 解析 読込 実行 書込
時間
命令
パイプラインはスループットを飛躍的に向上させた技術
性能を上げるためには● 均等なパイプライン段階● 同じ処理作業● 独立した作業● パイプラインのコストの最少化
均等なパイプライン段階
学生A 1 2 3 3 3 3 4 4
学生B 1 2 3 3 3 3 4 4
学生C 1 2 3 3 3 3 4 4
学生D 1 2 3 3 3 3 4 4
時間
一番処理時間が長い段階のパイプラインの影響を受ける。
Stall発生
同じ処理作業
学生A 洗濯 乾燥
学生B 洗濯 すすぎ 乾燥
学生C Stall 洗濯 乾燥
学生D 洗濯 乾燥
学生E 洗濯 乾燥
時間
すすぎをすることでPipeline Stallが発生してしまう。
独立した作業
学生A 洗濯 乾燥
学生B 洗濯 乾燥
学生C 確認 洗濯 乾燥
学生D 洗濯 乾燥
学生E 洗濯 乾燥
時間
赤い服を洗濯してもいいかを確認する作業が必要になるため遅くなる。
CPUでは分岐予測、結果予測などの回避策
パイプラインのコスト● 一体洗濯機から洗濯機、乾燥機への入替えコスト● レイテンシの犠牲
洗濯機から乾燥機への移動コストが発生
これで充分でしょうか1 x = data[10];2 y = x + 10;3 a = b / c;4 d = e * f;
2行は1行の結果(x)に依存するが、3,4行はxに依存しないため先に実行してもいい
Out-of-order実行
x=data[10] 取得 解析 読込 実行 書込
y=x+10 取得 解析 読込 実行
a=b/c 取得 解析 読込 実行 書込
d=e*f 取得 解析 読込 実行 書込
時間
命令
x=data[10]
y=x+10
in-order
out-of-order
a=b/c
d=e*f
xとの依存関係がない3行を先に実行してしまる
もうちょっと頑張って
x=data[10]
y=x+10
a=b/c
d=e*f
時間
命令
SuperScalarプロセッサは複数のパイプラインを用意し同時に命令を実行できるプロセッサ
CPUのレイテンシを向上するためには???
The answer is CACHE!!!
CPUとメモリクロック比較
1990 1995 2000 2005 20100
500
1000
1500
2000
2500
3000
3500
4000
CPU
RAM
なぜCACHEが必要?● CPUの実行ユニットにメモリ直結した場合
アクセスだけで200cycleが必要
● 命令実行は1cycleで済む
● 待ちが発生してしまう
MemoryExecutionUnit
Cache用語● cache hit
キャッシュに欲しいデータがある
● cache missキャッシュに欲しいデータがない
● miss penaltycache miss時メモリからデータを取得しキャッシュに入れるコスト
● hit latencycache hit時のコスト
なぜ複数のCACHE?
MemoryExecution
UnitL1
Cache
2 cycle 200 cycle
● L1 cacheは現実上サイズを簡単に増やせない頑張って256KB
● サイズを増やすことでcache hit rateは上がるがcache latencyは悪くなる
● cacheにほしいデータがなかった場合の時間のロスが大きい
なぜ複数のCACHE?
MemoryExecution
UnitL1
Cache
2 cycle 10 cycle
L2Cache
200 cycle
● L1 cacheでcache latencyを向上
● L2 cacheでcache hit rateを向上
● 平均アクセスタイムの改善hit latency + (cache hit / cache miss) * cache penalty
まとめ● Pipeline = 流れ作業の効率化
● Superscalar = pipelineの並列化
● Out-of-Order = 先に進めるなら進め
● Cache = 待ち時間の短縮
● RISC & CISC、分岐予測、結果予測、投機実行、prefetch等は宿題
参考図書