私はコンピュータアーキテクチャに関する本を読んでいます。この章では、分岐予測について説明します。 私はそれの周りに私の頭を包み込むのに苦労しているこの小さな練習があります。 分岐予測とパフォーマンス
ループ
for (j = 0; j < 2; j++)
{
for (i = 10; i > 0; i = i-1)
x[i] = x[i] + s
}
ための内部以下------->内部ループ検討
:L.D F0, 0(R1)
ADD.D F4, F0, F2
S.D F4, 0(R1)
DADDUI R1, R1, -8
BNE R1, R3, Loop
F2はスカラーSを保持するレジスタと仮定する、R1は[Xのアドレスを保持します10]であり、R3は、i == 0のときループを終了するように予め計算される。
a)取られた/されなかったことの代替が実行する予測子はどのようにして発生しますか?
----ループは2回しか実行されないので、代替予測はこのケース(?)のパフォーマンスを1つのミス予測で犠牲にすると思います。
b)1ビットの分岐予測バッファが性能を向上させるか(aと比較して)?最初の予測が「取られていない」と仮定し、他のブランチはこのエントリにマップしません。
----最初の予測が「行われない」と仮定し、予測が間違っている場合は1ビットの予測子がビットを反転させると仮定します。だからそれはNT/T/Tになります。それは問題a)と同じ性能を持っていますか? 1つのミス予測。
c)2ビット分岐予測バッファが性能を向上させるか(aと比べて)?最初の予測が「取られていない」と仮定し、他のブランチはこのエントリにマップしません。
---- "not taken"で始まる2ビットの分岐予測。私が覚えているように、2回失敗した後の2ビット予測変化。この予測はNT/NT/T/Tのようになります。したがって、その性能はa)と比較して悪化する。 1ミス予測
これは私の問題を解決するための試みでした。私の答えが正解/間違っていれば誰でも私に説明できますか?ありがとう。
ああ、私はその内側ループが間違って理解していた。私は今参照してください。私の1ビット分岐予測と2ビット予測の理解は、B)とC)に対して正しいですか? (間違ったループを無視して) –
そして質問a)については。それがNTとして始まると仮定すると、その支店は取られると思われますが、システムは戻ってそのループを取ったのですか?それは、内部ループブランチを実行するのに2倍の時間がかかることを意味しますか? –
@NguyenTran:CPUは常に正しいプログラム順で命令を実行するために「表示されます」。誤予測が検出されるとすぐに、間違って推測されたすべての作業は破棄され、ブランチの正しい側から実行が開始されます。誤予測は通常、正しく予測された分岐よりも何倍も多くのサイクルを要します。 (例えば、長いパイプラインの場合は15サイクル対1サイクル)。 –