メモリ バリアとは

歴史的に、CPU は完全にシーケンシャルなマシンでした。これは非常に論理的で理解しやすいものですが、パフォーマンスの問題になる可能性があります。何年にもわたって、シリコンウェーハから可能な限り多くのパフォーマンスを引き出すために、CPU 設計に対して多くの巧妙な調整が行われてきました。ただし、より興味深いものの 1 つは、順不同の実行です。アウトオブオーダー実行 CPU では、命令は必ずしも発行された順序で実行される必要はありません。

秩序の失速

インオーダー CPU が実行される主なパフォーマンスの問題は、パイプライン ストールと呼ばれます。これは、命令が一部のメモリに依存しているが、そのメモリがレジスタで直接使用できない場合に発生します。この場合、CPU はメモリ内でその値を見つける必要があります。CPU キャッシュは、最速のメモリ層であるため、最初にチェックされます。値が存在しない場合は、システム RAM がチェックされます。この間、メモリ依存の命令は後続の命令の前に順番に完了する必要があるため、CPU はアイドル状態にある必要があります。

パイプラインの停止によるパフォーマンスへの影響は、それほど悪くはないかもしれませんが、比較的深刻になることもあります。たとえば、L1 キャッシュは通常、5 CPU サイクル程度の結果を返すことができます。L2 キャッシュには 20 サイクル、L3 には約 200 サイクル、システム RAM には約 400 サイクルかかります。CPU が約 5 GHz、つまり毎秒 50 億クロック サイクルで動作することを考えると、400 サイクルでもそれほど悪くはありません (0.000008%)。ただし、キャッシュ層のさらに下のデータを参照する必要がある命令が多数ある場合、累積的な影響により、顕著な速度低下が生じる可能性があります。

順不同の実行とレジスタの名前変更

アウトオブオーダー実行は、スケジューラがキュー内の命令を並べ替えることができる手法です。この並べ替えにより、特定のスレッドを他のスレッドよりも優先するように選択できます。また、まだ満たされていないデータ依存関係がある場合、命令をキューに戻すこともできます。これにより、パイプラインのストールが可能な限り防止され、アイドル サイクルが最小限に抑えられます。

順不同で実行するには、レジスタの名前変更と呼ばれる機能が必要です。CPU は、レジスタに保持されたデータに 1 サイクルでアクセスできます。レジスタは、読み書きされるデータを格納するために使用されます。ただし、コンピューター全体が、CPU サイクルに最適化された順不同の順序ではなく、論理的な順序ですべてが発生していることを確認することが不可欠です。これを可能にするために、CPU には、CPU アーキテクチャが要求するよりも多くの論理レジスタがあります。

書き出す必要があるが、まだ完了していない「前の」命令があるデータは、保持レジスタに配置されます。このデータは、注文が整理されたときに別のレジスタに転送されません。代わりに、保持レジスターの名前が、本来あるべきレジスターの名前に変更されます。これは、メイン コースの前にデザートを準備し、それを提供する時まで冷蔵庫に保管しておくことにいくらか似ています。

これらの論理レジスタは完全にアドレス指定されていません。CPU は、アーキテクチャ レジスタの名前を現在共有している論理レジスタのみを実際にアドレス指定できます。とはいえ、CPU はそれらを十分に認識しており、並べ替えられた他の命令が論理保持レジスタのデータに依存している場合、その特定の経験的な時点でのアーキテクチャ レジスタの「古い」データではなく、それを使用できます。

メモリバリア

メモリ バリア (メンバー、メモリ フェンス、またはフェンス命令とも呼ばれる) は、コンピューター コード内の命令です。これにより、プログラマは、メモリバリアの前後に発行されたメモリ操作に順序制約を適用できます。メモリ バリアは、すべての命令がバリアの後の命令の前に処理されるように CPU スケジューラに指示します。これは、重要な操作が正しい順序で完了するようにするために行われます。

一般に、最新のコンピューターでは、これは必要ありません。アウトオブオーダー実行とレジストリの名前変更は、十分に確立された成熟した分野です。それにもかかわらず、メモリ バリアは、古い、あまり洗練されていない、順不同のプロセッサや、重要なメモリ操作で使用される場合に役立ちます。

メモリ バリアによって、パフォーマンスが低下する場合があります。これは、CPU スケジューラが命令フローの特定の部分を最適化するのを積極的に防止するためです。これにより、パイプラインが停止する可能性が高くなります。

結論

メモリ バリアは、メモリ操作の順序制約を保証する命令です。アウトオブオーダー実行プロセッサは特定の命令の順序を変更する可能性があるため、これは重要です。レジストリの名前変更は、この環境でメモリの整合性を確保する方法として十分に確立されていますが、手動で確認すると役立つ場合があります。

メモリ バリアにより、CPU スケジューラは、バリアの後のすべての命令の前に命令が完了するように強制されます。これにより、メモリ操作の順序が変更される��を防ぎます。また、CPU が命令フローを最適化するのを防ぎ、パフォーマンスに影響を与える可能性があります。



Leave a Comment

ハードドライブのクローンを作成する方法

ハードドライブのクローンを作成する方法

データが貴重な資産である現代のデジタル時代では、Windows 上でハード ドライブのクローンを作成することは、多くの人にとって重要なプロセスとなる可能性があります。この包括的なガイド

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 とは何か、およびさまざまな効率評価の意味を理解してください。