Next: Conclusion
Up: Support multiprocesseur
Previous: Système multiprocesseur
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.
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).
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 :
- l'instruction atomique SWAP échange les 32 bits de poids faible d'un registre entier avec un mot en mémoire. L'instruction ne peut être lancée que si le tampon d'écritures est vide ;
- l'instruction LDSTUB lit une valeur à partir de la mémoire dans un registre et écrit la valeur 0xFF dans l'octet adressé ;
- l'instruction Compare and Swap (CASX) combine les instructions load, compare et store en une seule instruction atomique.
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.
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.
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.
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 :
- Ordering MEMBAR induit un ordre sur le flot des instructions d'un seul microprocesseur. Les instructions load/store placées avant l'instruction MEMBAR dans l'ordre du programme seront ordonnées par rapport aux instructions load/store qui suivent l'instruction MEMBAR dans l'ordre du programme.
- Sequencing MEMBAR exerce un contrôle explicite sur la fin des opérations. Trois options sont possibles : Lookaside Barrier masque le tampon d'écriture ; Memory Issue Barrier assure que toutes les opérations mémoire qui apparaissent avant l'instruction MEMBAR dans l'ordre du programme, sont achevées avant que toute nouvelle opération mémoire puisse commencer ; Synchronization Barrier assure que toutes les opérations (les accès à la mémoire et les autres) précédant l'instruction MEMBAR dans l'ordre du programme, sont achevées avant que toute nouvelle opération mémoire puisse commencer.
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)).
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