cpu pipeline basics

45
CPUパイプライン入門 Dora.Panda

Upload: shinichiro-niiyama

Post on 18-Dec-2014

1.763 views

Category:

Technology


1 download

DESCRIPTION

CPU Pipe line architecture basics.

TRANSCRIPT

Page 1: Cpu pipeline basics

CPUパイプライン入門Dora.Panda

Page 2: Cpu pipeline basics

今日のお題

パイプラインと分岐予測のお話です。

Page 3: Cpu pipeline basics

–Sherlock Holmes

“Elementary, my dear Watson.”!

“初歩的なことだよ、ワトソン君。”

CPUアーキテクチャーを学ぶ第一歩

Page 4: Cpu pipeline basics

1. 処理時間CPUの時間

Page 5: Cpu pipeline basics

入力と出力

装置には必ず「入力」、「出力」があり、「入力」から「出力」が得られるまでに「時間」が必要となります。

CPUも「命令」を入力と

し、「データ」を出力します。

装置お金 ジュース

CPU命令データ

データ

Page 6: Cpu pipeline basics

処理時間入力してから出力が得られるまでの時間を処理時間と定義します。!

CPUの場合、メモリから命

令を読み出し、結果を書き込むまでの時間をクロック数で表現します。!

これをCPI(Clock Per

Instruction)と呼びます。

メモリ

CPU

t[clocks]

Page 7: Cpu pipeline basics

CPI値の例

CPI8086 15

80286 6

80486 1.7

Xeon 0.25CPI値は実行するプログラムにもよって異なるので、あくまでも参考値です。(参考文献2と5より)

Page 8: Cpu pipeline basics

2. なぜ速くなったのかパイプライン登場の背景

Page 9: Cpu pipeline basics

処理時間(昔のCPU)

CPU

読み出し

デコード

書き込み

レジスタ

メモリ

実行

ちょーざっくり

一つの命令が終わってから次の命令を読み出す。

一つの命令をCPU内部で複数の命令(マイクロコード)に分

割して実行する。

Page 10: Cpu pipeline basics

無駄な時間(昔のCPU)

CPU

読み出し

デコード

書き込み

レジスタ

メモリ

実行

ちょーざっくり動作中の一カ所を除き、他の回路は何もしていない。

Page 11: Cpu pipeline basics

補足:マイクロコード

旧来のCPUと現在のIntelのCPUにはマクロ命令とマイクロ命令がある!

マクロ命令:CPUが読み出す命令!

マイクロ命令:マクロ命令を元にCPU内部で実行する命令

Page 12: Cpu pipeline basics

補足:マイクロコードが生まれた背景回路の集積度が上げられない!

32bitの加算命令(回路)を用意せず、4bit加算を8回実行しても結果は同じ。(時間は遅い)!

外部メモリのアクセススピードが遅い!

一つの命令で複数のCPU内部処理を行うことでメモリアクセス回数を減らす。

Page 13: Cpu pipeline basics

時代が変わり前提が崩れる

集積度が上がる!

専用回路を用意した方が速いのでは?!

キャッシュメモリを用意すればメモリアクセスは速くなるのでは?

Page 14: Cpu pipeline basics

新しい発想~そしてRISCへ専用の演算回路を用意する!

マイクロコードが不要!

外部から読み出す命令と内部で実行する命令を1対1にする!

キャッシュを用意する!

DRAMに比べて非常に高速!

命令実行中に次の命令を読み出す!

使っていない回路に次の命令を読み込んでしまえば同時に複数の命令を実行できるよね?

パイプライン化してみよう

高速だけどメモリアクセス回数が増える

Page 15: Cpu pipeline basics

RISCの登場(ざっくり)

CPU

読み出し

デコード

書き込み

レジスタ

メモリ

実行

動作していないのはもったいない。次の命令を読んじゃえ!

メモリは遅いからキャッシュを付けよう。

マイクロコードはやめてハードで実装しよう

Page 16: Cpu pipeline basics

3. パイプライン流れ作業

Page 17: Cpu pipeline basics

基本的なパイプライン5段のパイプライン!

IF:命令フェッチ!

RF:命令デコード!

EX:命令実行!

MEM:保存先計算!

WR:保存(メモリ、レジスタ)

IF RF EX MEM WR

Page 18: Cpu pipeline basics

クイズ1命令の実行時間を考える

Page 19: Cpu pipeline basics

問題1

次の二つのパイプラインがあります。!

1命令を何クロックで実行できるでしょうか?

IF RF EX MEM WR

IF RF EX MEM WR

2 1 3

その1

その2

Clock数

Page 20: Cpu pipeline basics

回答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

Page 21: Cpu pipeline basics

クイズ2もしステージごとの動作クロックがバラバラだとどうなる?

Page 22: Cpu pipeline basics

問題2

次の二つのパイプラインがあります。!

20クロックで何命令実行できるでしょうか?

IF RF EX MEM WR

