あなたは被害者の分岐予測かもしれません!

背景

長さN = 1000000、従来の配列a [N]、0〜255の範囲の各要素。128未満のすべての要素を必要とする0に設定され、要素セット128は、1以上であります

反復処理するようなコードを書くのは簡単です

for (i = 0; i < N; i++) {
    if (a[i] < 128) {
        a[i] = 0;
    } else {
        a[i] = 1;
    }
}

無秩序と秩序ある配列、このコードの実行速度があなたに影響を与えます、問題を考えてみて?一見すると、それはしていないようですが、実際の実行時間は3〜4回異なる場合があります。

なぜ要素を決定するために配列を介してです。スピードの秩序配列を横断して数倍速く不規則な配列、それ以外のだろうか?

あなたは被害者の分岐予測かもしれません!

列車

列車の動きを作るために、左ジョイスティックまたは右を切り替えるには、管理者のニーズを列車のターンオフを考えてみましょう。
しかし、管理者は、列車が前方に移動するためにどの方向に知って来てほしくありません。2つの方法があります。

1は、列車が交差点に到達し停止し、それは行く手管理者、レバートグル管理者、再起動電車を伝えたいと考えています。それは5分かかります

この場合、電車は決して間違った方向の利点は、欠点は、各列車が停止して再起動する必要があるということです

2列車がターンオフに到達する前に、管理者がランダムな方向を推測します。
あなたはそれを推測した場合(2-1)は、電車を遅くする必要、直接のピアは、0分かかるん
あなたは間違って推測した場合、列車の運転手が逆転Mamalielie、右方向に向かって再う(2-2)、10を取りました分

2極端なケースを考えてみましょう:管理者が常に正しい、その後、列車のトラフィック効率が非常に高くなるだろうと思い
、管理者は常に間違っている:列車のカウンターパート効率が異常に低くなった(これも実行悪いです)

通常の状況:管理者が常に50%の確率や推測間違って、時間がかかり、少し異なるスキームを持っています。
管理者は、電車夜四時など、何かほんの少しの要約と反射を行う、と19回を行くために、左、右、左の推測に、我々は推測する確率を高めることができたら、歩きました

現代のCPU

近代的なCPUの列車上記同様の例。列車は、管理者はCPUで、コマンドです。以下のような場合は、分岐命令の場合、CPUは分岐が行く事前に知っていません。
現代のCPUは、支店の各コマンドカードの明細書のニーズ場合は条件がダウンし、その後完全に決定することを待って、命令を処理するための多段パイプラインを持っている傾向があり、効率が低くなります

コードは、事前に、ブランチに推測した結果を来て、ダウン実行されなかったとき、CPUは最初の分岐を予測するためになりますので、

あなたが正しいと思う場合は、継続するために障害物は、彼らが間違っていると思う場合は、再処理、すべての命令からきれいに入れ、ありません。

イテレータの分岐予測器

それは完全にランダムであれば、単に例に列車のバックは、管理者が左または右に行く電車を予測し、そう、保存するためにあまりやっていない、彼は推測し、50%の確率で、間違って50%の可能性があります時間。

比較的単純なアイデアは、電車の中で残っている場合、その後の推測も残したということです。

この戦略を使用して、株式はより多くの連続列車よりも、アクセス速度が非常に速くなり、同じ方向に向かっています。

他のより高度なアルゴリズムは、多くの場合、このアイデアを保持します。

コードへ戻ります

配列は、事前の一種であるのであれば、分岐予測器は、非常に良い仕事することができ

アレイ123 .... .... 126,127,128,129,130
推測TTT ..... TTTFF ....
実際のTTT ..... TTFFF ....

分岐予測器の間違った一度だけ!(電車は逆に一度、他の回は、それはすぐに渡すことができます)

配列が乱れた単語である場合

アレイ11713371401899 ....
推測TTTFTFF
実際TTFTFFT

だから、推測するチャンスは低くなる(より多くの列車が逆転必要です)

もちろん、反復分岐予測が最も単純なモデルで、実際の予測モデルは、より高いレートの推測を確保するために複雑になります

次の記事では、高度なプログラミングのスキルの犠牲者によって分岐予測になることを回避する方法を紹介します

おすすめ

転載: www.cnblogs.com/velscode/p/12585171.html