CPU 命令とパイプライン

命令サイクル (フェッチ→デコード→実行) と、それを並列化するパイプラインの仕組み・ハザードを整理。

CPU は AP コンピュータシステム分野の出発点。命令サイクル (フェッチ→デコード→実行) と、それを並列化するパイプラインの仕組みを押さえます。

砂原 ニコ(普段) 砂原 ニコ

CPU って中で何してるの?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

基本は『命令フェッチ → 命令デコード → 実行』のサイクル。
これを 1命令ずつ順番にやるのが古典的な動作よ。

鳴海 理央(普段) 鳴海 理央

このサイクルを段階的に重ねるのが パイプライン。
命令1がデコード中に、命令2がフェッチを始める、という具合に並行処理して、見かけの命令スループットを向上させます。

藤咲 まりあ(普段) 藤咲 まりあ

重なって動かしてるんですねぇ。
何か問題は出ないんですかぁ?

鳴海 理央(普段) 鳴海 理央

はい、発生します。
これらを総称してハザードと呼びます。
データハザード (前の命令の結果に依存)・制御ハザード (分岐) ・構造ハザード (資源競合) の3種ですね。

緒方 ナオミ 先生(普段) 緒方 ナオミ 先生

分岐ハザードは 分岐予測 で軽減。
当たれば高速、外れたらパイプラインを破棄してやり直し。
投機実行 のような技術と組み合わせて性能を上げる代わりに、Spectre/Meltdown のようなセキュリティ問題も生んだわ。

確認クイズ

CPU パイプラインで『データハザード』が発生する典型的なケースはどれか。

  1. 後続命令が前命令の結果を入力として必要とする
  2. 条件分岐の結果が確定する前に後続命令を投機実行する
  3. 同じ機能ユニットを2つの命令が同時に使おうとする
  4. メモリアドレスが境界を跨がってアクセスされる
こたえを見る

正解: 1. 後続命令が前命令の結果を入力として必要とする

データハザードは『後続命令が前命令の結果を入力として必要とする』場合に発生。フォワーディングやストールで対処します。2 は制御ハザード、3 は構造ハザード。

緒方ナオミ先生、鳴海理央が図書室で読書会を楽しむ様子

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。