Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cpu pipeline basics

3,869 views

Published on

CPU Pipe line architecture basics.

Published in: Technology
  • Be the first to comment

Cpu pipeline basics

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

×