IF RF EX MEM WR

2 1 3

その1

その2

Clock数

Page 23: Cpu pipeline basics

回答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

・パイプラインの各ステージ:スレッド!・クロックの立ち上がり:周期タイマーイベント!をイメージすると分かりやすいかも

Page 24: Cpu pipeline basics

回答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

Page 25: Cpu pipeline basics

パイプラインの理想像

各ステージは1クロックで動作!

理想的な状態では1クロックで1命令を実行!

1.0 IPC(1 instruction per clock)!

工場などで「1分間にxx台の生産能力があります」というのと同じ。!

現実的に命令が1クロックで実行できるとは限りませんが。

Page 26: Cpu pipeline basics

クイズ3キャッシュの課題

Page 27: Cpu pipeline basics

問題3

このパイプラインは1クロックに1命令を実行できません。なぜでしょうか?

IF RF EX MEM WR

Cache

RAM

各ステージは1クロックで動作するとします。

Page 28: Cpu pipeline basics

回答3

1つのメモリ(キャッシュ)に対し、同時に「読み出し」、「書き込み」は不可能。

IF RF EX MEM WR

Cache

RAM

読み出し中は書き込み不可!書き込み中は読み出し不可

Page 29: Cpu pipeline basics

ハーバードアーキテクチャ

命令とデータを同時にアクセスするには、命令バスとデータバスを分ける必要がある。!

CPUには「命令キャッシュ」と「データキャッシュ」がある。

IF RF EX MEM WR

Inst!Cache

Data!Cache

Page 30: Cpu pipeline basics

クイズ4連続した命令の問題

Page 31: Cpu pipeline basics

問題4

次のようなプログラムがあります。!

この場合、1クロックに1命令を実行することは不可能です。なぜでしょうか?

ADD, R0, R1! // R0 = R0 + R1!CMP, R0, R2! // R0 = R2 ?!

a = a + b;!if (a == c) {!

Page 32: Cpu pipeline basics

回答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 ?!

Page 33: Cpu pipeline basics

解決策フォワーディング!

!

命令スケジューリング!

命令順序入れ替え、NOP命令挿入!

インターロック!

パイプラインをストールする

IF RF EX ME WR

IF RF EX ME WR

命令1

命令2

Page 34: Cpu pipeline basics

クイズ5分岐命令の問題

Page 35: Cpu pipeline basics

問題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ステージを完了しないと、どちらを読むか確定しない。!

Page 36: Cpu pipeline basics

回答5

ストール!

分かんないから止めちゃえ。!

投機実行!

動的予測!

履歴を取る。!

静的予測!

戻るか進むか?

命令アドレス!分岐先アドレス!履歴!

命令アドレス!分岐先アドレス!履歴!

命令アドレス!分岐先アドレス!履歴!

分岐予測テーブル

静的予測

分岐命令!命令

命令!

命令!

命令!…

実行しそうな命令は近く

実行しなさそうなのは!遠くへポイッ

Page 37: Cpu pipeline basics

4. 実際の話現実的には?

Page 38: Cpu pipeline basics

動作クロック

すべてを1クロックで実行するのは不可能!

実行時間の長い命令!

乗算、除算、浮動小数点演算、ロード/ストア、etc!

メモリアクセス!

キャッシュミスヒット時はものすごい遅い

Page 39: Cpu pipeline basics

命令デコードRISC系:バイトコード=内部命令!

命令長が一定(の場合が多い)!

命令がシンプル!

CISC系(x86系):バイトコード≠内部命令!

命令長可変!

命令が複雑でパイプラインに向かない!

命令の分解が必要。

Page 40: Cpu pipeline basics

x86アーキテクチャの特徴

命令長が可変!

命令を読んでみないと、命令長が分からない!

実行クロックがマチマチ!

1つの命令で複数の内部命令を実行している!

マクロ命令からマイクロ命令へデコードするステージが必要!

後述

Page 41: Cpu pipeline basics

命令の比較

x86

ARM

命令長が固定

命令長が可変

Page 42: Cpu pipeline basics

現実のCPU(Haswell-E)マイクロコードへの変換

分岐予測

実行

Page 43: Cpu pipeline basics

実験してみよう

動的分岐予測!

同じ方を通り続ける。!

静的分岐予測!

わざとはずれる(likely/unlikely/

__builtin_expect)Intel Performance Counter Monitorを使用して実験しましょう

Page 44: Cpu pipeline basics

参考文献アーキテクチャ全般!

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

Page 45: Cpu pipeline basics

次回のお話は?今日の説明の範囲ではCPI値は1.0に限りなく近づくものの、1.0を切ることは不可能です。!

1.0を切るためのアーキテクチャについて勉強しましょう。!

スーパースカラー、ハイパースレッディング、マルチプロセッサなどが必要になります。!

!

!- Coming Soon -!

- ハードウェアによる同時実行について(仮題) -!

(Soon = 半年以内で…)