SlideShare a Scribd company logo
CPUパイプライン入門 
Dora.Panda
今日のお題 
パイプラインと分岐予測の 
お話です。
“Elementary, my dear Watson.”! 
“初歩的なことだよ、ワトソン君。” 
–Sherlock Holmes 
CPUアーキテクチャーを学ぶ第一歩
1. 処理時間 
CPUの時間
入力と出力 
装置には必ず「入力」、「出 
力」があり、「入力」から 
「出力」が得られるまでに 
「時間」が必要となります。 
CPUも「命令」を入力と 
し、「データ」を出力しま 
す。 
お金装置ジュース 
CPU 
命令 
データ 
データ
処理時間 
入力してから出力が得られる 
までの時間を処理時間と定義 
します。! 
CPUの場合、メモリから命 
令を読み出し、結果を書き 
込むまでの時間をクロック 
数で表現します。! 
これをCPI(Clock Per 
Instruction)と呼びます。 
CPU 
メモリ 
t[clocks]
CPI値の例 
CPI 
8086 15 
80286 6 
80486 1.7 
Xeon 0.25 
CPI値は実行するプログラムにもよって異なるので、あくまでも 
参考値です。(参考文献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 
2 2 2 2 2 
IF RF EX MEM WR 
2 1 3 
その1 
その2 
Clock数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 
命令4 
命令5
パイプラインの理想像 
各ステージは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 ?!
解決策 
フォワーディング! 
IF RF EX ME WR 
! 
IF RF EX ME WR 
命令スケジューリング! 
命令順序入れ替え、NOP命令挿入! 
インターロック! 
パイプラインをストールする 
命令1 
命令2
クイズ5 
分岐命令の問題
問題5 
条件分岐命令があります。分岐する、しない 
をどのように判断したら良いでしょうか? 
命令1 
IF RF EX ME WR 
命令2 
IF RF EX ME WR 
命令3 IF RF EX ME WR 
分岐命令 
分岐しなけ 
れば命令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 = 半年以内で…) 

More Related Content

PPT
Glibc malloc internal
PDF
NumPyが物足りない人へのCython入門
PDF
CPUの同時実行機能
PDF
ラズパイでデバイスドライバを作ってみた。
PDF
FPGA+SoC+Linux実践勉強会資料
PDF
“見てわかる” ファイバーチャネルSAN基礎講座(第1弾)~まず理解しよう! 基本の “キ”~
PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
PDF
Page reclaim
Glibc malloc internal
NumPyが物足りない人へのCython入門
CPUの同時実行機能
ラズパイでデバイスドライバを作ってみた。
FPGA+SoC+Linux実践勉強会資料
“見てわかる” ファイバーチャネルSAN基礎講座(第1弾)~まず理解しよう! 基本の “キ”~
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Page reclaim

What's hot (20)

PDF
CRC-32
PDF
CXL_説明_公開用.pdf
PDF
Ultra96ボードでYOLOを高速化
PDF
Zynq mp勉強会資料
PDF
第4回 配信講義 計算科学技術特論B(2022)
PPTX
分散システムについて語らせてくれ
PDF
条件分岐とcmovとmaxps
PPTX
x86x64 SSE4.2 POPCNT
PDF
さいきんの InnoDB Adaptive Flushing (仮)
PDF
ツイートID生成とツイッターリアルタイム検索システムの話
PPT
Lockfree Queue
PDF
マルチコアを用いた画像処理
PDF
ウェーブレット木の世界
PDF
ACRiウェビナー:小野様ご講演資料
PDF
Rustに触れて私のPythonはどう変わったか
PPTX
C#や.NET Frameworkがやっていること
PDF
LBFGSの実装
PDF
心理学におけるベイズ統計の流行を整理する
PDF
Cpu cache arch
PDF
Task Spooler を試した
CRC-32
CXL_説明_公開用.pdf
Ultra96ボードでYOLOを高速化
Zynq mp勉強会資料
第4回 配信講義 計算科学技術特論B(2022)
分散システムについて語らせてくれ
条件分岐とcmovとmaxps
x86x64 SSE4.2 POPCNT
さいきんの InnoDB Adaptive Flushing (仮)
ツイートID生成とツイッターリアルタイム検索システムの話
Lockfree Queue
マルチコアを用いた画像処理
ウェーブレット木の世界
ACRiウェビナー:小野様ご講演資料
Rustに触れて私のPythonはどう変わったか
C#や.NET Frameworkがやっていること
LBFGSの実装
心理学におけるベイズ統計の流行を整理する
Cpu cache arch
Task Spooler を試した
Ad

