Maison >développement back-end >C++ >Comment x86 obtient-il la sémantique de libération-acquisition sans clôtures explicites ?

Comment x86 obtient-il la sémantique de libération-acquisition sans clôtures explicites ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-07 14:39:13577parcourir

How Does x86 Achieve Release-Acquire Semantics Without Explicit Fences?

Modèle de mémoire x86 et sémantique Release-Acquire

Dans le cadre d'une enquête précédente concernant la mise en œuvre de magasins atomiques memory_order_release utilisant MOV x86, des questions ont été soulevées sur la façon dont la libération et l'acquisition sont réalisées sur x86 sans mécanismes de synchronisation supplémentaires comme les clôtures ou verrous.

Ordre de la mémoire à processeur unique

Le volume 3A d'Intel, chapitre 8 de son manuel de développement système, indique que dans un système à processeur unique, les chargements et les écritures ont un certain ordre garanties :

  • Les lectures ne sont pas réorganisées avec d'autres lectures.
  • Les écritures ne sont pas réorganisées avec les lectures plus anciennes.
  • Les écritures en mémoire ne sont pas réorganisées avec d'autres écritures, sauf dans des circonstances spécifiques.

Multi -Ordre de mémoire du processeur

Cependant, la section multiprocesseur du document ne le fait pas explicitement mentionnez comment les charges sont appliquées. Il se concentre sur :

  • Maintien des règles d'ordre des processeurs individuels au sein des cœurs.
  • Observation des écritures dans le même ordre par tous les processeurs.
  • Absence d'ordre entre les écritures de différents processeurs.
  • Ordre de la mémoire obéissant à la causalité (c'est-à-dire respectant le transitif visibilité).
  • Cohérence de la visibilité des commandes en magasin par d'autres processeurs que ceux qui exécutent les magasins.

Acquisition et libération à l'aide de MOV

Compréhension les principes d’ordonnancement de la mémoire monoprocesseur sont cruciaux. Selon le manuel, les mêmes principes s'appliquent aux systèmes multiprocesseurs lors de l'accès à la mémoire partagée cohérente avec le cache. Cela signifie que la réorganisation n'a lieu que localement au sein de chaque cœur de processeur.

Une fois qu'un magasin devient globalement visible, il devient visible par tous les cœurs simultanément, garantissant que tous les cœurs observent les écritures dans un ordre cohérent. C'est pourquoi seules des barrières locales, telles que mfence dans x86, sont nécessaires pour établir une cohérence séquentielle.

Vue partagée cohérente de la mémoire

L'architecture x86 maintient une vision partagée cohérente vue de la mémoire à travers des caches cohérents. La définition d'Intel des mécanismes de multitraitement souligne l'importance de la cohérence de la mémoire et de la cohérence du cache pour garantir que tous les processeurs ont accès aux mêmes données.

Supplémentaire Ressources

  • https://preshing.com/20120913/acquire-and-release-semantics/
  • https://preshing.com/20 120930/modèles de mémoire faible contre forte/
  • https://www.cl.cam.ac.uk/~pes20/papers/x86-tso-memory-model.pdf

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn