エンベデッドシステムスペシャリスト 2021年 午前2 問01
問題文
パイプラインハザード対策に関する記述のうち、アウトオブオーダ実行方式を用いたものはどれか。
選択肢
ア:演算に必要なデータがそろうまで実行が待たされている命令によって、後続の命令の実行が待たされることを防ぐために、既にデータがそろっている後続の命令があれば、それを先に実行する。(正解)
イ:条件分岐命令の判定結果が分かるまで分岐後の命令実行が待たされることを防ぐために、分岐する確率が高い方の命令を先読みして実行する。
ウ:前の命令の演算結果がレジスタに書き込まれるまで次の命令の実行が待たされることを防ぐために、プロセッサ内にバイパス経路を設け、演算結果を演算器に直接入力して次の命令を実行する。
エ:レジスタへのアクセスが競合して後続の命令の実行が待たされることを防ぐために、クロックサイクルを細分化し、サイクル前半を書込み、後半を読出しとすることによって競合なく命令を実行する。
🔒 解説は解答すると表示されます
アウトオブオーダ実行【午前2解説】
正解の理由
正解はアです。
アウトオブオーダ実行方式は、命令をプログラムに書かれた順番どおりに実行するのではなく、実行に必要なデータがそろった命令から先に実行する方式です。
アでは、先行命令がデータ待ちで実行できない場合に、必要なデータがそろっている後続命令を先に実行します。これは、待ち状態の命令が後続命令を止めてしまうことを防ぐアウトオブオーダ実行の説明です。
解法ステップ
- 問題が問う対策は「アウトオブオーダ実行」だと確認します。
- 命令の実行順を変える対策かどうかに注目します。
- 「データがそろった後続命令を先に実行する」と述べているアを選びます。
- 分岐予測やバイパス経路など、別のハザード対策と区別します。
選択肢別の誤答解説
- ア:データ待ちの命令を飛ばし、実行可能な後続命令を先に処理します。アウトオブオーダ実行方式の説明です。
- イ:分岐結果が確定する前に分岐先の命令を予測して実行する、分岐予測・投機実行の説明です。
- ウ:演算結果をレジスタへの書込みを待たずに次の演算器へ渡す、**バイパス(フォワーディング)**の説明です。
- エ:レジスタの書込みと読出しをクロックサイクルの前半・後半に分ける方法です。レジスタアクセスの競合を避ける対策であり、命令の実行順を入れ替える方式ではありません。
よくある誤解
- 後続命令を先に実行することと、命令の並べ替えそのものを混同することがあります。アウトオブオーダ実行では、実行順は変わっても、プログラム上の依存関係を壊してよいわけではありません。
- 分岐先を先読みして実行することもアウトオブオーダ実行だと思う場合があります。これは分岐予測や投機実行に分類される対策です。
- 演算結果を早く次へ渡すことをアウトオブオーダ実行と考える場合があります。これはバイパス(フォワーディング)によるデータハザード対策です。
補足コラム
パイプラインハザードは、命令を重ねて実行する際に、処理の停滞や競合が起きる問題です。代表的な対策は、原因ごとに整理すると覚えやすくなります。
- データ待ちの後続命令を先に実行する:アウトオブオーダ実行
- 分岐先を予測して先読みする:分岐予測・投機実行
- 演算結果を直接次の処理へ渡す:バイパス(フォワーディング)
- レジスタの読出し・書込み時刻を分ける:クロックサイクルの細分化
FAQ
アウトオブオーダ実行では、プログラムの命令順が変わるのですか?
実行する順番が変わることがあります。ただし、命令間の依存関係を守り、プログラムとして正しい結果になるよう制御されます。
実行する順番が変わることがあります。ただし、命令間の依存関係を守り、プログラムとして正しい結果になるよう制御されます。
アウトオブオーダ実行と投機実行は同じですか?
同じではありません。アウトオブオーダ実行は、実行可能な命令を順序にこだわらず処理する方式です。投機実行は、分岐結果などを予測して、結果が確定する前に処理を進める方式です。
同じではありません。アウトオブオーダ実行は、実行可能な命令を順序にこだわらず処理する方式です。投機実行は、分岐結果などを予測して、結果が確定する前に処理を進める方式です。
関連キーワード: パイプラインハザード、アウトオブオーダ実行、分岐予測、投機実行、バイパス、フォワーディング

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

