投機的実行 【speculative execution】
概要
投機的実行(speculative execution)とは、コンピュータの処理を高速化する手法の一つで、将来必要になるかもしれない処理を、(必要になると確定する前に)あらかじめ行い結果を用意しておくこと。広義には、ソフトウェアが少し先に必要としそうなメモリやストレージ、ネットワーク上のデータを先に読み込んでおくプリフェッチ(プリロード)などを含むが、狭義にはマイクロプロセッサがプログラムを実行する際に分岐先の命令を先行して実行し始める手法を指す。
現代的なプロセッサはパイプライン機構を用いて複数の命令を(実行段階をずらして)並行に実行することができるが、途中に条件分岐命令が含まれると、その命令を実行し終えて分岐先(正確には分岐するかしないか)が確定するまで次の命令がどれになるのか知ることができない。
このような場合に、どちらに分岐するのかを予測(分岐予測)し、予測先の命令を先行してパイプラインに投入して実行し始めてしまうことを投機的実行という。予測が当たれば分岐先の確定を待つより高速に処理を継続できるが、外れた場合は実行途中の命令を破棄して正しい分岐先の命令の実行をやり直す。外れても確定を待つのと同じであるため、投機的実行をしないよりは全体として高速になる。
(2018.11.30更新)