アウト オブ オーダー実行とは

コンピュータは、CPU よりも複雑な部分を持たない複雑な機械です。基本的な概要レベルでは、CPU は比較的単純であるように思われます。一連のコマンドを受け取って処理し、データを出力します。ただし、これは最新の CPU の実際の動作とはほとんど似ていません。

サブスカラーからスーパースカラー

初期の CPU はまさにあなたの予想どおりでした。彼らは、与えられた順序で個別に指示を受け、完了まで処理してから、次の指示に進みました。このタイプの CPU はサブスカラーで、1 クロック サイクルあたり 1 命令未満しか完了できませんでした。CPU 設計者は、命令の完了にはさまざまな段階があることを認識しました。これらの各段階では、異なるハードウェアが必要でした。これは、一度に 1 つの命令をシーケンス全体で実行すると、ハードウェアの一部がアイドル状態になることを意味していました。どのような種類のプロセッサでも、アイドル状態のハードウェアは役に立たないハードウェアです。

このアイドル状態のハードウェアを利用するために、パイプライン アプローチを使用するように CPU 設計が更新されました。これにより、各ステージのハードウェアがさらに分離されましたが、一連の命令によってそれらすべてを同時に利用できるようになりました。各命令がパイプラインを通過するのに数サイクルかかりましたが、全体のスループットは 1 サイクルあたり 1 命令でした。これにより、CPU がスカラーになりました。

より多くのことを実行できるようにするには、プロセッサーをスーパースカラーにする必要がありました。これを実現するために、複数の並列パイプラインが実装されました。

パイプラインにデータを供給し続ける

コンピューターの主なパフォーマンスの問題は、通常、メモリの待ち時間です。多くの命令はデータを操作するため、命令を実行するにはデータを使用できる必要があります。問題は、そのデータがすぐに利用できないために待つ必要がある場合はどうするかということです。伝統的に、答えは単に停止して利用可能になるのを待つことでした。これにより、パイプライン全体が空のままになり、何百もの CPU サイクルが発生する可能性があります。並列パイプラインの 2 つの命令がメモリを待機する必要がある場合、事態はさらに悪化します。CPU キャッシュ メモリはこの問題に対処するのに役立ちますが、それでも修正することはできません。それを解決するには、新しいパラダイムが必要でした。そのパラダイム シフトは、Out Of Order Execution または OOO でした。

パイプラインの最初のステージは、命令をデコードすることです。これは、何を行う必要があるかを検討し、操作に必要なデータが利用可能であることを確認することを意味します。OOO CPU では、デコードされた命令がキューに追加されます。それらはキューからのみ削除され、必要なデータが利用可能になったときに実際に処理されます。重要なことに、命令がキューに追加された順序は重要ではありません。初期の命令がデータを待っている場合、より新しい命令は、準備ができていればスキップできます。OOO プロセッサは、次の命令のキューと実行準備ができている命令に基づいて、処理することになっている命令を並べ替えることができます。

重要な依存関係

このプロセスは 2 つのことを前提としています。まず第一に、真の依存関係を確実に特定して処理できること。2 つ目は、誤った依存関係を確実に処理して特定できることです。違いはなんですか?本当の依存関係とは、OOO システムではまったく軽減できない依存関係です。最も簡単な例は、read-after-write です。データを書き込む命令と、そのデータを読み取る命令がある場合、それらの命令を並べ替える方法はありません。提示された順序で完了する必要があります。そうしないと、意味のないデータが得られます。

誤った依存関係は、別の巧妙なトリックで隠すことができるものです。書き込み後読み取りの例を見てみましょう。一見すると、データを読み取る前にデータを上書きすることはできないと思うかもしれません。しかし、物事はそれほど単純ではありません。新しいデータを書き込むことができる別の場所があり、古いデータが読み取られたら、新しいデータと古いデータを交換できるとしたらどうでしょうか? これはレジスタの名前変更のプロセスであり、OOO 処理にとって重要です。

