• Aucun résultat trouvé

6.2 Tâches de cassage de symétrie généralisé

6.2.3 Calculabilité

Rappelons que pour une tâche hn, m, ~ℓ, ~ui-GSB T = (I, O, ∆), nous avons ∆(I) = ∆(I′) = O

pour toute paire de vecteurs d’entrée I, I′. À première vue, on pourrait alors penser qu’une solution

triviale pour T serait de choisir un vecteur de sortie O ∈ O prédéfini et de toujours décider sans aucune communication, quel que soit le vecteur d’entrée. Ce n’est en fait pas possible à cause de la propriété d’indépendance de l’index : le comportement d’un processus doit être indépendant de son index. En fait, certaines tâches GSB (faisables) ne peuvent pas être résolues dans le modèle doté uniquement de registres.

6.2.3.1 Universalité de la tâche hn, n, 1, 1i-GSB

Quand on considère la famille des tâches GSB, on peut se poser la question suivante : existe-t-il une tâche GSB universelle ? En d’autres termes, existe-t-il une tâche GSB qui permet de résoudre toutes les autres tâches GSB sur n processus ? La réponse est “oui”. Le théorème suivant montre que la tâche hn, n, 1, 1i-GSB (renommage parfait) permet de résoudre n’importe quelle tâche GSB sur n processus. Le renommage parfait est donc universel pour la famille des tâches hn, −, −, −i-GSB.

Comme nous le verrons avec le corollaire 6.25, la tâche hn, n, 1, 1i-GSB (renommage parfait) ne peut pas être résolue quand les processus n’ont accès qu’à des registres.

Théorème 6.23. Toute tâche hn, m, ~ℓ, ~ui-GSB (faisable) peut être résolue à partir d’une solution à la tâche hn, n, 1, 1i-GSB.

Démonstration. Observons d’abord que la tâche hn, n, 1, 1i-GSB a un seul vecteur noyau, à savoir [1, . . . , 1]. Étant donné un algorithme qui résout cette tâche, soit deci sa sortie au processus pi.

Pour résoudre la tâche symétrique hn, m, ℓ, ui-GSB, les processus exécutent un algorithme qui résout la tâche hn, n, 1, 1i-GSB et un processus piprend outputi = ((deci− 1) mod m) + 1 comme sortie. Le

vecteur noyau correspondant est alors [⌈m

n⌉, . . . , ⌈ m n⌉, ⌊ m n⌋, . . . , ⌊ m

n⌋]. Selon l’hypothèse de faisabilité,

nous avons ℓ ≤ m

n ≤ u. Comme ℓ et u sont des entiers, nous avons ℓ ≤ ⌊ m n⌋ ≤ ⌈ m n⌉ ≤ u. Le vecteur [⌈mn⌉, . . . , ⌈m n⌉, ⌊ m n⌋, . . . , ⌊ m

n⌋] est donc un vecteur noyau de la tâche hn, m, ℓ, ui-GSB.

Pour résoudre la tâche asymétrique hn, m, ~ℓ, ~ui-GSB, nous considérons d’abord l’ensemble de vecteurs de sortie O. Nous ordonnons alors ces vecteurs de la même manière déterministe et choisissons le premier d’entre eux. Soit V ce vecteur de sortie de la tâche hn, m, ~ℓ, ~ui-GSB. Nous utilisons alors le

même vecteur V pour tous les processus. Soit decila valeur obtenue par pidans la tâche hn, n, 1, 1i-GSB.

Un processus piprend alors l’entrée V [deci] comme sortie outputi pour la tâche hn, m, ~ℓ, ~ui-GSB. Parce

que la tâche hn, n, 1, 1i-GSB a un seul vecteur noyau [1, . . . , 1], chaque entrée de V est choisie par un seul processus. Cela satisfait la spécification de la tâche hn, m, ~ℓ, ~ui-GSB, ce qui conclut la démonstration du théorème.

Théorème 6.24. Pour tout n, la tâche (n − 1)-accord ensembliste peut être résolue de manière sans- attente en utilisant des registres et une solution à la tâche hn, n, 1, 1i-GSB.

