Compromis logiciels matériels
Il existe de nombreuses méthodes pour réduire le coût du matériel. Une méthode consiste à intégrer moins étroitement l'assistance à la communication et le réseau dans le nœud de traitement et à augmenter la latence et l'occupation des communications.
Une autre méthode consiste à fournir une réplication et une cohérence automatiques dans le logiciel plutôt que dans le matériel. Cette dernière méthode assure la réplication et la cohérence dans la mémoire principale, et peut s'exécuter à une variété de granularités. Il permet l'utilisation de pièces de base standard pour les nœuds et l'interconnexion, ce qui minimise le coût du matériel. Cela met la pression sur le programmeur pour obtenir de bonnes performances.
Modèles de cohérence de la mémoire détendue
Le modèle de cohérence de la mémoire pour un espace d'adressage partagé définit les contraintes dans l'ordre dans lequel les opérations de mémoire dans les mêmes emplacements ou dans des emplacements différents semblent s'exécuter les unes par rapport aux autres. En fait, toute couche système qui prend en charge un modèle de dénomination d'espace d'adressage partagé doit avoir un modèle de cohérence de la mémoire qui comprend l'interface du programmeur, l'interface utilisateur-système et l'interface matériel-logiciel. Le logiciel qui interagit avec cette couche doit connaître son propre modèle de cohérence de la mémoire.
Spécifications du système
La spécification système d'une architecture spécifie l'ordre et la réorganisation des opérations de mémoire et les performances qui peuvent en être réellement obtenues.
Voici les quelques modèles de spécification utilisant les assouplissements dans l'ordre du programme -
Relaxing the Write-to-Read Program Order- Cette classe de modèles permet au matériel de supprimer la latence des opérations d'écriture qui a été manquée dans la mémoire cache de premier niveau. Lorsque l'échec d'écriture se trouve dans le tampon d'écriture et n'est pas visible pour les autres processeurs, le processeur peut effectuer des lectures qui frappent dans sa mémoire cache ou même une seule lecture qui manque dans sa mémoire cache.
Relaxing the Write-to-Read and Write-to-Write Program Orders- Permettre aux écritures de contourner les écritures précédentes en attente à divers emplacements permet de fusionner plusieurs écritures dans le tampon d'écriture avant de mettre à jour la mémoire principale. Ainsi, plusieurs écritures ne se chevauchent pas et deviennent visibles dans le désordre. La motivation est de minimiser davantage l'impact de la latence d'écriture sur le temps de pause du processeur et d'augmenter l'efficacité de la communication entre les processeurs en rendant les nouvelles valeurs de données visibles pour les autres processeurs.
Relaxing All Program Orders- Aucune commande de programme n'est assurée par défaut à l'exception des dépendances de données et de contrôle au sein d'un processus. Ainsi, l'avantage est que les multiples requêtes de lecture peuvent être en attente en même temps, et dans l'ordre du programme peuvent être contournées par des écritures ultérieures, et peuvent elles-mêmes se terminer dans le désordre, ce qui nous permet de masquer la latence de lecture. Ce type de modèle est particulièrement utile pour les processeurs planifiés dynamiquement, qui peuvent continuer après les échecs de lecture vers d'autres références mémoire. Ils permettent de nombreux réorganisations, voire l'élimination des accès qui sont effectués par les optimisations du compilateur.
L'interface de programmation
Les interfaces de programmation supposent que les ordres de programme ne doivent pas du tout être maintenus entre les opérations de synchronisation. Il est garanti que toutes les opérations de synchronisation sont explicitement étiquetées ou identifiées comme telles. La bibliothèque d'exécution ou le compilateur traduit ces opérations de synchronisation en opérations de préservation de l'ordre appropriées requises par la spécification du système.
Le système assure alors des exécutions séquentiellement cohérentes même s'il peut réorganiser les opérations parmi les opérations de synchronisation de la manière qu'il souhaite sans interrompre les dépendances à un emplacement dans un processus. Cela permet au compilateur une flexibilité suffisante parmi les points de synchronisation pour les réorganisations qu'il souhaite, et autorise également le processeur à effectuer autant de réorganisations que le permet son modèle de mémoire. Au niveau de l'interface du programmeur, le modèle de cohérence doit être au moins aussi faible que celui de l'interface matérielle, mais ne doit pas nécessairement être le même.
Mécanismes de traduction
Dans la plupart des microprocesseurs, traduire des étiquettes en mécanismes de maintien d'ordre revient à insérer une instruction de barrière de mémoire appropriée avant et / ou après chaque opération étiquetée comme une synchronisation. Cela enregistrerait des instructions avec des chargements / magasins individuels indiquant les ordres à appliquer et en évitant des instructions supplémentaires. Cependant, comme les opérations sont généralement peu fréquentes, ce n'est pas la voie que la plupart des microprocesseurs ont suivie jusqu'à présent.
Surmonter les limitations de capacité
Nous avons discuté des systèmes qui assurent la réplication automatique et la cohérence matérielle uniquement dans la mémoire cache du processeur. Un cache de processeur, sans qu'il soit d'abord répliqué dans la mémoire principale locale, réplique les données allouées à distance directement sur référence.
Un problème avec ces systèmes est que la portée de la réplication locale est limitée au cache matériel. Si un bloc est remplacé de la mémoire cache, il doit être extrait de la mémoire distante lorsqu'il est à nouveau nécessaire. L'objectif principal des systèmes discutés dans cette section est de résoudre le problème de capacité de réplication, tout en assurant la cohérence du matériel et avec une granularité fine des blocs de cache pour plus d'efficacité.
Caches tertiaires
Pour résoudre le problème de capacité de réplication, une méthode consiste à utiliser un cache d'accès distant volumineux mais plus lent. Cela est nécessaire pour la fonctionnalité, lorsque les nœuds de la machine sont eux-mêmes des multiprocesseurs à petite échelle et peuvent simplement être agrandis pour les performances. Il contiendra également les blocs distants répliqués qui ont été remplacés depuis la mémoire cache du processeur local.
Architectures de mémoire cache uniquement (COMA)
Dans les machines COMA, chaque bloc de mémoire de toute la mémoire principale est associé à une balise matérielle. Il n'y a pas de nœud fixe où il y a toujours l'assurance d'être alloué à un bloc de mémoire. Les données migrent dynamiquement ou sont répliquées dans les mémoires principales des nœuds qui y accèdent / les attirent. Lorsqu'un bloc distant est accédé, il est répliqué dans la mémoire d'attraction et introduit dans le cache, et est maintenu cohérent dans les deux endroits par le matériel. Un bloc de données peut résider dans n'importe quelle mémoire d'attraction et peut se déplacer facilement de l'une à l'autre.
Réduction des coûts matériels
Réduire les coûts signifie déplacer certaines fonctionnalités du matériel spécialisé vers des logiciels exécutés sur le matériel existant. Il est beaucoup plus facile pour un logiciel de gérer la réplication et la cohérence dans la mémoire principale que dans le cache matériel. Les méthodes peu coûteuses ont tendance à assurer la réplication et la cohérence dans la mémoire principale. Pour que la cohérence soit contrôlée efficacement, chacun des autres composants fonctionnels de l'assistance peut bénéficier d'une spécialisation et d'une intégration matérielles.
Les efforts de recherche visent à réduire le coût avec différentes approches, par exemple en effectuant un contrôle d'accès dans du matériel spécialisé, mais en attribuant d'autres activités aux logiciels et au matériel de base. Une autre approche consiste à effectuer un contrôle d'accès dans un logiciel, et est conçue pour attribuer une abstraction d'espace d'adressage partagé cohérente sur les nœuds et les réseaux de base sans support matériel spécialisé.
Implications pour les logiciels parallèles
Le modèle de cohérence de la mémoire détendue nécessite que les programmes parallèles étiquettent les accès conflictuels souhaités en tant que points de synchronisation. Un langage de programmation permet d'étiqueter certaines variables en tant que synchronisation, qui sera ensuite traduite par le compilateur en instruction de préservation d'ordre appropriée. Pour restreindre la réorganisation des accès à la mémoire partagée par les compilateurs, le compilateur peut utiliser des étiquettes par lui-même.