• Aucun résultat trouvé

V. Welker ont propos´e un paquetage GAP pour le calcul d’homologie de complexes simpliciaux bas´e sur la biblioth`eque GMP 1.2.1 pour l’arithm´etique des entiers multipr´ecision, sur Givaro pour l’arithm´etique des corps finis et sur LinBox pour le calcul de rang et de forme normale de matrices [31]. Ce paquetage est disponible `a partir de la page du projet LinBox (GAP homology package18).

1.3.3 Serveurs web

Les calculs en alg`ebre lin´eaire exact au travers de la biblioth`eque LinBox sont tr`es per-formants et ont permis de trouver des solutions jusqu’`a lors incalculables sur des ordinateurs classiques [25] (d´epassement des ressources m´emoire). La mise en place de serveurs de calcul directement utilisables `a partir d’une interface web permet de r´esoudre certains probl`emes sans avoir `a installer la biblioth`eque LinBox et `a programmer la r´esolution du probl`eme. Le fonction-nement et l’utilisation de ces serveurs sont tr`es simples. Les entr´ees du probl`emes `a r´esoudre sont stock´ees dans un fichier disponible `a partir d’une url (i.e. une matrice) et grˆace `a des formulaires internet on peut param´etrer les calculs. Le r´esultat est soit renvoy´e directement si le calcul n’est pas trop long soit il est envoy´e `a une adresse mail configur´ee par l’utilisateur.

Il existe plusieurs types de serveur offrant des calculs bas´es sur la biblioth`eque LinBox. Le premier propose une utilisation directe de la biblioth`eque LinBox. Ce serveur est encore en cours de d´eveloppement mais propose d´ej`a des solutions pour le calcul du polynˆome minimal, du d´eterminant et du rang pour des matrices creuses `a coefficients dans un corps premier.

Le deuxi`eme serveur est sp´ecialis´e pour le calcul du rang ou de la forme de Smith de matrices creuses `a coefficients entiers. Il est n´eanmoins possible de param´etrer le calcul pour qu’il soit effectu´e modulo un nombre premier. Enfin, le dernier serveur est une interface web pour utiliser le module GAP de calcul d’homologie de complexes simpliciaux (voir§1.3.2). Ce serveur permet en particulier d’utiliser le logiciel GAP sans avoir `a l’installer localement.

Le premier de ces serveurs est h´eberg´e `a l’universit´e du Delaware (USA) alors que les deux autres se trouvent au Laboratoire de Mod´elisation et Calcul de l’universit´e Joseph Fourier de Grenoble. L’ensemble de ces serveurs sont en acc`es libre et illimit´e et sont accessibles directement

`

a partir de la pageonline computing servers19 du projet LinBox 20.

1.4 Organisation des codes

Le d´eveloppement de la biblioth`eque LinBox se divise sur trois niveaux comme l’illustre la figure 1.4. Le premier niveau consiste `a la d´efinition des domaines de calculs pour l’arithm´ e-tique. Typiquement, on retrouve l’arithm´etique des corps finis ou celle des anneaux d’entiers.

Les implantations disponibles doivent r´epondre aux crit`eres impos´es par des mod`eles de base qui permettent la g´en´ericit´e des codes de la biblioth`eque. Au dessus de ce niveau, on retrouve des mod`eles de donn´ees g´en´eriques pour la repr´esentation d’objets n´ecessaire au calcul en alg`ebre lin´eaire tels que les matrices, les vecteurs et les matrices boˆıtes noires. Chacune de ces structures de donn´ees doit aussi r´epondre `a des crit`eres impos´es par la biblioth`eque. En outre, les vec-teurs doivent satisfaire le mod`ele de conteneur/it´erateur propos´e par la biblioth`eque standard STL alors que les matrices et les boˆıtes noires doivent satisfaire des mod`eles de base pr´ed´efinis

18http://www.linalg.org/gap.html

19http://www.linalg.org/servers.html

20http://www.linalg.org

dans la biblioth`eque LinBox. Enfin, le dernier niveau de l’organisation des codes concerne l’im-plantation d’algorithmes. Le principe pour ce dernier niveau est de d´efinir des calculs qui soient g´en´eriques `a la fois pour l’arithm´etique et pour les structures de donn´ees utilis´ees pour mod´eliser les objets math´ematiques. Du fait que les deux couches bas niveau de la biblioth`eque sont r´egies par des mod`eles de base, l’utilisation de param`etres template pour abstraire les implantations utilis´ees permet de d´efinir facilement des algorithmes g´en´eriques de haut niveau. Cependant, pour des raisons d’efficacit´e ou de faisabilit´e, les implantations d’algorithmes sp´ecifiques `a des instances particuli`eres d’un probl`eme sont effectu´ees directement sur la structure de donn´ees la plus appropri´ee.

boites noires matrices matrices

vecteurs algorithmes

paramètres coefficients

corps finis anneaux

Fig. 1.4 – Hierarchie dans la biblioth`eque LinBox

