Introduction Modèles du parallélisme et Processeurs modernes Le modèle classique du parallélisme est celui de l entrelacement. Il correspond à un modèle de la mémoire appelé modèle de le cohérence séquentielle (Sequential Consistency, ) Les processeurs modernes n implémentent pas le modèle, mais des modèles plus relâchés ( relaxed memory models ) tels que l ordre de mémorisation total (Total Store Order, ) 1 / 17 2 / 17 Modèles de mémoire Modèles de mémoire (suite) Sequential Consistency Tous les accès à la mémoire globale sont immédiatement visibles par tous les processeurs. Total Store Order () Les opérations d écriture passent par une zone tampon (buffer) Chaque processeur lit la valeur la plus récente dans sa zone tampon s il y en a une Si non, la valeur conservée en mémoire est lue x86- Modèle destiné au programmeur Basé sur Etendu avec un concept de verrou global Compatible avec les tests figurant dans la documentation des processeurs Ne prétend pas correspondre à la structure interne des processeurs 3 / 17 4 / 17
Modèles de mémoire (suite 2) Des exemples qui peuvent être exécutés totalement dans le modèle (et x86-), mais pas en Des entrelacements possibles : s 1 s 1 s 1 s 2 s 1 l 1 s 2 s 2 l 2 l 1 s 2 l 1 bloque l 1 s 1 s 2 l 2 bloque l 2 l 1 l 2 bloque store(p, m, v) p : [m] v load(p, m, v) p : ([m] = v) 5 / 17 Modèles de mémoire (suite 3) Des exemples qui peuvent être exécutés totalement dans le modèle (et x86-), mais pas en load(p 1, x, 1) (l 1 ) load(p 2, y, 1) (l 3 ) load(p 1, y, 0) (l 2 ) load(p 2, x, 0) (l 4 ) Des entrelacements possibles : s 1 s 1 s 1 s 2 s 1 l 1 s 2 s 2 l 3 l 1 l 2 l 1 l 1 s 1 l 2 s 2 l 3 l 2 l 1 s 2 l 3 l 2 bloque l 3 l 2 l 3 l 4 bloque l 4 l 4 l 4 bloque (suite) Définition opérationnelle 6 / 17 Relations d ordre : ordre du programme (< p ) (partiel, ordre par processeur) ordre de la mémoire (< m ) (global) P 1 Loads/ P 2 Loads/ P n Loads/ Pour correspondre au modèle, une exécution doit satisfaire les conditions suivantes : op i, op j : op i < p op j op i < m op j où op x représente une opération store ou load. Le résultat d un load est celui qui est compatible avec l ordre de la mémoire. 7 / 17 8 / 17
(suite 2) Ordres de la mémoire, premier exemple où s 1 < p l 1 et s 2 < p l 2. Les ordres de la mémoire possibles sont tous les entrelacements respectant les conditions s 1 < m l 1 et s 2 < m l 2. Exemple : s 1 < m l 1 < m s 2 < m l 2 Pour correspondre au modèle, une exécution doit satisfaire les conditions suivantes : 1. l a, l b : l a < p l b l a < m l b 2. s a, s b : s a < p s b s a < m s b 3. l, s : l < p s l < m s 4. val(l a ) = val(max < m {s a s a < m l a s a < p l a }). Notez que : les stores peuvent être retardés, mais les loads ont accès à la dernière valeur mémorisée localement. 9 / 17 10 / 17 (suite) Définition opérationnelle (suite 2) Ordres de la mémoire, premier exemple P 1 P 2 P n Loads Loads Loads FIFO Store Buffer où s 1 < p l 1 et s 2 < p l 2. Les ordres de la mémoire possibles sont tous les entrelacements de s 1, l 1, s 2 et l 2. Exemple : l 1 < m s 2 < m l 2 < m s 1 ou l 1 < m l 2 < m s 1 < m s 2 Le transfert d un store de la zone tampon vers la mémoire principale est appelé un commit. 11 / 17 12 / 17
(suite 3) Ordres de la mémoire, second exemple (suite 4) Ordres de la mémoire, second exemple - Détails load(p 1, x, 1) (l 1 ) load(p 2, y, 1) (l 3 ) load(p 1, y, 0) (l 2 ) load(p 2, x, 0) (l 4 ) où s 1 < p l 1, l 1 < p l 2, s 2 < p l 3 et l 3 < p l 4. Les ordres de la mémoire possibles sont tous les entrelacements de s 1, l 1, l 2, s 2, l 3 et l 4 satisfaisant l 1 < m l 2 et l 3 < m l 4 Séquence d opérations Ordre mémoire store(p 1, x, 1) (s 1 ) - load(p 1, x, 1) (l 1 ) l 1 load(p 1, y, 0) (l 2 ) l 1 < m l 2 store(p 2, y, 1) (s 2 ) l 1 < m l 2 load(p 2, y, 1) (l 3 ) l 1 < m l 2 < m l 3 load(p 2, x, 0) (l 4 ) l 1 < m l 2 < m l 3 < m l 4 (commit(s 1 )) l 1 < m l 2 < m l 3 < m l 4 < m s 1 (commit(s 2 )) l 1 < m l 2 < m l 3 < m l 4 < m s 1 < m s 2 Exemple : l 1 < m l 2 < m l 3 < m l 4 < m s 1 < m s 2 13 / 17 14 / 17 x86- x86- Vue opérationnelle Les contraintes d ordre sur les loads et stores sont les mêmes qu en. Opérations étendues : mfence(p) bloque le processeur p jusqu à ce que son buffer soit vide lock(p) si le verrou n est pas déjà pris par un autre processeur, p prend le verrou et obtient un accès exclusif à la mémoire globale : les autres processeurs ne peuvent pas exécuter des opérations commit ou load unlock(p) p vide le buffer vers la mémoire globale et libère le verrou Loads P 1 FIFO Store Buffer LoadsP n Lock 15 / 17 16 / 17
Autre modèles de mémoire Partial Store Order (PSO) Relaxed Memory Order (RMO) 17 / 17