【コンピュータシステム】外れてもいいから先にやる!「分岐予測と投機実行」|情報処理問題1000本ノック
プログラムの中には多くの「もし~なら(if文など)」という分岐が存在します。CPUがその結果を待たずに「次はおそらくこうなるだろう」と予測して突き進む、驚きの高速化技術を攻略しましょう。
1. 問題:パイプラインを止めない高度な推測技術
【 問題 】 CPUがプログラムの実行中、条件分岐命令の結果が確定する前に、過去の履歴などから分岐先を予測する技術を[ A ]、その予測に基づいてあらかじめ後続の命令を実行しておくことを[ B ]と呼びます。空欄に入る適切な組み合わせはどれでしょうか?
ア、A:キャッシュメモリ B:割込み処理
イ、A:分岐予測 B:投機実行
ウ、A:スーパースカラ B:アウトオブオーダ
エ、A:レジスタ B:フェッチ
2. 正解:プロセッサアーキテクチャに関する正解
正解: イ、A:分岐予測 B:投機実行
3. 解説:不確実な未来に賭けるスピードアップ
パイプライン処理は、分岐命令に弱いです。結果が出るまで待っていると、その間パイプラインが空っぽ(ストール)になってしまうため、CPUは「賭け」に出ます。
【図解:予測と実行のサイクル】
■ 分岐予測(Branch Prediction)
・「このループはさっきから何度も繰り返しているから、次もまた繰り返すはずだ」といった統計的なデータ(分岐履歴)から、次に行くべき道を予想します。
■ 投機実行(Speculative Execution)
・分岐予測で「こっちだろう」と決めた先の命令を、結果が出る前に実行してしまいます。
・予測が当たれば、そのまま結果を採用できるので爆速になります。
・予測が外れれば、実行した結果を捨てて、正しい道からやり直します。
■ 分岐予測(Branch Prediction)
・「このループはさっきから何度も繰り返しているから、次もまた繰り返すはずだ」といった統計的なデータ(分岐履歴)から、次に行くべき道を予想します。
■ 投機実行(Speculative Execution)
・分岐予測で「こっちだろう」と決めた先の命令を、結果が出る前に実行してしまいます。
・予測が当たれば、そのまま結果を採用できるので爆速になります。
・予測が外れれば、実行した結果を捨てて、正しい道からやり直します。
[ なぜ「投機」と呼ぶのか ]
★ 資産運用の「投機(リスクを取ってリターンを狙う)」と同じ意味です。外れたときのリスク(やり直しのコスト)よりも、当たったときのリターン(高速化)の方が大きいと判断して実行するため、こう呼ばれます。
★ 資産運用の「投機(リスクを取ってリターンを狙う)」と同じ意味です。外れたときのリスク(やり直しのコスト)よりも、当たったときのリターン(高速化)の方が大きいと判断して実行するため、こう呼ばれます。
1. 理解のコツ: 「信号が青になるのを確信して、ブレーキから足を離して発進の準備をする」ようなものです。実際に青になればスムーズに加速できますが、万が一赤のままならブレーキを踏み直す必要がある、というイメージです。
2. 試験対策の視点: 「パイプラインハザードの解消法」としてセットで問われます。特に現代の高性能CPUでは、予測的中率は90%を優に超えており、この技術なしでは現在の処理能力は実現できません。
4. まとめ
「分岐を予測し、先に計算しておく」。これが分岐予測と投機実行です。CPUの内部で行われている、高度な「予測と挑戦」がコンピュータの快適さを支えています。
PR