通常、命令セットは、システムで使用される一連のアーキテクチャ レジスタを定義します。文字通り、他の人に話しかけることはできません。しかし、レジスターをオーバープロビジョニングするとどうなるでしょうか? ほとんどの場合、それらを非表示にし、まだ処理されていないはずのデータを保存するために使用し、タイムラインが再び正しいときに、非表示レジスタとアーキテクチャ レジスタのラベルを交換するだけです。いつでも、正確な量のアーキテクチャ レジスタがあり、常に同じ場所にあるとは限りません。現実世界の例えは、ホットデスクです。

結論

アウト オブ オーダー実行は、CPU が実行時に命令を動的に並べ替えることができる処理パラダイムです。これは、データが利用可能な最も初期に発行された命令に基づいて行われます。これは、パイプラインにロードされる命令が常に実行される準備ができており、データの待機中に遅延がないことを意味します。もちろん、データを待つ命令でキューがいっぱいにならないように十分長いキューが必要ですが、それは実装上の課題です。OOO の実行は、誤った依存関係を隠すためにレジスタの名前変更に依存しています。これらの命令が実際に順不同で実行されたとしても、コンピュータの残りの部分からこの事実を隠すような方法でレジスタの名前が変更されます。



Windows 10でドライバーWUDFRdのロードに失敗した場合の修正方法

Windows 10でドライバーWUDFRdのロードに失敗した場合の修正方法

コンピュータの起動中に、ドライバ WUDFRd をコンピュータに読み込めなかったことを示すエラー メッセージが表示されましたか?

NVIDIA GeForce Experienceエラーコード0x0003を修正する方法

NVIDIA GeForce Experienceエラーコード0x0003を修正する方法

デスクトップで NVIDIA GeForce experience エラー コード 0x0003 が発生していますか? 「はい」の場合は、ブログを読んで、このエラーをすばやく簡単に修正する方法を見つけてください。

Chromebook の電源が入らないのはなぜですか

Chromebook の電源が入らないのはなぜですか

「Chromebook の電源がオンにならないのはなぜですか?」という質問に対する答えを見つけます。この役立つガイドは Chromebook ユーザー向けです。

Fitbit Versa 4 の文字盤を変更する方法

Fitbit Versa 4 の文字盤を変更する方法

Fitbit Versa 4 の文字盤を無料で変更して、時計の外観を毎日変えることができます。それがいかに早くて簡単かを見てください。

ルンバが止まったり、くっついたり、向きを変えたりする – 修正

ルンバが止まったり、くっついたり、向きを変えたりする – 修正

ルンバ ロボット掃除機が停止し、固着し、回転し続ける問題を修正します。

Steam Deckのグラフィック設定を変更する方法

Steam Deckのグラフィック設定を変更する方法

Steam デッキは、堅牢で多彩なゲーム体験をすぐに提供します。ただし、ゲームを最適化し、可能な限り最高のパフォーマンスを保証するには、

分離ベースのセキュリティとは何ですか?

分離ベースのセキュリティとは何ですか?

サイバーセキュリティの世界でますます重要になっているトピック、つまり分離ベースのセキュリティを詳しく掘り下げる予定でした。このアプローチは、

Chromebook でオート クリッカーを使用する方法

Chromebook でオート クリッカーを使用する方法

今日は、Chromebook で繰り返しクリックするタスクを自動化できるツール、オート クリッカーについて詳しく説明します。このツールは時間を節約し、

SMPSとは何ですか?

SMPSとは何ですか?

コンピューターに SMPS を選択する前に、SMPS とは何か、およびさまざまな効率評価の意味を理解してください。

フィッシング詐欺を Google に報告する方法

フィッシング詐欺を Google に報告する方法

このガイドでは、詐欺師が他人を詐欺するのを防ぐために Google に報告する方法を学びます。