※2024/5/14更新
※ 本記事では、基本情報技術者試験の対策として私が勉強したことを備忘録的にまとめておきたいと思います。
少しでも参考になれば嬉しいです。
はじめに
さて今回は、基本情報対策として、CPUの投機実行についてまとめます。
投機??機械を投げる??字面だけでは分かりにくいですよね・・・。
実はこの処理、基本情報でとても大切なパイプライン処理や分岐予測と関係しているワードになります。
どんなことをしているのか、しっかりと図をイメージして覚えるようにしましょう!
ちなみに私はこの参考書を使って勉強してました。
漫画形式で読みやすく、分かりやすい内容になっているため、無理なく学習を進められると思います。
過去問を解きまくり、不明点があれば参考書で知識を補う、このサイクルで試験対策するのが私のオススメです!
最新版はこちらです。
少し内容が異なる部分もあるかもしれませんが、大まかには変わらないはずですので、安心して下さい。
投機実行とは
CPUの投機実行とは、分岐処理において、分岐先を予測し、前もって分岐先の処理を実行していく方式です。
前もって実行しておくことが投機実行です。予め分岐を予測して“機”械(CPU)にタスクを“投”げるということですね。
言葉だけでは分かりにくいと思いますので、例を考えましょう。

例として、ある処理Aと、ある処理Aの結果を受けて動作する分岐処理B・分岐処理Cを考えましょう。
簡単に、
- 処理Aの結果が0 → 分岐処理Bを実行
- 処理Aの結果が1 → 分岐処理Cを実行
とします。
基本的な動作としては、処理Aの結果を待ち、その結果を受けて分岐処理B or 分岐処理Cを実行するのが一般的ですよね。
しかしここで、あらかじめ処理Aの結果が0になる可能性が高いと分かっていたらどうでしょうか。すなわち、分岐処理Bが実行される可能性が高いと分かっていた場合です。

その場合、処理Aと並行して分岐処理Bを実行しておきます。
仮にこの予想が当たっていた場合、処理Aの結果を待って、分岐処理Bを実行するという無駄な処理時間を削減することができます。
そう、いちいち結果を待たなくていい分、処理を早く終わらせることが可能になるわけです。
この予測精度が高ければ高いほど、先読み先読みで処理を実行できるので、全体の処理スピードはどんどん早くなります。
このように、分岐先を予測して前もって実行していく方式が投機実行になります。
ただしこれは、あくまでも予測です。外れることもあります。
そのような場合でも、特に問題はありません。
その結果を受けて予測が外れていたら、正しい処理を行えばいいだけなのです。
本来実行すべき処理をただ行うだけなので、外した場合はより長い時間がかかってしまうなんてリスクは全くありません。
本来実行にかかる時間が早くなるか、そのままか、たったこれだけなのです。