• Aucun résultat trouvé

L’algorithme de Block Wiedemann

Dans le document Le logarithme discret dans les corps finis (Page 189-193)

6.2 Des algorithmes quadratiques pour les matrices creuses 184

6.2.3 L’algorithme de Block Wiedemann

Block Wiedemann est la variante parallélisée de l’algorithme de Wiede-mann introduite pour la première fois par Coppersmith. Elle s’adresse aux situations dans lesquelles il est possible de calculer les suites de produits matrice-vecteur en s’appuyant non plus un mais sur ` processeurs. Dans ce cas, plutôt que de résoudre l’équation (6.1), nous cherchons, étant donnés ` vecteurs ~v1,··· , ~v`, des coe cients aij tels que :

` X j=1 dN/`eX i=0 aijAi~vj = 0 (6.2) Nous remarquons que le nombre de coe cients (ici les aij) à calculer de-meure du même ordre de grandeur que celui qui apparait dans la version non parallélisée de l’algorithme, c’est-à-dire N.

6.2. DES ALGORITHMES QUADRATIQUES POUR LES MATRICES CREUSES189

Algorithm 2 L’algorithme de Block Wiedemann pour A~x = ~0

Entrée : Une matrice A de dimension N⇥ N Sortie : ~x tel que A· ~x = ~0.

Calcul d’une suite de matrices

1: ~r1 2 KN,··· ,~r` 2 KN et ~w1 2 KN,··· , ~w` 2 KN

2: ~v1 A~r1,··· , ~v` A~r`

3: for chacun des ` processeurs indicés par j do

4: u0 vj 5: for i = 0,··· ,2dN/`e do 6: for k = 1,··· ,` do 7: i,j,k ~wk· ~ui 8: end for 9: ui+1~ A ~ui 10: end for 11: end for 12: for i = 0,··· ,2dN/`e do

13: Mi ( i,j,k) la matrice ` ⇥ ` qui contient tous les produits de la formetwA~ i~v

14: end for

Algorithme de Thomé ou de Giorgi, Jeannerod, et Villard

15: Depuis M0,··· ,M2dN/`e retrouver les coe cients aij t.q.Pj=1` PdN/`ei=0 aijAi~vj= ~0. Résolution

16: le premier indice dans J1,dN/`eK tel qu’il existe j in J1,`K vériÆant a j , 0.

17: ~b P` j=1

PdN/`e

i= aijAi~rj.

18: ~k Erreur : élément du noyau trivial

19: while ~b , 0 do

20: ~k ~b

21: ~b A~k

22: end while

23: return ~k

Résolution du problème A~x = ~0.

Nous choisissons ici ` vecteurs aléatoires ~r1,··· ,~r` puis nous posons ~vi =

A~ri. Soit le premier indice dans l’intervalle J1,dN/`eK pour lequel il existe un entier j dans l’intervalle J1,`K qui vériÆe a j , 0. L’équation (6.2) en-traine alors P`j=1PdN/`ei= aijAi+1~rj = ~0, i.e. A +1(P`

j=1

PdN/`e

i= aijAi ~rj) = ~0. Soit maintenant ~b le vecteur P`j=1PdN/`ei= aijAi~rj. Selon le résultat de Kalto-fen [Kal95], le vecteur ~b est non nul avec une très forte probabilité. Aussi, calculer itérativement A~b, A2~b, ··· ,A ~b permet de nouveau d’obtenir un

élé-ment du noyau de A en O(N · mA) opérations. En e et, le premier indice k dans l’intervalle J1, K tel que Ak~b = 0 montre que Ak 1~b est bel et bien un

Résolution du problème A~x = ~y.

Di érentes approches sont envisageables pour résoudre A~x = ~y. Ainsi, dans l’article [Kal95] la taille de A est par exemple augmentée de 1 : le vecteur ~y est ajouté à l’intérieur d’une nouvelle colonne, disons à l’extrême droite, et la création d’une ligne de zéros au bas de la matrice rend de nouveau celle-ci carrée. Un élément aléatoire du noyau de la matrice construite par la méthode précédente produit alors une solution de A~x = ~y, dès lors que le dernier coe cient de cet élément solution est non nul.

Une autre option consiste à poser ~v1 = ~y et à choisir pour tout i 2 J2,`K des vecteurs ~vi = A~ri, où chaque ~ri est un vecteur aléatoire de taille adéquate, et où l’on suppose que a01 , 0. L’équation (6.2) donne alors :

dN/`eX i=0 ai1Ai~y + ` X j=2 dN/`eX i=0 aijAi+1~rj = 0. En multipliant par l’inverse de A, nous obtenons :

