パイブライン処理での危険がパイブラインハザード

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : パイブライン処理での危険を学ぶ

勉強のきっかけになった問題

パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。

  1. 構造ハザード
  2. 資源ハザード
  3. 制御ハザード > 正解
  4. データハザード

平成26年秋期問7 分岐命令で発生するハザード|応用情報技術者試験.com

パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。

  • 英語 : pipeline hazard

マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つです。

そもそもハザードとは、危険の原因・危険物・障害物などを意味する英語です。

  • 英語 : hazard

https://resilient-medical.com/wp-content/uploads/2018/05/hazard1-600x450.jpg
https://resilient-medical.com/risk/hazard

ハザードの種類は、原因によって分けられます。

制御ハザードは、分岐命令によって先取りした命令が無駄になることです。

  • 別名 : 分岐ハザード
  • 例えば・・・
    • 条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。
    • 分岐命令を実行した場合、次に実行される命令は、分岐が成立した場合と不成立の場合の2通りがある。分岐が成立しないと仮定して命令を先取りすると、分岐が成立した場合に先取りした命令をキャンセルし、改めて分岐が成立した場合の命令を実行しなければならない。

制御ハザードによって先取りした命令のキャンセルが発生し、ムダになったクロック*1のことをインターロック*2もしくはストール*3という。

http://security2600.sakura.ne.jp/main2/image3/hazard1.jpg
パイプラインハザード - Security Akademeia

解決方法
  • 分岐先が判明するまで先取りしない
  • 常に分岐が不成立(あるいは成立)と仮定して先取りを進める
  • 場合によってはストールが起こることを容認する。

f:id:ponsuke_tarou:20190315214631p:plain
飛鳥山公園

データハザードは、命令が直前の命令の実行結果を使用する場合に発生します。

ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生します。

http://security2600.sakura.ne.jp/main2/image3/hazard2.jpg
パイプラインハザード - Security Akademeia

https://image.slidesharecdn.com/sample-150315081741-conversion-gate01/95/cpu-16-638.jpg?cb=1449891681
CPUの同時実行機能

解決方法
  • NOP命令を挿入する
  • データハザードを検知したら実行結果を次の命令に直接たわしてしまう
    • 演算装置によってハードウェア的に実現される

構造ハザードは、CPU内部の資源の衝突によって発生します。

複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがあります。

  • 例えば・・・
    • 命令Aがメモリへの書込を行っているのと同じタイミングで後続の命令Bがメモリの読込をしようとするとメモリアクセスがバッティングします。バッティングしないようにするために命令Bは1クロック処理を遅らせる必要があります。これにより1クロック分遅延します。

https://news.mynavi.jp/article/architecture-124/images/002.gif
https://news.mynavi.jp/article/architecture-124/images/003.gif
コンピュータアーキテクチャの話(124) パイプライン処理と構造的ハザード | マイナビニュース

http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_contention.png
http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_hazard.png
マイコンの構造と処理3 – ミームス(MEMEs)のサポートページ

解決方法
  • ハードウェア的に回避することは可能。
    • しかし完全に構造ハザードを起こさない構成はコストの上昇を招く。
    • 構造ハザードの確率が低ければ、コスト上昇を抑えるために、多少の構造ハザードを無視するのが現実的である。

f:id:ponsuke_tarou:20190315003545p:plain
思い出の一枚

次回の勉強内容

勉強中・・・

*1:CPUの動作基準となる時間の単位で、このクロックの整数倍の時間をかけて命令を実行していきます。命令パイプライン中の1ステージの実行には最低1クロックかかるので、4ステージ構成の命令パイプラインでは、1個の命令を実行完了するためには、最低でも4クロックの時間が必要となります。CPUをはじめとしたコンピュータの各回路は、一定の時間で刻まれるクロック信号に歩調を合わせながら処理を行っています。 このクロック信号は、非常に正確な時間間隔でパルス(非常に短い時間の間だけ変化する電流)を発生する水晶発振器によって生成されます。

*2:安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと。

*3:命令パイプラインでは、除算命令のように命令の処理完了に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策としてパイプラインの各段階が忙しいことを示せるようにして、パイプラインをインターロックして次の命令がステップを進まないように止めなければならない。これがストールであり、分岐のように中断以前の処理が無駄になる場合にはストールに加えて無駄となった処理時間分も加わり、これらがインターロックのロスとなる。