« Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 210 :
===Les fences et barrières mémoires===
 
Les processeurs à type ''No Store Ordering'' garantissent que les accès à des données partagées se déroulent correctement avec des instructions queappelées doivent''barrières utiliser les compilateurs ou les programmeurs : des Memory Barriers,mémoires'' ou '''Fences'''. Ce sont des instructions qui vont forcerforcent le processeur à terminer toutes les écritures et/ou lectures qui la précède. Pour plus d'efficacité, certainsCertains processeurs possèdent deuxune Fencesbarrière : unemémoire pour les lectures, et une autre pour les écritures. CertainsD'autres processeurs utilisent un nombre de Fencesbarrières mémoires plus élevé, etdont peuventdes ainsi avoir desbarrières fencesmémoires dédiées à des cas particuliers.
 
[[File:Fences.png|centre|vignette|upright=2|Fences.]]
 
Le placement des fences dans un programme est géré par un subtil équilibre entre programmeur et compilateur. Généralement, unUn compilateur peut placer cesles barrières Fencesmémoires au bon endroit, avec un peu d'aide du programmeur. Certains langages de programmation permettent d'indiquer au compilateur qu'une donnée doit toujours être lue depuis la mémoire RAM, via le mot-clé volatile. C'est très utile pour préciser que cette donnée est potentiellement partagée par plusieurs processeurs ou manipulable par des périphériques. Les compilateurs peuvent placer des Fencesbarrières mémoires lors des lectures ou écritures sur ces variables, mais ce n'est pas une obligation. Il arrive aussi que le programmeur doive manipuler explicitement des Fencesbarrières mémoires. Utiliser l'assembleur est alors une possibilité, mais qui est rarement exploitée, pour des raisons de portabilité. Pour limiter la casse, certains systèmes d'exploitations ou compilateurs peuvent aussi fournir des Fencesbarrières mémoires explicites, encapsulées dans des bibliothèques ou cachées dans certaines fonctions.
 
===L'exemple du modèle mémoire x86===