CPUの命令実行
投機実行と分岐予測について書いた記事にいくつかコメントが付いたので補足します。
コンパイラが生成した機械語の命令をCPUが逐次実行しますが、機械語の命令に依存性がない場合、例えば次のような三行の命令列の場合、一行目の結果を待つことなく二行目を実行できます。三行目は一行目と二行目の結果を使いますので、三行目の実行はこれらの結果が終わるのを待ちます。
ADD AX, 1 // AXに1を加算
ADD BX, 1 // BXに1を加算
ADD AX, BX // AXにBXを加算
このような場合、モダンなCPUでは一行目と二行目を同時に実行するよう、マイクロコードを合成します。このような処理をOut of order実行と呼びますが、この処理を行うために各レジスタの依存関係を解析しています。現在のコンパイラではさらにこのように依存性のない命令の組み合わせになるよう機械語を生成し、Out of order実行の比率を可能な限り上げるような最適化も行われているのです。