- ベストアンサー
パイプラインハザード2
- パイプラインハザードが起こる可能性と、その解決策について説明します。
- CPUがパイプライン処理している場合に起こるデータハザードによるパイプラインハザードについて説明します。
- 図2の機械語を修正してパイプラインハザードを回避する方法についての解説が求められています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
演算器の形態が不明なので勝手に以下のような処理系で考えてみます。 また、データハザードだけで考えています。 IF:命令読み出し ID:命令デコード EX:実行 MA:メモリアクセス WB:レジスタ書き込み として、 メモリ読み出し IF-ID-EX-MA-WB メモリ書き込み IF-ID-EX-MA レジスタ演算 IF-ID-EX-WB と考えてみます。 データハザードは関連するレジスタのWB→IDで発生するとします。 タイミング的には、 LOAD R1 SO(4) LOAD R2 SO(8) ADD R3 R1 R2 でLOADのR1、R2はADDに間に合いません。 また、 ADD R3 R1 R2 STORE SO(0) R3 のADDのR3はSTOREのR3に間に合いません。 例の機械命令だと以下のようになります。 00:IF-ID-EX-MA-WB 01:---IF-ID-EX-MA-WB 02:------IF----------ID-EX-WB 03:------------------IF-------ID-EX-MA 04:---------------------------IF-ID-EX-MA-WB 05:------------------------------IF----------ID-EX-WB 06:------------------------------------------IF-------ID-EX-MA で、対策は、 00:LOAD R1 SO(4) 04:LOAD R4 SO (16) 01:LOAD R2 SO(8) 05:ADD R5 R1 R4 02:ADD R3 R1 R2 06:STORE SO(12) R5 03:STORE SO(0) R3 とすると 00:IF-ID-EX-MA-WB 04:---IF-ID-EX-MA-WB 01:------IF-ID-EX-MA-WB 05:---------IF-------ID-EX-WB 02:---------------------IF-ID-EX-WB 06:------------------------IF-ID-EX-MA 03:---------------------------IF-ID-EX-MA と、短く出来ます。 考え方は依存関係をいかに減らすかと、待ち時間をいかに少なくするかです。 例の機械命令は グループ1で、00、01、02、03は依存あり。 グループ2で、00、04、05、06は依存あり。 ただし、R4とR5を追加したので、グループ1と2では、00だけが依存があることになりました。 その他、依存関係がある命令語を極力離すように命令語を並び替えてパイプを乱さないようにしています。 今回の場合、グループ1とグループ2の命令語を交互に挟んで待ち時間を小さくしています。 演算器の構造によっては違った答えもあると思います。参考まで。
お礼
大変参考になりました。本当にありがとうございます!