問題
パイプラインの性能を向上させるための技法の一つで、分岐条件の結果が決定する前に、分岐先を予測して命令を実行するものはどれか。
ア アウトオブオーダー実行 イ 遅延分岐 ウ 投機実行 エ レジスタリネーミング
解説
アウトオブオーダー実行
アウトオブオーダー実行とは、プログラムに記述された命令の順番に関係なく、処理に必要なデータが揃った命令から実行する仕組みです。
通常、CPUはプログラムに記述された命令を順番に実行します。しかし、この方法では、ある命令の実行に必要なデータがまだメモリから読み込まれていないために、CPUがアイドル状態になることがあります。
アウトオブオーダー実行では、このようなアイドル状態を回避するために、処理に必要なデータが揃った命令から実行します。これにより、CPUの稼働率を向上させ、処理速度を高速化することができます。
アウトオブオーダー実行には、以下の2つの要素があります。
- 命令の発行
CPUは、命令を順番にメモリから読み込みます。読み込んだ命令は、命令発行ユニットによって実行可能かどうかがチェックされます。実行可能であれば、命令発行ユニットによって命令実行ユニットに送られます。
- 命令の実行
命令実行ユニットは、命令を順番に実行します。ただし、依存関係のない命令は、順番に関係なく実行することができます。
アウトオブオーダー実行は、CPUの高速化に欠かせない技術です。近年のCPUでは、アウトオブオーダー実行が標準的に採用されています。
アウトオブオーダー実行のメリットは、以下のとおりです。
- 処理速度の高速化
- アイドル状態の回避
- メモリアクセスの効率化
アウトオーダー実行のデメリットは、以下のとおりです。
- 誤ったデータの実行による不具合の発生
- 複雑なハードウェアとソフトウェアが必要
アウトオーダー実行は、CPUの高速化のための重要な技術ですが、誤ったデータの実行による不具合の発生など、デメリットもあります。アウトオーダー実行を採用する際には、これらのデメリットを理解した上で、適切に利用する必要があります。
遅延分岐
遅延分岐とは、分岐命令の後に、分岐先に関係なく実行する命令を挿入する技術です。
通常、CPUは分岐命令を実行すると、分岐先の命令をパイプラインに読み込みます。しかし、分岐先の命令を実行する前に、分岐が発生するかどうかが確定しません。このため、分岐先の命令を実行するために必要なデータが揃っていないと、CPUはアイドル状態になることがあります。
遅延分岐では、分岐命令の後に、分岐先に関係なく実行する命令を挿入します。この命令は、分岐先の命令を実行するために必要なデータが揃っているため、CPUはアイドル状態になることなく、処理を継続することができます。
遅延分岐のメリットは、以下のとおりです。
- 分岐ハザードの発生を抑制できる
- アイドル状態を回避できる
- 処理速度を向上できる
遅延分岐のデメリットは、以下のとおりです。
- 遅延スロットを無駄にしてしまう可能性がある
- コードの複雑さが増加する
遅延分岐は、分岐ハザードの発生を抑制し、処理速度を向上させるための有効な技術です。ただし、遅延スロットを無駄にしてしまう可能性があるため、プログラムの特性に合わせて適切に利用する必要があります。
遅延分岐の具体的な仕組みは、以下のとおりです。
- 分岐命令の実行
CPUは、分岐命令を実行します。このとき、分岐先の命令をパイプラインに読み込みます。
- 分岐先の命令の実行
分岐命令の実行が完了すると、分岐先の命令の実行を開始します。
- 分岐ハザードの検出
分岐先の命令の実行中に、分岐ハザードが検出されると、分岐先の命令の実行をキャンセルします。
- 遅延スロットの実行
分岐ハザードが検出されると、遅延スロットの命令の実行を開始します。
遅延分岐は、主にRISCアーキテクチャで採用されています。近年のCPUでは、アウトオーダー実行と遅延分岐を組み合わせて、分岐ハザードの発生をさらに抑制する技術が採用されています。
投機実行
投機実行とは、CPUがプログラムを実行する際に、分岐先の命令を先行して実行し始める手法です。
通常、CPUは分岐命令を実行すると、分岐先の命令をパイプラインに読み込みます。しかし、分岐先の命令を実行する前に、分岐が発生するかどうかが確定しません。このため、分岐先の命令を実行するために必要なデータが揃っていないと、CPUはアイドル状態になることがあります。
投機実行では、分岐先の命令を先行して実行することで、分岐ハザードの発生を抑制し、処理速度を向上させることができます。
投機実行には、以下の2つの要素があります。
- 分岐予測
CPUは、過去の実行履歴や条件式の値などに基づいて、分岐が発生するかどうかを予測します。
- 投機実行
分岐予測で分岐が発生する可能性が高いと判断された場合、CPUは分岐先の命令を先行して実行します。
投機実行のメリットは、以下のとおりです。
- 分岐ハザードの発生を抑制できる
- 処理速度を向上できる
投機実行のデメリットは、以下のとおりです。
- 誤ったデータの実行による不具合の発生
- 複雑なハードウェアとソフトウェアが必要
投機実行は、CPUの高速化のための重要な技術ですが、誤ったデータの実行による不具合の発生など、デメリットもあります。投機実行を採用する際には、これらのデメリットを理解した上で、適切に利用する必要があります。
投機実行の具体的な仕組みは、以下のとおりです。
- 分岐命令の実行
CPUは、分岐命令を実行します。このとき、分岐先の命令をパイプラインに読み込みます。
- 分岐予測
分岐予測ユニットは、過去の実行履歴や条件式の値などに基づいて、分岐が発生するかどうかを予測します。
- 投機実行
分岐予測で分岐が発生する可能性が高いと判断された場合、CPUは分岐先の命令を先行して実行します。
- 分岐ハザードの検出
分岐先の命令の実行中に、分岐ハザードが検出されると、分岐先の命令の実行をキャンセルします。
- 誤ったデータの実行の検出
分岐先の命令の実行が完了すると、分岐ハザードが検出されなかった場合、CPUは分岐先の命令の実行結果を検証します。
投機実行は、現代のCPUでは標準的に採用されている技術です。近年では、分岐予測の精度が向上し、誤ったデータの実行による不具合の発生が減少しています。
レジスタリネーミング
レジスタリネーミングとは、コンピュータのプログラム内でレジスタを再利用しているために不必要な順序依存性が生じているのを、より多くの実在するレジスタを利用して再利用されているレジスタに割り当て、依存を無くす技術です。
通常、CPUはプログラムに記述された命令を順番に実行します。しかし、プログラムによっては、同じレジスタを複数の命令で再利用している場合があります。このような場合、ある命令の実行が完了する前に、別の命令が同じレジスタに書き込むと、順序依存が発生します。
レジスタリネーミングでは、論理レジスタを物理レジスタにマッピングするテーブルを用意します。命令の実行時に、論理レジスタ番号を物理レジスタ番号に置き換えて、順序依存を解消します。
レジスタリネーミングのメリットは、以下のとおりです。
- アウトオーダー実行の効率化
- 分岐ハザードの発生の抑制
- 命令レベルの並列性の向上
レジスタリネーミングのデメリットは、以下のとおりです。
- ハードウェアの複雑化
- ソフトウェアの複雑化
レジスタリネーミングは、CPUの高速化に欠かせない技術です。近年のCPUでは、レジスタリネーミングが標準的に採用されています。
レジスタリネーミングの具体的な仕組みは、以下のとおりです。
- 論理レジスタの割り当て
CPUは、命令を実行する前に、論理レジスタに物理レジスタを割り当てます。
- 命令の実行
CPUは、論理レジスタ番号に基づいて、物理レジスタにアクセスします。
- 物理レジスタの割り当て解除
命令の実行が完了すると、物理レジスタの割り当てを解除します。
レジスタリネーミングは、アウトオーダー実行と組み合わせることで、さらに効果を発揮します。アウトオーダー実行では、命令の実行順序がプログラム順と異なる場合があります。この場合、レジスタリネーミングによって、順序依存を解消し、より多くの命令を並列に実行することができます。
また、レジスタリネーミングは、分岐ハザードの発生を抑制するためにも有効です。分岐ハザードが発生した場合、CPUは分岐先の命令の実行をキャンセルする必要があります。このとき、レジスタリネーミングによって、分岐先の命令で使用されるレジスタを別のレジスタに割り当てることで、分岐ハザードの影響範囲を小さくすることができます。
というわけで今回の問題を解いてみましょう。
「分岐条件の結果が決定する前に、分岐先を予測して命令を実行する」技法なので、正解は「ウ」です。