2

'SimpleScalar'の2ビット分岐予測を8ビット分岐予測に変換するプロジェクトを取得しました。つまり、2ビットの予測子のソースコードを「SimpleScalar」から変更して、8ビットの予測子のように機能させる必要があります。

予測子がどのように機能するかは知っていますが、c言語を使用して分岐予測子を実装する方法がわかりません。8ビットのbrachpredictorの実装をお勧めします。

4

2 に答える 2

0

2レベルの適応予測の実装でSimpleScalarの「2ビット分岐予測」を間違えなかった場合、とにかく「8ビット分岐予測」の意味を理解できるかどうかはわかりません。分岐予測の概念は非常に有望です。最先端の分岐予測子のほとんどは、パーセプトロン予測子を使用しています。https://github.com/sumitdhoble/Branch-Predictionでソースコードとして入手できるPerceptronsを使用した動的分岐予測に基づくC言語の実装を確認すると便利な場合があります。

于 2012-11-20T21:46:36.203 に答える
0

このスライドのセットは、2ビットの分岐予測をうまく説明しています。これを8ビット(私が推測する)に拡張することは、何が起こっているかを決定するために、2ビットの場合の4ではなく256状態のステートマシンが許可されることを意味します。論理的な方法で4つの状態のケースを拡張すると、分岐が発生すると予測される128の状態と、分岐が発生しない128の状態が存在します...一種のヒステリシス。

プロセッサエミュレータまたはシミュレータ内でプログラミングしていると思います。あなたは言わなかった。Cコードは、最後に行われた128の決定を追跡するだけでよく、128の推測が間違っていた場合にのみ代替予測に切り替えます。

static int stickiness = 128;          // assume 128 states of knowledge that the default branch will occur
static int predicted_branch = 1;      // default prediction is (say) branch taken

if (simulated_branch_condition_is_true != predicted_branch) {
  if (--stickiness <= 0) {
    predicted_branch = simulated_branch_condition_is_true;
    stickiness = 128;
  }
}
// Now simulate the predicted_branch. If it's wrong, we will later simulate a pipeline, flush etc.

これ以上の情報がなければ、これが私にできる最善のことです。

于 2012-11-21T04:48:19.653 に答える