コンピュータアーキテクチャでは、
(分岐)予測と推測の違いは何ですか?
これらは非常に似ているように見えますが、微妙な違いがあると思います。
コンピュータアーキテクチャでは、
(分岐)予測と推測の違いは何ですか?
これらは非常に似ているように見えますが、微妙な違いがあると思います。
分岐予測はプロセッサによって実行され、条件付きジャンプの後に実行が続行される場所を決定して、メモリから次の命令を読み取れるようにします。
投機的実行はさらに一歩進んで、次の命令を実行した結果がどうなるかを決定します。分岐予測が正しければ結果が使用され、そうでない場合は破棄されます。
コードに実際の条件分岐がない場合でも、投機的実行を適用できることに注意してください。プロセッサは、通常は連続して実行されるいくつかの命令から結果を判断できますが、たとえば算術オーバーフロー割り込みによって実行を停止することができます。
投機的に何かをしたい場合は、どのパスを推測するかを正確に予測することで、それが役立つ可能性が高くなります。
場合によっては、予測は簡単です(たとえば、ロード/ストアがセグメンテーション違反にならないことを予測します)。他の場合、それは難しいです(分岐予測)。
いずれの場合も、例外が発生した場合は、投機的な計算を元に戻す/破棄できる必要があります。
分岐の両方向から投機的に命令を実行し、後で正しいパスであることが判明した行からの結果のみを保持することにより、予測なしで推測することが可能です。
現在のハードウェアはこれをブランチに使用していませんが、x86命令の並列デコードなどの場合、同じ種類のことがはるかに小さいローカルスケールで発生します。デコーダーは、考えられるすべての命令境界でデコードを開始し、前の命令のデコードによって長さが決定されると、どの開始位置が正しいかを確認します。
さて、私はプログラミングとコンピュータサイエンスの初心者ですが、これが私の結論です。これらの「技術」の両方の目的は、パイプラインを満たした状態に保ち、リソースの浪費を防ぐことです。プロセッサが条件付きテスト命令を実行する場合、通常、次の命令に進む前に、条件がテストされるまで待機することが期待されます。
投機的実行では、パイプラインストールやリソースの損傷ではなく、条件付きテストがTRUEであることを「期待して」命令を実行します。それ以外の場合は、結果を破棄するだけです。
分岐予測では、さらに一歩進んで、条件付きテストの過去の結果に基づいて、条件がTRUEになるかどうかを予測します(プログラムが分岐する方向を予測します)。
それが物事をクリアすることを願っています。ここから情報を入手し、今学期に受講しているコースを受講しました。 http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html