0

次のコード セグメントでは、潜在的なパイプラインの危険をすべて解決するために、最小数の 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

ただし、上記の答え以上のことはよくわからないので、誰か助けてもらえますか?

4

1 に答える 1

0

ここでの唯一の関心事は、次のサイクルで がヒットする$t2前に が正しい値 ($t2 + 1)を取得するようにすることです。beq答えは、値$t2をメモリまたはキャッシュに書き戻すのに必要なサイクル数に大きく依存します。その詳細は省略しましたが、3 段階のパイプラインしかなく、すべての操作に 1 サイクルかかると仮定すると、単一の NOP が機能します。

  1. からの値が使用可能になると 、サイクル 0 でlwパイプラインに入ります。addi
  2. サイクル 1 では、最後のサイクルから使用可能になったとbeqの値を比較します。$t3$t2

実装がこのタイプの転送をサポートしているかどうかはわかりません。安全な賭けは2つのNOPですが、かなりの数の詳細が省略されています。説明のためにコメントを残すのに十分な担当者がまだいません:(これが役立つことを願っています.

于 2013-09-30T21:28:34.243 に答える