Viewers also liked (20)

PDF
Windows10の展開手法
PDF
経験過程
PPTX
AtCoder Regular Contest 016 解説
PPTX
便利な数を100億個の乱数から算出
PDF
H231126 統計および確率を利用した予測と判断rev1
PDF
Life with jupyter
PDF
確率論基礎
PDF
統計勉強会 LT ベイジアンって?
PPTX
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
PPTX
ベイズ基本0425
PDF
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
PDF
MLaPP 2章 「確率」(前編)
PDF
EthernetやCPUなどの話
PPTX
「数学の世界」発表資料
PDF
カップルが一緒にお風呂に入る割合をベイズ推定してみた
PDF
TensorFlowで学ぶDQN
PDF
ベイズ統計入門
PDF
10年効く分散ファイルシステム技術 GlusterFS & Red Hat Storage
PPTX
ゼロから始める自作 CPU 入門
PDF
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
Windows10の展開手法
経験過程
AtCoder Regular Contest 016 解説
便利な数を100億個の乱数から算出
H231126 統計および確率を利用した予測と判断rev1
Life with jupyter
確率論基礎
統計勉強会 LT ベイジアンって?
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
ベイズ基本0425
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
MLaPP 2章 「確率」(前編)
EthernetやCPUなどの話
「数学の世界」発表資料
カップルが一緒にお風呂に入る割合をベイズ推定してみた
TensorFlowで学ぶDQN
ベイズ統計入門
10年効く分散ファイルシステム技術 GlusterFS & Red Hat Storage
ゼロから始める自作 CPU 入門
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
Ad

Similar to Cpu pipeline basics (20)

PDF
Cpuの速度向上はいかに実現されたのか
PPTX
20200709 fjt7tdmi-blog-appendix
PDF
Code jp2015 cpuの話
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
PDF
2011.09.18 v7から始めるunix まとめ
PPT
20110611 v7unix-b
PDF
【学習メモ#8th】12ステップで作る組込みOS自作入門
PDF
【学習メモ#11th】12ステップで作る組込みOS自作入門
PDF
初めてのCPUを作ってみた
PDF
【学習メモ#9th】12ステップで作る組込みOS自作入門
PDF
Step-Oriented Programming による任意コード実行の可能性
PDF
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
PDF
本当にわかる Spectre と Meltdown
PDF
[Basic 8] プロセスとスレッド / 入出力 / シェル
PDF
Unixカーネルの設計 7 プロセスの制御
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
PDF
生物データベース論(並列分散計算フレームワーク)
PDF
2011.06.11 v7から始めるunix まとめ
PDF
PEZY-SC programming overview
PDF
kagami_comput2015_7
Cpuの速度向上はいかに実現されたのか
20200709 fjt7tdmi-blog-appendix
Code jp2015 cpuの話
0章 Linuxカーネルを読む前に最低限知っておくべきこと
2011.09.18 v7から始めるunix まとめ
20110611 v7unix-b
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
初めてのCPUを作ってみた
【学習メモ#9th】12ステップで作る組込みOS自作入門
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
本当にわかる Spectre と Meltdown
[Basic 8] プロセスとスレッド / 入出力 / シェル
Unixカーネルの設計 7 プロセスの制御
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
生物データベース論(並列分散計算フレームワーク)
2011.06.11 v7から始めるunix まとめ
PEZY-SC programming overview
kagami_comput2015_7

Cpu pipeline basics