Nous d´etaillons maintenant l’ensemble des codes disponibles pour ces trois niveaux dans la biblioth`eque LinBox. Pour chacun des codes, nous sp´ecifions quelle est la part de notre tra-vail pour la conception et le d´eveloppement ; (∗)→faible, (∗∗)→moyenne, (∗∗∗)→importante.

Arithm´etiques (field/ring)

– FieldArchetype(**): interface compilable et mod`ele de base (§2.1).

– FieldTraits : caract´erisation des implantations de corps finis (taille maximale).

– GivaroZpz, GivaroMong(***) : adaptateurs des corps premiers de Givaro (§2.2).

– GivaroGfq(***): adaptateurs des extensions alg´ebriques de Givaro (§2.3).

– GMPRationalField: corps des rationnels bas´e sur les entiers GMP.

– LidiaGfq(***): adaptateur des corps finis de LiDIA (§2.3).

– Modular(**): adaptateur g´en´erique de corps premiers pour les types natifs (§2.2).

– NTL_zz_p, NTL_ZZ_p : adaptateurs des corps premiers de NTL (§2.2).

– NTL_GF2E, NTL_zz_pE, NTL_ZZ_pE(**): adaptateurs des extensions alg´ebriques de NTL (§2.3).

– UnparametricField(*) : adaptateur g´en´erique des corps finis non param´etr´e.

– PID_double(***): anneau des entiers (bas´e sur une repr´esentation flottante) – PID_integer (***): anneau des entiers (bas´e sur les entiers GMP).

– NTL_ZZ, NTL_RR (*) : adaptateur pour l’anneau des entiers et les nombres flottants en pr´ecision arbitraire de NTL.

Matrices boˆıtes noires (blackbox)

– BlackboxArchetype: interface et mod`ele de base.

1.4. Organisation des codes 25 – ButterFly : pr´econditionneur `a base de r´eseaux de permutation.

– ComposeBlackbox: composition de deux matrices boˆıtes noires.

– DenseMatrix (*) : matrice dense (stockage lin´eaire) – Diagonal: matrice boˆıte noire diagonale.

– Dif : diff´erence de deux matrices boˆıtes noires.

– DirectSum : somme directe de deux matrices boˆıtes noires.

– BlackboxFactory: changement de domaine de calcul (homomorphisme).

– Frobenius : matrice boˆıte noire pour la forme de Frobenius.

– Hilbert : matrice boˆıte noire pour les matrices de Hilbert.

– Inverse : matrice boˆıte noire pour l’inverse (bas´ee sur le polynˆome minimal).

– LambdaSparseMatrix (***) : pr´econditionneur creux.

– MatrixBlackbox : adaptateur g´en´erique de matrices conformes avec MatrixArchetype.

– MoorePenrose : matrice boˆıte noire pour l’inverse g´en´eralis´ee de Moore-Penrose.

– NAGSparse : adaptateur g´en´erique pour les matrices creuses (format NAG).

– Hankel : matrice boˆıte noire de type Hankel (bas´ee sur les polynˆomes de NTL).

– Sylvester : matrice boˆıte noire de type Sylvester (`a partir de deux polynˆomes).

– Toeplitz: matrice boˆıte noire de type Toeplitz (bas´ee sur les polynˆomes de NTL).

– Permutation : matrice boˆıte noire de permutations.

– ScalarMatrix : matrice boˆıte noire pour un scalaire.

– SparseMatrix (*): matrice creuse (trois stockages : parall`ele, s´equentiel, associatif).

– Submatrix (*): sous-matrice d’une matrice boˆıte noire.

– Sum : somme de deux matrices boˆıtes noires.

– Transpose : transpos´ee d’une matrice boˆıte noire.

– ZeroOne : matrice boˆıte noire `a coefficients zero ou un.

Matrices (matrix)

– MatrixArchetype: structure de donn´ees d´efinissant l’interface (arch´etype).

– BlasMatrix, TriangularBlasMatrix, TransposedBlasMatrix(***): interfaces des ma-trices pour l’utilisation des routines num´eriques BLAS (§3.4.3).

– BlasPermutation(***) : interface des permutations pour les routines de calculs hybrides

”exact/num´erique” (§3.4.3).

– DenseMatrixBase(**): matrice dense (stockage lin´eaire `a partir d’un vecteur STL).

