0

これら 2 つの方法は、Linux カーネル コード内で広く使用されているようです。分岐予測の基礎は知っていますが、これら 2 つの関数が if() ステートメントの操作にどのように影響するかを知りたいです。また、それらは CPU 命令パイプラインのレベルで機能しますか? それとも、カーネルコードレベルでの抽象化のレベルがはるかに高いですか?

Linux カーネルの初心者である私は、これら 2 つの方法の内部の仕組みを知りたいと思っています。ありがとう!

4

1 に答える 1

0

一部の (マイクロ) アーキテクチャでは、コンパイラが命令にエンコードして、分岐が行われる可能性があるかどうかを CPU 分岐予測ユニットに伝えることができる分岐ヒントがあります。

他のアーキテクチャでは、分岐予測ユニットの静的部分は十分に文書化されており、それを使用してより高速なコードを生成できます。たとえば、最近のほとんどの x86 では、前方分岐は行われないと静的に予測されますが、後方分岐は行われると予測されます (より高速なループを可能にするため)。

いずれにせよ、予測キャッシュ フェッチは速度にとっておそらくより重要です。それは主にプログラマー次第ですが、命令キャッシングの場合、プログラムのどの部分が実行される可能性が高いかをコンパイラーが認識し、その部分をキャッシュに収まるように十分に小さく保つと役立ちます。

于 2014-01-26T22:31:36.480 に答える