2016-05-18 9 views
0

私はコンピュータアーキテクチャに関する本を読んでいます。この章では、分岐予測について説明します。 私はそれの周りに私の頭を包み込むのに苦労しているこの小さな練習があります。 分岐予測とパフォーマンス

ループ

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ミス予測

これは私の問題を解決するための試みでした。私の答えが正解/間違っていれば誰でも私に説明できますか?ありがとう。

答えて

0

ループのみ2回

を実行しているので、あなたは条件付きアウターループを意味し、1あなたはASMを示しませんでしたか?この混乱があなたの主な問題だった場合に備えて、私は今質問の一部に答えるだけです。これがあなたが混乱していたことでない場合は、コメントを残してください。 9xT、1xNT、9xT、1xNT:


内側ループの底部の条件分岐は、このパターで、20回実行されます。交互の予測変数は、間違って開始するか間違っているかによって時間の約50%、+/- 20%が間違っています。

これは2回だけ実行される外側のループです:T、NT。内部ループ全体が2回実行されます。

外部ループ分岐は、TまたはNTで交互に予測が開始されたかどうかに応じて完全にまたは非常に予測される。

+0

ああ、私はその内側ループが間違って理解していた。私は今参照してください。私の1ビット分岐予測と2ビット予測の理解は、B)とC)に対して正しいですか? (間違ったループを無視して) –

+0

そして質問a)については。それがNTとして始まると仮定すると、その支店は取られると思われますが、システムは戻ってそのループを取ったのですか?それは、内部ループブランチを実行するのに2倍の時間がかかることを意味しますか? –

+0

@NguyenTran:CPUは常に正しいプログラム順で命令を実行するために「表示されます」。誤予測が検出されるとすぐに、間違って推測されたすべての作業は破棄され、ブランチの正しい側から実行が開始されます。誤予測は通常、正しく予測された分岐よりも何倍も多くのサイクルを要します。 (例えば、長いパイプラインの場合は15サイクル対1サイクル)。 –