Next: Conclusion Up: Support multiprocesseur Previous: Système multiprocesseur

Support de synchronisation

Dans un système multiprocesseur, l'ordre des accès à la mémoire à l'exécution doit être le même que celui généré par le compilateur. Ceci ne peut être respecté que grâce à des primitives de synchronisation. En effet, les exécutions ayant lieu en parallèle, il est impossible de connaître de manière certaine l'ordre des accès à un emplacement donné de la mémoire partagée sans instaurer des protocoles. Des instructions spéciales sont mises en oeuvre par le MIPS R10000 et l'UltraSPARC pour les accès atomiques aux données partagées et des primitives de synchronisation, tandis que sur le PentiumPro, chaque instruction accédant à la mémoire peut être précédé du préfixe Lock qui la rend atomique.

Accès à la mémoire partagée

MIPS R10000


Le MIPS R10000 implémente l'instruction SYNC et les instructions Load Linked et Store Conditionnal pour réaliser un accès atomique à la mémoire partagée. L'instruction SYNC est une barrière de synchronisation sur la mémoire. Les instructions Load Linked et Store Conditionnal contiennent aussi implicitement cette synchronisation. Ces instructions permettent d'implémenter des sémaphores. L'instruction Load Linked charge un mot à partir de la mémoire, une petite séquence d'instructions peut lire et modifier ce mot. L'instruction Store Conditionnal sauvegarde sa valeur en mémoire, si et seulement si elle n'est pas modifiée entre temps (par un autre microprocesseur).

UltraSPARC


L'UltraSPARC implémente trois instructions atomiques (SWAP, LDSTUB, CASX) qui permettent la mise en oeuvre d'opérations fournissant un accès atomique à des emplacements de la mémoire partagée. Voici une description de ces trois instructions :

PentiumPro


L'approche du PentiumPro est différente : toutes les instructions qui accèdent à la mémoire, peuvent être préfixées d'un octet de verrouillage (préfixe LOCK) qui rend exclusif l'accès à une donnée en mémoire. Certaines instructions contiennent de façon systématique ce préfixe.

Ordre des lectures/écritures

La mise en oeuvre de systèmes multiprocesseurs à mémoire partagée pose le problème de l'ordre des accès à la mémoire par des microprocesseurs distincts. La mise en oeuvre d'un multiprocesseur doit respecter un certain ordre sur les requêtes à la mémoire afin de permettre la portabilité des applications et/ou le déterminisme de certaines applications.

MIPS R10000


Le MIPS R10000 implémente l'instruction SYNC qui attend que toutes les instructions qui la précèdent soient achevées avant de commencer son exécution. Le tampon des opérations non-cachables (voir paragraphe ) doit être vide.

UltraSPARC


L'instruction MEMBAR, définie dans la norme SPARC V9 (STBAR dans la norme SPARC V8) permet un contrôle explicite sur les accès à la mémoire. L'instruction MEMBAR a deux formes : Ces instructions permettent d'implémenter les trois modèles de cohérence mémoire : cohérence forte, ordre total des rangements et ordre partiel des rangements (définis dans la norme SPARC V9 (voir [6], Annexe D)).

PentiumPro


Le modèle d'accès en écriture sur la mémoire proposé par le jeu d'instructions xxx86 est dit à forte rigidité ; c'est-à-dire que les écritures sont exécutées dans l'ordre du flot d'instructions : tout observateur extérieur doit voir les écritures dans l'ordre exact où elles sont programmées. Par contre, au niveau du microprocesseur, des lectures peuvent être réalisées alors que le tampon d'écritures est plein. Ce modèle a pour principale qualité de simplifier le travail de synchronisation des programmeurs. Il peut, par contre, limiter de façon importante les performances du système, d'autant plus que le PentiumPro effectue un plus grand nombre d'accès mémoire que les microprocesseurs RISC.



Next: Conclusion Up: Support multiprocesseur Previous: Système multiprocesseur


flloansi@IRISA.irisa.fr
Tue Jun 4 09:57:56 MET DST 1996