メモリバリアは実行順序の保証に加えて、アトミック操作の可視性を向上させますか?
プロデューサーとコンシューマーのコンテキストにおいて多くの場合、プロデューサーによって保存されたデータは、できるだけ早くコンシューマーに表示されることを目的としています。プロデューサのストア操作とコンシューマのロード操作の間にハードウェア メモリ フェンスを追加すれば、この目的を達成できるのではないかと疑問に思う人もいるかもしれません。
ただし、メモリ フェンスを追加しても、マルチ インターフェイスでのアトミック操作のレイテンシには大きな影響はありません。コアシステム。その理由は、メモリ フェンスが存在するかどうかに関係なく、ハードウェアが他のすべてのコアに対してストア操作の可視性をすでに確保しているためです。
フェンスがないとどうなるのですか?
フェンスがない場合、メモリ解放命令を伴うプロデューサのストア操作は、将来のある時点で他のすべてのコアから見えるようになることが保証されます。 x86 アーキテクチャではハードウェア障壁は存在しませんが、ARM アーキテクチャではストア操作の前 (プロデューサー側) とロード操作の後 (コンシューマ側) にフェンスが配置されます。
x86 の場合はハードウェア フェンスが使用され、フェンスなしでプロデューサによって格納された値は、最終的にはフェンスなしのロード操作によって監視されます。このプロセスでは、ロードの試行が数回失敗する必要があるかもしれませんが、最終的には成功します。
レイテンシに対するメモリ バリアの影響
メモリ バリアを追加しても、通常は遅延しません。次の理由により、格納された値を監視する際のレイテンシ:
結論
ほとんどの場合、プロデューサーとコンシューマーのキューのアトミック操作の間に不必要なメモリ バリアを追加しても、レイテンシーは改善されません。ハードウェアは、明示的なメモリバリアを必要とせずに、アトミック操作の可視性をすでに保証しています。プロファイリングは、メモリ バリアが有益な状況を特定するために不可欠であり、必要な場合にのみ使用する必要があります。
以上がメモリバリアはプロデューサー/コンシューマーキューのアトミック操作を高速化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。