Démonstration. Considérons un algorithme A qui résout la tâche hn, n, 1, 1i-GSB. Selon le théorème 6.10, nous pouvons supposer que A est basé sur des comparaisons. Soit E une exécution de A dans laquelle seul le processus piparticipe. Parce que A est basé sur des comparaisons et est indépendant de

l’index de pi, la sortie de pidans E n’est pas une fonction de son entrée. Dans chaque exécution dans

laquelle seul piparticipe, piobtiendra donc la même sortie λ. Comme piobtient λ dans chaque exécution

dans laquelle il participe seul et A est indépendant de l’index, dans chaque exécution dans laquelle seul pj participe, j 6= i, pj obtiendra également la même sortie λ.

Soit λ ∈ {1, . . . , n} une valeur différente de λ. En utilisant A et λ le (n − 1)-accord ensembliste peut être résolu de la façon suivante (l’indépendance de l’index n’est pas requise pour le (n − 1)-accord ensembliste). Chaque processus piannonce d’abord sa proposition vien écrivant vidans M[i] (M est un

tableau registres partagés initialisés à ⊥) puis exécute A en utilisant son index comme entrée. – Si piobtient une valeur différente de λ, il décide sa proposition vi.

– Si pi obtient λ, cela signifie qu’un autre processus pj a commencé à exécuter A après avoir écrit sa

proposition vj dans M[j]. Dans ce cas, pidécide n’importe quelle entrée M[j] telle que j 6= i et

M [j] 6= ⊥. Le processus piest alors le seul à ne pas décider sa propre proposition.

Cette implémentation satisfait de façon triviale la propriété de validité de l’accord ensembliste et la terminaison sans-attente. Si un processus obtient λ dans A, au moins deux processus participent et ont écrit leurs valeurs dans M (A produit la sortie λ 6= λ si un processus l’exécute seul) et deux processus décident la même valeur, ce qui implique la propriété d’accord et conclut la démonstration du théorème.

Le corollaire suivant est la conséquence du théorème 6.24 et du fait que pour tout n, le (n − 1)- accord ensembliste ne peut pas être résolu de manière sans-attente en utilisant uniquement des registres [27, 75, 112].

Corollaire 6.25. Le renommage parfait ne peut pas être résolu de manière sans-attente en utilisant uniquement des registres.

Théorème 6.26. Pour tout n ≥ 3, la tâche hn, n, 1, 1i-GSB ne peut pas être résolue de manière sans- attente en utilisant des registres et une solution à la tâche (n − 1)-accord ensembliste.

Démonstration. Supposons par contradiction qu’il existe un algorithme A qui résolve la tâche hn, n, 1, 1i- GSB en utilisant uniquement une solution au (n − 1)-accord ensembliste et des registres. Considérons alors l’ensemble des exécutions S de l’algorithme A dans lesquels seuls les n − 1 processus p1, . . . , pn−1

participent. La spécification du (n − 1)-accord ensembliste implique que S contient un sous-ensemble S′

d’exécutions dans lesquelles chaque invocation par pi, 1 ≤ i ≤ n − 1, de la solution au (n − 1)-accord

ensembliste lui renvoie la valeur qu’il a proposé (parce que seuls n − 1 processus participent).

Nous pouvons alors obtenir un algorithme B pour n − 1 processus à partir de A en remplaçant chaque invocation du (n − 1)-accord ensembliste par l’identité (la sortie est égale à l’entrée). Pour chaque exécution E de B, il existe une exécution dans S′ dans laquelle les processus ont le même

comportement et donc les mêmes sorties. L’algorithme B résout donc la tâche hn − 1, n, 0, 1i-GSB en utilisant uniquement des registres. Mais il a été prouvé dans [17] que pour tout n ≥ 3, la tâche hn − 1, n, 0, 1i-GSB (n-renommage pour n−1 processus) ne peut pas être résolue en utilisant uniquement des registres, une contradiction qui conclut la démonstration du théorème.