a01~x + dN/`eX i=1 ai1Ai~y + ` X j=2 dN/`eX i=0 aijAi~rj = 0. Il est alors possible de retrouver ~x en calculant simplement :

( 1/a01) · 0 BBBB BB@ dN/`eX i=1 ai1Ai 1~y + ` X j=2 dN/`eX i=0 aijAi~rj 1 CCCC CCA.

Ceci peut être exécuté pour un coût total de O(N·mA) opérations parallélisées sur ` processeurs : chacun démarre avec son propre vecteur initial ~vj et calcule une suite de produits matrice-vecteur de la forme Ai~vj. Le coût de calcul de chaque suite est de O(N·mA/`) opérations arithmétiques. Nous ne traitons pas

dans ce paragraphe du cas déviant pour lequel a01= 0 puisque la section 6.3 couvrira tous les cas de Ægures pour les matrices presque creuses, donc pour les matrices creuses.

Comment trouver des coe cients ai satisfaisant l’équation (6.2).

Soit ~v1,··· , ~v` un ensemble de ` vecteurs ; considérons les `(dN/`e) élé-ments résultats des produits matrice-vecteur de la forme Ai~vj qui apparaissent dans la somme de l’équation (6.2). Puisque `(dN/`e) > N, tous ces vecteurs ne

6.2. DES ALGORITHMES QUADRATIQUES POUR LES MATRICES CREUSES191

peuvent être indépendants. Il existe donc des coe cients qui vériÆent l’équa-tion (6.2). Nous prenons exemple sur l’algorithme de Wiedemann et nous pro-cédons maintenant par conditions nécessaires. Soit ~w1, . . ., ~w` un ensemble de

` vecteurs pour lequel nous supposons que, pour tout entier  dans l’intervalle

J0,dN/`eK et tout entier k dans J1,`K, nous avons :

` X j=1 dN/`eX i=0 aijtw~kAi+~vj = 0.

La probabilité que les coe cients aij satisfassent l’équation (6.2) est alors proche de 1 lorsque K est grand – de nouveau, nous renvoyons à [Kal95]. En revanche, si le corps K est petit, il est facile d’augmenter la probabilité en montant le nombre de vecteurs w au delà de `, en suivant par exemple l’ana-lyse faite par Coppersmith dans [Cop94]. L’algorithme de Block Wiedemann cherche donc des coe cients qui annulent la suite de 2dN/`e petites matrices de dimension `⇥ ` données par :

t

~

wkA~vj

.

Ici, ⌫ 2 J0,2dN/`eK dénombre les matrices, tandis que les indices k et j re-présentent respectivement les numéros de colonnes et de lignes au sein de chacune des matrices. Il est possible de calculer les coe cients aij en temps sous-quadratique – nous renvoyons à la section 6.2.4 pour de plus amples détails. L’algorithme de Giorgi, Jeannerod, Villard permet ainsi d’atteindre une complexité en ˜O(`! 1N ). Ceci achève de structurer les étapes de Block

Wiedemann telles qu’elles sont décrites dans l’algorithme 2.

Par ailleurs, la considération conjointe du temps de calcul nécessaire aux produits matrice-vecteur et à la recherche des coe cients nous permet d’ex-primer la complexité totale de l’algorithme comme O(N · mA) + ˜O(`! 1N ).

Notons que la partie en O(N · mA) peut être e cacement distribuées sur ` processeurs tandis que la partie en ˜O(`! 1N ) résulte d’un calcul séquentiel. Remarque 6.2.2. Dans ce paragraphe tout avons toujours implicitement

sup-posé que le nombre de suites ` à calculer était précisément égal au nombre de processeurs c à disposition. Il s’agit en e et du choix le plus naturel lors de l’application de Block Wiedemann, puisque l’augmentation de ` au delà du nombre de processeurs ne peut que dégrader la performance générale de l’algorithme. Plus précisément, un tel changement laisserait la contribution en O(N · mA) inaltérée, mais gonØerait la partie en ˜O(`! 1N ). Cependant,

puisque nous serons amenés à considérer dans la section 6.3 des valeurs de ` plus grandes que celles de c, il est utile de comprendre que l’on peut

avoir un intérêt à calculer séquentiellement plusieurs suites indépendantes sur chacun des processeurs. Dans un tel cas de Ægure il est alors ingénieux de rendre en pratique le nombre de suites à calculer égal à un multiple du nombre de processeurs, aÆn de minimiser le temps d’horloge des produits matrice-vecteur.

Dans le document Le logarithme discret dans les corps finis (Page 189-193)