問題
応用情報技術者 平成26年秋期 午前問7
パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。
- 構造ハザード
- 資源ハザード
- 制御ハザード
- データハザード
答え
制御ハザード
解説
パイプラインハザード
パイプライン処理を行う場合にも、複数の命令同士が持つ依存関係から命令の投入を中断せざるを得ない状況が生じうるが、これをパイプラインハザードと呼ぶ。ハザードが発生すると処理速度の低下に繋がる。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
パイプラインハザードの種類
以下の表では、命令の略語を用いています。
- IF (Instruction Fetch) 命令を命令キャッシュから読み出す
- ID (Instruction Decode/register read) 制御信号を生成し、レジスタ・ファイルをレジスタ指定子で参照する
- EX (EXecution/address calculation) 数値の計算やロード・ストアのデータやアドレス・分岐先の計算を行う
- MA (Memory Access) ロード(メモリの読み出し)・ストア(メモリへの書き込み)を行うWB (Write Back)レジスタにデータを書き込む
- WB (Write Back) レジスタにデータを書き込む
データ・ハザード
処理するデータの依存関係に起因するハザードである。
時間 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
sub $2, $1, $3 | IF | ID | EX | MA | WB | |||||
and $4, $2, $5 | IF | ID | EX | MA | WB | |||||
and $6, $7, $8 | IF | IE | EX | MA | WB |
1行目は、 $2 = $1 – $3 という意味です。
2行目は、 $4 = $2 and $5 という意味です。
2行目で1行目の結果を使うため、1行目の演算の結果が出ないと、2行目に進むことができず、パイプライン処理が行えなくなっています。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
このような場合、2つ目の命令で用いられている変数$2は、1つ目の命令で演算の対象になっているため、1つ目の命令の処理が全て終わらなければ正しい結果を返すことができない。そのため、直前の命令が全て終了するまでパイプラインを止める必要が発生し、これをデータ・ハザードという。レジスタが問題になる場合はWB→IDで、メモリの場合はMA→MAという関係で発生する。
構造ハザード
ハードウェア的な資源の競合に起因するハザードである。
時間 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
命令1 | IF | ID | EX | MA | WB | |||
命令2 | IF | ID | EX | MA | WB | |||
命令3 | IF | ID | EX | MA | WB | |||
命令4 | IF | ID | EX | MA | WB |
ID (Instruction Decode/register read) 、つまりレジスタの読み込みと、 WB (Write Back) 、つまりレジスタの書き込みが同時に発生してしっています。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
WBとIDは、同一の部品(ハードウェア資源)を要求するため、資源の競合が発生してしまう。これが構造ハザードである。WBとIDを同時に実行することで発生する。
制御ハザード(分岐ハザード)
制御の依存に起因するハザードである。
時間 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
beq $1, $2, label | IF | ID | EX | MA | WB | ||||
and $4, $2, $5 | IF | ID | EX | MA | WB |
1行目は $1 と $2 が等しいなら label に進むという意味です。
この場合、 1行目の結果次第で、 2行目に進むかlabelに進むか決まるので、次の処理に進むことができません。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
分岐命令がある場合、結果によって次に実行するべき命令がわからないため、パイプラインを止めて次に実行すべき命令が判明するのを待たなければならない。これを制御ハザード、または分岐ハザードという。MA→IFのステージに関係する。