• Aucun résultat trouvé

a partir de la page online 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

18 http://www.linalg.org/gap.html 19 http://www.linalg.org/servers.html 20 http://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 noiresmatrices

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)

– 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´eveloppements p-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

Documents relatifs