パイブライン処理での危険がパイブラインハザード
- 前回の勉強内容
- 今回の勉強内容 : パイブライン処理での危険を学ぶ
- パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。
- ハザードの種類は、原因によって分けられます。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : パイブライン処理での危険を学ぶ
勉強のきっかけになった問題
パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。
- 構造ハザード
- 資源ハザード
- 制御ハザード > 正解
- データハザード
パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。
- 英語 : pipeline hazard
マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つです。
ハザードの種類は、原因によって分けられます。
制御ハザードは、分岐命令によって先取りした命令が無駄になることです。
- 別名 : 分岐ハザード
- 例えば・・・
- 条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。
- 分岐命令を実行した場合、次に実行される命令は、分岐が成立した場合と不成立の場合の2通りがある。分岐が成立しないと仮定して命令を先取りすると、分岐が成立した場合に先取りした命令をキャンセルし、改めて分岐が成立した場合の命令を実行しなければならない。
制御ハザードによって先取りした命令のキャンセルが発生し、ムダになったクロック*1のことをインターロック*2もしくはストール*3という。
解決方法
- 分岐先が判明するまで先取りしない
- 常に分岐が不成立(あるいは成立)と仮定して先取りを進める
- 場合によってはストールが起こることを容認する。
データハザードは、命令が直前の命令の実行結果を使用する場合に発生します。
ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生します。
解決方法
- NOP命令を挿入する
- コンパイラによってソフトウェア的に実現される
- データハザードを検知したら実行結果を次の命令に直接たわしてしまう
- 演算装置によってハードウェア的に実現される
構造ハザードは、CPU内部の資源の衝突によって発生します。
複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがあります。
- 例えば・・・
- 命令Aがメモリへの書込を行っているのと同じタイミングで後続の命令Bがメモリの読込をしようとするとメモリアクセスがバッティングします。バッティングしないようにするために命令Bは1クロック処理を遅らせる必要があります。これにより1クロック分遅延します。
解決方法
- ハードウェア的に回避することは可能。
- しかし完全に構造ハザードを起こさない構成はコストの上昇を招く。
- 構造ハザードの確率が低ければ、コスト上昇を抑えるために、多少の構造ハザードを無視するのが現実的である。
次回の勉強内容
勉強中・・・
*1:CPUの動作基準となる時間の単位で、このクロックの整数倍の時間をかけて命令を実行していきます。命令パイプライン中の1ステージの実行には最低1クロックかかるので、4ステージ構成の命令パイプラインでは、1個の命令を実行完了するためには、最低でも4クロックの時間が必要となります。CPUをはじめとしたコンピュータの各回路は、一定の時間で刻まれるクロック信号に歩調を合わせながら処理を行っています。 このクロック信号は、非常に正確な時間間隔でパルス(非常に短い時間の間だけ変化する電流)を発生する水晶発振器によって生成されます。
*2:安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと。
*3:命令パイプラインでは、除算命令のように命令の処理完了に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策としてパイプラインの各段階が忙しいことを示せるようにして、パイプラインをインターロックして次の命令がステップを進まないように止めなければならない。これがストールであり、分岐のように中断以前の処理が無駄になる場合にはストールに加えて無駄となった処理時間分も加わり、これらがインターロックのロスとなる。