– DenseRowsMatrix: matrice dense (stockage deux dimensions : vecteur de vecteur).

– DenseSubmatrix (**): sous-matrice dense (utilisation de vues de matrices)

– LQUPMatrix (***): matrice dense sp´ecifique au calcul de la factorisation LQUP (§3.4.3).

– SparseMatrixBase (*): matrice creuse (trois stockages : parall`ele, s´equence, associatif).

– TransposeMatrix: transpos´ee d’une matrice.

Vecteurs (vector)

– BitVector : vecteur de bits (compression utilisant des entiers machines).

– randomVector : g´en´erateur de vecteurs al´eatoires (creux et denses).

– ReverseVector : vecteur miroir.

Algorithmes (algorithms)

– BlackboxContainer : structure de conteneur/it´erateur pour le calcul des projections par des vecteurs, des puissances d’une matrice boˆıte noire.

– BlackboxContainerSymmetric : structure de conteneur/it´erateur pour le calcul des pro-jections par des vecteurs, des puissances d’une matrice boˆıte noire sym´etrique.

– BlackboxBlockContainer(***): structure de conteneur/it´erateur pour le calcul des pro-jections par des blocs de vecteurs, des puissances d’une matrice boˆıte noire.

– BlasMatrixDomain(***): domaine de calcul `a partir des BLAS pour les matrices denses sur les corps finis (§3.4.3) : produit, inversion, d´eterminant, rang, syst`eme lin´eaire, polynˆome minimal, polynˆome caract´eristique.

– LanczosSolver : domaine de r´esolution pour les syst`emes lin´eaires sur un corps fini ; m´ethode de Lanczos [54].

– BlockLanczosSolver: domaine de r´esolution pour les syst`emes lin´eaires sur un corps fini ; m´ethode de blocs Lanczos [44].

– MasseyDomain: domaine de calcul pour le polynˆome minimal scalaire d’une matrice boˆıte noire sur un corps fini ; algorithme de Berlekamp/Massey [56].

– BlockMasseyDomain(***) : domaine de calcul pour le polynˆome minimal matriciel d’une matrice boˆıte noire sur un corps fini ; m´ethode d’approximant de Pad´e matricie [84, 40, 82].

– cra: reconstruction d’entiers par le th´eor`eme des restes chinois [36,§5.4, page 102].

– DiophantineSolver(***): domaine de r´esolution pour les syst`emes lin´eaires diophantiens ; m´ethode de Giesbrecht (§4.4).

– GaussDomain: domaine de calcul pour l’´elimination de Gauss sur des matrices creuses sur un corps fini (calcul du rang) [25].

– IliopoulosElimination : domaine de calcul pour la diagonalisation de matrices denses

`

a coefficients entiers ; algorithme d’Illiopoulos [47].

– LiftingContainer (***) : interface de conteneur/it´erateur pour le calcul de d´ eveloppe-ments p-adiques d’une solution rationnelle d’un syst`eme lin´eaire entier (§4.2).

– RationalReconstruction (***) : domaine de calcul pour la reconstruction de solutions rationnelles `a partir de d´eveloppementsp-adiques (§4).

– RationalSolver(***) : interface de r´esolution de syst`emes lin´eaires entiers (§4.2).

– RationalSolverAdaptive : domaine de calcul adaptatif pour la r´esolution de syst`eme lin´eaire dense.

– SmithForm : domaine de calcul pour la forme de Smith de matrices `a coefficients entiers ; algorithme EGV [70].

– SmithFormAdaptive: domaine de calcul adaptatif pour la forme de Smith de matrices `a coefficients entiers.

– WiedemannSolver : domaine de r´esolution pour les syst`emes lin´eaires sur un corps fini ; m´ethode de Wiedemann [91].

– BlockWiedemannSolver (***) : domaine de r´esolution pour les syst`emes lin´eaires sur un corps fini ; m´ethode de Wiedemann par blocs [17, 48, 85]

L’ensemble des arithm´etiques, des structures de donn´ees et des m´ethodes de calcul fournis par la biblioth`eque repr´esente une brique de base importante pour la mise en place d’algorithme de haut niveau en calcul formel. Dans la suite de ce document, nous proposons d’´etudier en d´etail comment certaines parties de la biblioth`eque ont ´et´e d´evelopp´ees. En particulier, nous pr´esentons quels sont les m´ecanismes mis en place pour int´egrer des arithm´etiques de corps finis externes mˆeme `a l’int´erieur de codes d´ej`a compil´es. Nous nous int´eressons ensuite `a la r´eutilisation des routines num´eriques BLAS pour proposer une boˆıte `a outils tr`es performante pour les probl`emes classiques en alg`ebre lin´eaire sur un corps fini. Enfin, nous montrons dans la derni`ere partie, l’int´erˆet de toutes ces briques de base pour le d´eveloppement d’une application haut niveau, `a savoir la r´esolution de syst`emes lin´eaires diophantiens.

Chapitre 2

Arithm´ etique des corps finis

Sommaire

2.1 Arch´etype de donn´ees . . . . 28 2.1.1 Mod`ele de base des corps finis . . . . 29 2.1.2 Interface compilable . . . . 31 2.1.3 Implantation . . . . 34 2.1.4 Performancesvsen´ericit´es . . . . 38 2.2 Corps finis premiers . . . . 45 2.2.1 Modular . . . . 45 2.2.2 GivaroZpz standard . . . . 48 2.2.3 GivaroZpz : base logarithmique (Zech’s log) . . . . 48 2.2.4 GivaroZpz : base de Montgomery . . . . 50 2.2.5 NTL . . . . 51 2.2.6 Performances et surcoˆut deswrappers . . . . 53 2.3 Extension alg´ebriqueGF(pk) . . . . 59 2.3.1 Givaro . . . . 59 2.3.2 NTL . . . . 60 2.3.3 LiDIA . . . . 61 2.3.4 Performances et surcoˆut deswrappers . . . . 63 2.4 Conclusion . . . . 65

L’algorithmique en calcul exact et plus particuli`erement en alg`ebre lin´eaire n´ecessite des calculs sur de tr`es grands entiers. Les donn´ees calcul´ees ont g´en´eralement un grossissement de l’ordre de la taille du probl`eme `a r´esoudre. Afin de limiter les cons´equences de ce grossissement, une approche classique consiste `a calculer la solution modulo plusieurs nombres premiers et reconstruire la solution enti`ere `a l’aide du th´eor`eme des restes chinois [36, section 5.4]. Le calcul de la solution modulo des nombres premierspi repose sur des calculs dans les corps finisZ/piZ. Les performances des op´erations arithm´etiques de ces corps finis sont donc un crit`ere important de l’efficacit´e de cette m´ethode.

Dans certains cas, le calcul de solutions probabilistes permet d’obtenir des gains en com-plexit´e non n´egligeables. Sur un corps fini, les probabilit´es de r´eussite de ces m´ethodes sont directement reli´ees `a la taille du corps finis. Afin d’augmenter les probabilit´es de r´eussite, une approche classique consiste `a plonger les corps finis dans une extension alg´ebrique. La validit´e de cette m´ethode s’appuie sur le fait que les extensions conservent les propri´et´es du corps de base.

Le d´eveloppement d’arithm´etiques de corps finis et d’extensions alg´ebriques est donc une brique de base importante pour la mise en place de solutions pour l’alg`ebre lin´eaire exacte. Le choix d’une repr´esentation ou d’une arithm´etique particuli`ere est somme toute d´ependant des algorithmes et des probl`emes `a r´esoudre. L’objectif de la biblioth`eque LinBox est de proposer un moyen simple et efficace pour configurer `a la demande les implantations d’algorithmes en fonction des corps finis, aussi bien dans des codes compil´es que dans des codes interpr´et´es. L’in-t´erˆet est de pouvoir r´eutiliser des corps finis provenant de biblioth`eques externes sans avoir `a r´ecrire l’ensemble de la biblioth`eque, et `a plus long terme, de b´en´eficier des ´evolutions futures en arithm´etique des corps finis. L’utilisation de biblioth`eques externes permet de b´en´eficier de corps finis performants sans avoir `a r´e´ecrire leurs implantations.

Dans ce chapitre, nous ´etudions les m´ecanismes utilis´es dans la biblioth`eque LinBox pour fournir des codes configurables et nous nous int´eressons aux diff´erentes implantations de corps finis existantes dans des biblioth`eques sp´ecialis´ees. La premi`ere section pr´esente les mod`eles de donn´ees utilis´es pour d´efinir une interface de donn´ees compilable au travers d’un arch´etype de donn´ees. Les deux sections suivantes illustrent les diff´erentes implantations de corps finis disponibles au sein de la biblioth`eque LinBox et peuvent ˆetre vues comme un survol de ce qui existe en mati`ere d’implantation de corps finis. Notre objectif dans ce chapitre est de montrer que l’utilisation de m´ecanismes d’abstraction pour les corps finis dans LinBox influe tr`es peu sur les performances intrins`eques des biblioth`eques utilis´ees alors qu’elle permet de d´efinir des codes ´evolutifs et robustes.