パタヘネChapter6 part1

パタヘネ下巻の内容をやる授業をとったので、そちらのまとめでも。。

Chapter6 --パイプラインを用いた性能向上

6.1パイプライン処理の概要

プロセッサにおける命令の処理
例 MIPS R形式

  1. 命令のフェッチ
  2. 命令の解読 オペランドレジスタ)の読み出し
  3. 演算
  4. 結果の書き込み(レジスタ
マルチサイクル

――――――――――――――――――――――――――――――> 時間

逐次
  1. ―、―、―、―>|
  2. |―、―、―、―>|
  3. |―、―、―、―>
パイプライン
  1. ―、―、―、―>|
  2. ―、―、―、―>|
  3. ―、―、―、―>|
パイプライン処理
  • 複数の命令を時間を少しずつずらして同時並行的に実行する。
プロセッサの高速化技術の鍵

各ステップのことをステージと呼ぶ

高速化

  • 4ステージ
    • 4 命令 16→7 
    • 20命令 80→23
  • Lステージ
    • N命令 NL→N+L-1

MIPSの場合 5ステージ

  1. メモリから命令をフェッチする
  2. 命令の解読、オペランドレジスタ)読み出し
  3. 命令操作の実行またはアドレスの生成
  4. データメモリ中のオペランドにアクセス
  5. 結果をレジスタに書き込む

例題 p.404

微妙に単位が違うのは授業で使っているのが第三版のため。。
単一サイクル方式とパイプライン処理の性能比較
8個の命令 lw,sw,add,sub,and,or,slt,beq
メモリアクセス 200ps
ALU 200ps
レジスタ 100ps
単一サイクル 最長

  フェッチ レジスタ ALU メモリ レジスタ
lw 200 100 200 200 100

800ps
パイプライン200*5=1000

理想的な場合

パイプライン処理による命令実行間隔 = 逐次処理における間隔/パイプラインステージ数

低下の要因

  • ステージ間のバランス
  • ステージ間レジスタ
  • パイプライン処理により
    • レイテンシ(命令の実行時間)―短くならない
    • スループット(単位時間に実行できる命令数)―増大 → 1/間隔

パイプラインハザード

パイプライン処理において、次のクロックサイクルで次の命令を実行できない状態のこと。

  • 構造ハザード
    • 並行して実行される命令の組み合わせにハードウェアが対応できないために命令を所定のクロックサイクルで実行できない
    • 解決策
      1. 異なるステージで同じハードウェアを使わないように設計する
  • データハザード
    • まだパイプライン中にある先行命令に後ろの命令が依存している(演算結果を使う)
    • 解決策
      • レジスタの書き込みと読み出しのタイミング
        1. サイクル内で書き込みが終わってから読み出す
        2. フォワーディング
    • 完全に解決できない場合
      • lw $s0 20($t1)
      • sub $t2 $s0 $t3
    • パイプラインストール
  • 制御ハザード
    • ある命令の実行に関する判断をまだ実行中の先行命令の結果に基づいて下さなければならない。条件分岐
    • 解決策
      1. ストール
      2. 予測 外れたら無効にする
      3. 遅延判定、遅延分岐