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.