次のコード セグメントでは、潜在的なパイプラインの危険をすべて解決するために、最小数の nop を挿入する必要があります。
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
そして、私が提案した解決策は
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
NOP
NOP
ただし、上記の答え以上のことはよくわからないので、誰か助けてもらえますか?
次のコード セグメントでは、潜在的なパイプラインの危険をすべて解決するために、最小数の nop を挿入する必要があります。
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
そして、私が提案した解決策は
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
NOP
NOP
ただし、上記の答え以上のことはよくわからないので、誰か助けてもらえますか?
ここでの唯一の関心事は、次のサイクルで がヒットする$t2
前に が正しい値 ($t2 + 1)を取得するようにすることです。beq
答えは、値$t2
をメモリまたはキャッシュに書き戻すのに必要なサイクル数に大きく依存します。その詳細は省略しましたが、3 段階のパイプラインしかなく、すべての操作に 1 サイクルかかると仮定すると、単一の NOP が機能します。
lw
パイプラインに入ります。addi
beq
の値を比較します。$t3
$t2
実装がこのタイプの転送をサポートしているかどうかはわかりません。安全な賭けは2つのNOPですが、かなりの数の詳細が省略されています。説明のためにコメントを残すのに十分な担当者がまだいません:(これが役立つことを願っています.