... | ... | @@ -73,7 +73,7 @@ |
|
|
---
|
|
|
[^1]: 無条件分岐を常に条件が成立する条件分岐であるとみなして、条件分岐と共通の方法で予測することも可能だが、やや無駄である。
|
|
|
[^2]: キャッシュメモリとの混同に注意。キャッシュとは、データのコピーを持つことで局所性を利用して高速化する技術一般のことである。キャッシュメモリと同様、高速小容量、タグがある、置換が行われる、局所性を利用している、などの特徴を持つ。しかし、何か具体的な「元データ」のようなものがあってそれのコピーを保存しているとは限らない。計算結果を再利用に備えて保存しておくというタイプのキャッシュも存在する。分岐先バッファもそのタイプで、デコード・実行した結果をメモしてあるだけである。
|
|
|
[^3]: 近年の商用プロセッサでは、条件分岐の場合は条件が成立したときのみ分岐先バッファに書き込むらしい(論文:https://ieeexplore.ieee.org/document/9408197 )。絶対に成立しない分岐命令 (例えば配列外アクセスであるかを検査する分岐命令など。never-taken branch)のために分岐先バッファの容量が使われることがなるという利益がある。
|
|
|
[^3]: 近年の商用プロセッサでは、条件分岐の場合は条件が成立したときのみ分岐先バッファに書き込むらしい(論文:https://ieeexplore.ieee.org/document/9408197 )。絶対に成立しない分岐命令 (例えば配列外アクセスであるかを検査する分岐命令など。never-taken branch)のために分岐先バッファの容量が使われることがなくなるという利益がある。
|
|
|
[^4]: 分岐先バッファはキャッシュだが、タグを全部は持たないというハードウェア容量ケチり最適化がある。その最適化をした場合、分岐先バッファは嘘を言うことがある。予測を間違えてもどうせ分岐予測失敗対策のハードウェアが存在するので問題ないという思想である。そもそも、プログラムが変化すれば「このPCの命令は以前分岐命令だったから、今回もそのはず」というのは成り立たないから、分岐先バッファを全面的に信用することはできない。
|
|
|
[^5]: 商用プロセッサでは飛び先が動的に変化する分岐命令用の分岐予測器(間接分岐予測器)が使われることもある。またリターン命令はコール命令がフェッチされたのを見張っておけば十分予測可能である(リターンアドレススタックと呼ばれる技術。その場合、分岐先バッファに「コール命令か」「リターン命令か」フラグも入れたほうが良い)。
|
|
|
[^6]: 特に直列化する理由はないので、分岐先バッファに問い合わせるのと並列に分岐方向予測器にも問い合わせておけば遅延が減る。分岐先バッファに問い合わせた結果条件分岐でないと判明した場合は、分岐方向予測器の答えを単に捨てればよい。
|
... | ... | |