CPUパイプライン入門 Dora.Panda
CPUパイプライン入門Dora.Panda
今日のお題
パイプラインと分岐予測のお話です。
–Sherlock Holmes
“Elementary, my dear Watson.”!
“初歩的なことだよ、ワトソン君。”
CPUアーキテクチャーを学ぶ第一歩
1. 処理時間CPUの時間
入力と出力
装置には必ず「入力」、「出力」があり、「入力」から「出力」が得られるまでに「時間」が必要となります。
CPUも「命令」を入力と
し、「データ」を出力します。
装置お金 ジュース
CPU命令データ
データ
処理時間入力してから出力が得られるまでの時間を処理時間と定義します。!
CPUの場合、メモリから命
令を読み出し、結果を書き込むまでの時間をクロック数で表現します。!
これをCPI(Clock Per
Instruction)と呼びます。
メモリ
CPU
t[clocks]
CPI値の例
CPI8086 15
80286 6
80486 1.7
Xeon 0.25CPI値は実行するプログラムにもよって異なるので、あくまでも参考値です。(参考文献2と5より)
2. なぜ速くなったのかパイプライン登場の背景
処理時間(昔のCPU)
CPU
読み出し
デコード
書き込み
レジスタ
メモリ
実行
ちょーざっくり
一つの命令が終わってから次の命令を読み出す。
一つの命令をCPU内部で複数の命令(マイクロコード)に分
割して実行する。
無駄な時間(昔のCPU)
CPU
読み出し
デコード
書き込み
レジスタ
メモリ
実行
ちょーざっくり動作中の一カ所を除き、他の回路は何もしていない。
補足:マイクロコード
旧来のCPUと現在のIntelのCPUにはマクロ命令とマイクロ命令がある!
マクロ命令:CPUが読み出す命令!
マイクロ命令:マクロ命令を元にCPU内部で実行する命令
補足:マイクロコードが生まれた背景回路の集積度が上げられない!
32bitの加算命令(回路)を用意せず、4bit加算を8回実行しても結果は同じ。(時間は遅い)!
外部メモリのアクセススピードが遅い!
一つの命令で複数のCPU内部処理を行うことでメモリアクセス回数を減らす。
時代が変わり前提が崩れる
集積度が上がる!
専用回路を用意した方が速いのでは?!
キャッシュメモリを用意すればメモリアクセスは速くなるのでは?
新しい発想~そしてRISCへ専用の演算回路を用意する!
マイクロコードが不要!
外部から読み出す命令と内部で実行する命令を1対1にする!
キャッシュを用意する!
DRAMに比べて非常に高速!
命令実行中に次の命令を読み出す!
使っていない回路に次の命令を読み込んでしまえば同時に複数の命令を実行できるよね?
パイプライン化してみよう
高速だけどメモリアクセス回数が増える
RISCの登場(ざっくり)
CPU
読み出し
デコード
書き込み
レジスタ
メモリ
実行
動作していないのはもったいない。次の命令を読んじゃえ!
メモリは遅いからキャッシュを付けよう。
マイクロコードはやめてハードで実装しよう
3. パイプライン流れ作業
基本的なパイプライン5段のパイプライン!
IF:命令フェッチ!
RF:命令デコード!
EX:命令実行!
MEM:保存先計算!
WR:保存(メモリ、レジスタ)
IF RF EX MEM WR
クイズ1命令の実行時間を考える
問題1
次の二つのパイプラインがあります。!
1命令を何クロックで実行できるでしょうか?
IF RF EX MEM WR
IF RF EX MEM WR
2 1 3
その1
その2
Clock数
回答1
どちらも10クロックです。
IF RF EX MEM WR
IF RF EX MEM WR
2 1 3
その1
その2
Clock数 2 2
2 2 2 2 2
クイズ2もしステージごとの動作クロックがバラバラだとどうなる?
問題2
次の二つのパイプラインがあります。!
20クロックで何命令実行できるでしょうか?
IF RF EX MEM WR
IF RF EX MEM WR
2 1 3
その1
その2
Clock数
回答2
その1:6命令IF RF EX ME WR
IF RF EX ME WR
IF RF EX ME WR
IF RF EX ME WR
IF RF EX ME WR
IF RF EX ME WR
命令1
命令2
命令6
・パイプラインの各ステージ:スレッド!・クロックの立ち上がり:周期タイマーイベント!をイメージすると分かりやすいかも
回答2
その2:4命令IF EX MEM WR
IF EX MEM WR
IF EX MEM WR
IF EX MEM WR
IF EX MEM
未完了
命令1
命令2
命令5
命令4
パイプラインの理想像
各ステージは1クロックで動作!
理想的な状態では1クロックで1命令を実行!
1.0 IPC(1 instruction per clock)!
工場などで「1分間にxx台の生産能力があります」というのと同じ。!
現実的に命令が1クロックで実行できるとは限りませんが。
クイズ3キャッシュの課題
問題3
このパイプラインは1クロックに1命令を実行できません。なぜでしょうか?
IF RF EX MEM WR
Cache
RAM
各ステージは1クロックで動作するとします。
回答3
1つのメモリ(キャッシュ)に対し、同時に「読み出し」、「書き込み」は不可能。
IF RF EX MEM WR
Cache
RAM
読み出し中は書き込み不可!書き込み中は読み出し不可
ハーバードアーキテクチャ
命令とデータを同時にアクセスするには、命令バスとデータバスを分ける必要がある。!
CPUには「命令キャッシュ」と「データキャッシュ」がある。
IF RF EX MEM WR
Inst!Cache
Data!Cache
クイズ4連続した命令の問題
問題4
次のようなプログラムがあります。!
この場合、1クロックに1命令を実行することは不可能です。なぜでしょうか?
ADD, R0, R1! // R0 = R0 + R1!CMP, R0, R2! // R0 = R2 ?!
a = a + b;!if (a == c) {!
回答4
命令1の結果がR0に書き込まれる前に、命令2
がR0を使うから。!
これをハザードと呼びます。
IF RF EX ME WR
IF RF EX ME WR
命令1
命令2
ADD, R0, R1! // R0 = R0 + R1!CMP, R0, R2! // R0 = R2 ?!
解決策フォワーディング!
!
命令スケジューリング!
命令順序入れ替え、NOP命令挿入!
インターロック!
パイプラインをストールする
IF RF EX ME WR
IF RF EX ME WR
命令1
命令2
クイズ5分岐命令の問題
問題5
条件分岐命令があります。分岐する、しないをどのように判断したら良いでしょうか?
IF RF EX ME WR
IF RF EX ME WR
命令1
命令2
IF RF EX ME WR命令3
分岐命令
分岐しなければ命令2
分岐するなら命令3 IF RF EX ME WR
命令1がEXステージを完了しないと、どちらを読むか確定しない。!
回答5
ストール!
分かんないから止めちゃえ。!
投機実行!
動的予測!
履歴を取る。!
静的予測!
戻るか進むか?
命令アドレス!分岐先アドレス!履歴!
命令アドレス!分岐先アドレス!履歴!
命令アドレス!分岐先アドレス!履歴!
分岐予測テーブル
静的予測
分岐命令!命令
命令!
命令!
命令!…
実行しそうな命令は近く
実行しなさそうなのは!遠くへポイッ
4. 実際の話現実的には?
動作クロック
すべてを1クロックで実行するのは不可能!
実行時間の長い命令!
乗算、除算、浮動小数点演算、ロード/ストア、etc!
メモリアクセス!
キャッシュミスヒット時はものすごい遅い
命令デコードRISC系:バイトコード=内部命令!
命令長が一定(の場合が多い)!
命令がシンプル!
CISC系(x86系):バイトコード≠内部命令!
命令長可変!
命令が複雑でパイプラインに向かない!
命令の分解が必要。
x86アーキテクチャの特徴
命令長が可変!
命令を読んでみないと、命令長が分からない!
実行クロックがマチマチ!
1つの命令で複数の内部命令を実行している!
マクロ命令からマイクロ命令へデコードするステージが必要!
後述
命令の比較
x86
ARM
命令長が固定
命令長が可変
現実のCPU(Haswell-E)マイクロコードへの変換
分岐予測
実行
実験してみよう
動的分岐予測!
同じ方を通り続ける。!
静的分岐予測!
わざとはずれる(likely/unlikely/
__builtin_expect)Intel Performance Counter Monitorを使用して実験しましょう
参考文献アーキテクチャ全般!
1. David A.Patterson/John L.Hennessy; パターソン&ヘネシー コンピュータの構成と設計 第4版, 日経BP社, 2011年.!
2. 中森 章; マイクロプロセッサ・アーキテクチャ入門, CQ出版, 2004年.!
CPU実例!
3. Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1!
4. Intel® 64 and IA-32 Architectures Optimization Reference Manual!
5. Performance Analysis Guide for Intel® Core™ i7 Processor and Intel® Xeon™ 5500 processors
次回のお話は?今日の説明の範囲ではCPI値は1.0に限りなく近づくものの、1.0を切ることは不可能です。!
1.0を切るためのアーキテクチャについて勉強しましょう。!
スーパースカラー、ハイパースレッディング、マルチプロセッサなどが必要になります。!
!
!- Coming Soon -!
- ハードウェアによる同時実行について(仮題) -!
(Soon = 半年以内で…)