Operational semantics of relaxed memory models
Auteur / Autrice : | Gustavo Petri |
Direction : | Gérard Boudol |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance en 2010 |
Etablissement(s) : | Nice |
Ecole(s) doctorale(s) : | École doctorale Sciences et technologies de l'information et de la communication (Nice ; 1992-....) |
Mots clés
Résumé
La plupart des architectures multiprocesseurs et des langages de programmation parallèle `a mémoire partagée actuels ne sont pas séquentiellement consistant pour les programmes parallèles. Leurs comportements possibles sont caractérisés par des modèles mémoire faibles ou relâchés. Un modèle mémoire décrit la manière dont les programmes parallèles peuvent interagir par des lectures et des écritures dans la mémoire partagée. Ainsi, un modèle mémoire relâché présente plus de comportements que le modèle séquentiellement consistant (modèle mémoire “fort”). Le fait que la plupart des architectures ont des modèles mémoire relâchés est connu depuis des décennies, et peu de programmeurs comprennent quels sont les comportements exacts qu’un programme parallèle peut avoir dans de telles architectures. Nous soutenons dans cette thèse que le problème provient de la difficulté `a comprendre la spécification de ces modèles de mémoire. Ceci, d’abord car peu d’architectures ou de langages de programmation donnent une définition formelle de leur modèle mémoire, et, ensuite, parce que la plupart des définitions formelles existantes sont axiomatiques, ce qui les rendent difficiles `a comprendre et inadaptées `a des techniques basées sur le langage, telles que l’analyse statique ou le model checking. Notre première contribution dans cette thèse est la formalisation opérationnelle des architectures `a tampons d’écriture (write buffers). Les write buffers sont omniprésents dans les architectures multi-core, et donc leur compréhension est fondamentale pour la programmation parallèle dans de telles architectures. En utilisant des concepts standard des langages de programmation, nous démontrons que la classique “DRF guarantee” est satisfaite dans notre formalisation. Par conséquent, raisonner par des calculs séquentiellement consistant est correct pour les programmes libres d’accès simultanés sur une même case mémoire. Notre deuxième contribution est un framework pour la caractérisation opérationnelle des techniques de calcul spéculatif. Ce framework nous permet de définir formellement la notion intuitive de spéculation valide. Pour cette formalisation deux langues sont considérés, un langage de programmation de haut niveau avec un mécanisme d’exclusion mutuel par verrous, et un langage de programmation de bas niveau, plus proche de l’Instruction Set Architecture (ISA) d’une machine, avec des mécanismes de barrières mémoire et des instructions atomiques. Pour les programmes de ces deux langages, nous identifions les propriétés suffisantes pour garantir que seuls les comportements séquentiellement consistant peuvent être observés lorsque les programmes sont exécutés de manière spéculative. La dernière contribution est l’instanciation de ces deux frameworks sémantiques pour formaliser les modèles mémoire TSO, PSO et RMO de iii iv l’architecture Sparc. En particulier, nous observons que le framework des write buffers n’est pas bien adapté pour formaliser des relaxations trop libérales comme le permet RMO. Nous démontrons un résultat de correspondance entre les formalisations de PSO et TSO dans les deux frameworks. Le fait que RMO peut pas être instanciée par le framework des write buffers est une bonne indication que le framework spéculatif est plus générale que celui des write buffers.