• Aucun résultat trouvé

LinBox : ´ evolutions et interactions d’une biblioth` eque d’alg` ebre lin´ eaire exacte

N/A
N/A
Protected

Academic year: 2022

Partager "LinBox : ´ evolutions et interactions d’une biblioth` eque d’alg` ebre lin´ eaire exacte"

Copied!
26
0
0

Texte intégral

(1)

LinBox : ´ evolutions et interactions d’une biblioth` eque d’alg` ebre lin´ eaire exacte

Pascal Giorgi

´

equipe DALI - Universit´ e de Perpignan

Journ´ ees Nationales de Calcul Formel,

Luminy, 1 f´ evrier 2007

(2)

La biblioth` eque linbox en quelques mots

I

projet international, 32 chercheurs depuis 1997 (Canada, France, USA),

I

biblioth` eque g´ en´ erique en C++ :

• licence LGPL ,

• 180.000 lignes de code & documentation,

• linbox 1.1 - 2nd release [31 janvier 2007]

I

www.linalg.org

Principaux d´ eveloppements :

I

algorithmes : syst` emes lin´ eaires, invariants matriciel, ...

I

matrices : boˆıtes noires, denses, structur´ ees

I

domaines de calcul : corps finis, entiers, rationnels, polynˆ omes

I

g´ en´ ericit´ e : patron “template”, plug&play.

(3)

Des besoins r´ eels...

• taille des probl` emes de plus en plus grand (matrix dim. > 10.000 courant),

• gains algorithmiques importants (gain lin´ eaire, algorithmes optimaux),

• logiciels g´ en´ eralistes comme maple ou mathematica ne sont pas adapt´ es,

Philosophie de linbox (fournir un intergiciel)

specialized libraries

GMP NTL BLAS

executable server

GAP web MAPLE

scientific software / front end

algorithms

LinBox

plug−in solutions and

specific modules Interface

Objects

Parallelism

(4)

Des besoins r´ eels...

• taille des probl` emes de plus en plus grand (matrix dim. > 10.000 courant),

• gains algorithmiques importants (gain lin´ eaire, algorithmes optimaux),

• logiciels g´ en´ eralistes comme maple ou mathematica ne sont pas adapt´ es, Philosophie de linbox (fournir un intergiciel)

specialized libraries

GMP NTL BLAS

executable server

GAP web MAPLE

scientific software / front end

algorithms

LinBox

plug−in solutions and

specific modules Interface

Objects

Parallelism

(5)

linbox : principe de g´ en´ ericit´ e

• 4 niveaux d’implantations (r´ eutilisables et reconfigurables)

rings finite fields

plug−in

blackboxes

matrices

vectors

input

algorithms solutions

hybrid

• structures et domaines respectent des interfaces

⇒ g´ en´ ericit´ e au travers de la notion de patron « template »

⇒ int´ egration de codes externes par « wrappers »

• alternative au polymorphisme statique :

arch´ etype ≈ Java interface [Kaltofen, Turner]

(6)

linbox : principaux concepts algorithmiques

I

Algorithmes de type boˆıte noire « blackbox »

I

Wiedemann / Block Wiedemann,

I

Lanczos / Block Lanczos.

I

Algorithmes ` a base d’´ elimination

I

´ elimination de Gauß par blocs,

I

´ elimination creuse.

I

Solutions enti` eres

I

d´ eveloppement p-adique,

I

th´ eor` eme des restes chinois,

I

approches adaptatives (terminaison anticip´ ee).

algorithmes principalement probabilistes (Monte Carlo / Las Vegas)

(7)

linbox : principaux concepts algorithmiques

I

Algorithmes de type boˆıte noire « blackbox »

I

Wiedemann / Block Wiedemann,

I

Lanczos / Block Lanczos.

I

Algorithmes ` a base d’´ elimination

I

´ elimination de Gauß par blocs,

I

´ elimination creuse.

I

Solutions enti` eres

I

d´ eveloppement p-adique,

I

th´ eor` eme des restes chinois,

I

approches adaptatives (terminaison anticip´ ee).

algorithmes principalement probabilistes (Monte Carlo / Las Vegas)

(8)

linbox : concr` etement ...

d´ ej` a disponible (cf. linbox 1.1)

matrices denses ou creuse sur un corps finis ou sur les entiers

I

d´ eterminant,

I

rang,

I

forme de Smith,

I

syst` emes lin´ eaires ( solutions rationnelles et diophantiennes ),

I

polynˆ ome minimal et caract´ eristique,

I

valence,

I

matrice d´ efinie positive / semi-d´ efinie positive.

(9)

linbox : exemple d’utilisation

´ ecriture d’un code C++ & compilation avec linbox

calcul sur un corps finis avec une matrice creuse

#include <linbox/field/modular.h>

#include <linbox/blackbox/sparse.h>

#include <linbox/solution/det.h>

...

// declare the objects

LinBox::Modular<double> Zp(13) ;

LinBox::SparseMatrix<Modular<double> > A(Zp) ; LinBox::Modular<double>::Element d ;

...

// call the solution

LinBox::det(d,A) ;

(10)

linbox : exemple d’utilisation

´ ecriture d’un code C++ & compilation avec linbox

calcul sur les entiers avec une matrice dense

#include <linbox/field/PID-integer.h>

#include <linbox/blackbox/dense.h>

#include <linbox/solution/det.h>

...

// declare the objects LinBox::PID integer Z ;

LinBox::DenseMatrix<PID integer> A(Z) ; LinBox::PID integer::Element d ;

...

// call the solution

LinBox::det(d,A) ;

(11)

linbox : quelles sont les performances ?

• Sur un corps finis ( matrice dense d’ordre 5 000 ) :

I

Multiplication de matrices : 36s (22% plus rapide que blas )

I

Calcul du d´ eterminant : 21s (20% plus lent que lapack )

I

Calcul de l’inverse : 59s (8% plus rapide que lapack )

• Sur les entiers :

I

D´ eterminant d’ordre 2 000 : 184s (≈ ordre 400 avec maple )

I

Syst` emes lin´ eaires denses d’ordre 2 500 : 41s (≈ ordre 500 avec maple )

I

Syst` emes lin´ eaires creux d’ordre 10 000 : 2h40mn (≈ ordre 1 500 avec maple )

(12)

linbox : encore des performances

calcul du polynˆ ome caract´ eristique sur GF(547 909) (ATHLON 2200, 1.8 Ghz, 2Go RAM)

a

n 500 1 000 2 000 3 000 5 000 10 000

magma 2.11 3.8s 29.9s 238s 802s 3793s MT linbox 0.4s 2.7s 17.9s 61s 273s 2080s

speed-up 9.5 11 13 13 14 -

a

implantations et tests r´ ealis´ es par C. Pernet (2007)

(13)

Comment b´ en´ eficier de linbox dans

son logiciel de calcul formel favori : maple ?

(14)

Les probl` emes a surmonter

• Fournir une version compil´ ee de linbox (pb template).

• Eviter la sp´ ´ ecification explicite des types de donn´ ees.

• Fournir des objets dynamiquement polymorphes.

#include <linbox/field/modular.h>

#include <linbox/blackbox/sparse.h>

#include <linbox/solution/det.h>

...

// declare the objects

LinBox::Modular<double> Zp(13) ;

LinBox::SparseMatrix<Modular<double> > A(Zp) ; LinBox::Modular<double>::Element d ;

...

// call the solution

LinBox::det(d,A) ;

(15)

Les probl` emes a surmonter

• Fournir une version compil´ ee de linbox (pb template).

• Eviter la sp´ ´ ecification explicite des types de donn´ ees.

• Fournir des objets dynamiquement polymorphes.

#include <linbox/field/modular.h>

#include <linbox/blackbox/sparse.h>

#include <linbox/solution/det.h>

...

// declare the objects

LinBox::Modular<double> Zp(13) ;

LinBox::SparseMatrix<Modular<double> > A(Zp) ; LinBox::Modular<double>::Element d ;

...

// call the solution

LinBox::det(d,A) ;

(16)

D´ eveloppement d’un driver pour linbox

I

Unification des types par objets virtuels et void*,

I

Cr´ eation d’objets abstraits par pointeur de fonctions : « factory » ,

I

Gestion des objets par table de hachage.

key

...

ptr

envelope abstract

encapsulate

inheritance domain

concrete

key

...

ptr

envelope abstract

inheritance blackbox / vectorconcrete

void*

blackbox / vector generic type encapsulate

knowledge hashtable

hashtable

(17)

Driver linbox : suppression des types explicites

#include <linbox/field/modular.h>

#include <linbox/blackbox/sparse.h>

#include <linbox/solution/det.h>

...

// declare the objects

DomainKey Zp = createDomain(13,"linbox field dbl") ; BlackboxKey A = createBlackbox(Zp, "linbox sparse") ; ElementKey d = createElement(Zp) ;

...

// call the solution

LinBox::det(d,A) ;

(18)

Comment appeler les bonnes fonctions

`

a partir d’objets non typ´ es ?

(19)

Driver linbox : gestion des appels de fonctions

Difficult´ es majeures :

• besoin de retrouver le type concret des objets vus comme void*, , → utilisation de « call back » et de « visitor »

• besoin d’instancier l’ensemble des fonctions sur tous les types possibles.

, → utilisation de « functor » g´ en´ erique et de g´ en´ eration automatique de code

key

...

ptr

envelope abstract

encapsulate

inheritance domain

concrete hashtable

abstract visitable

accept visitor abstract

visitor visitor

concrete function

inheritance

encapsulate

specialized type checkingautomatic

r´ ef´ erences [Alexandrescu. Modern C++ design] ; [ Boost library]

(20)

Driver linbox : gestion des appels de fonctions

Difficult´ es majeures :

• besoin de retrouver le type concret des objets vus comme void*, , → utilisation de « call back » et de « visitor »

• besoin d’instancier l’ensemble des fonctions sur tous les types possibles.

, → utilisation de « functor » g´ en´ erique et de g´ en´ eration automatique de code

key

...

ptr

envelope abstract

encapsulate

inheritance domain

concrete hashtable

abstract visitable

accept visitor abstract

visitor visitor

concrete function

inheritance

encapsulate

specialized type checkingautomatic

r´ ef´ erences [Alexandrescu. Modern C++ design] ; [ Boost library]

(21)

Exemple de fonctions du driver linbox

Avantage : ajout simple de fonctionnalit´ es

// functor to compute the rank class RankFunctor {

public :

template<class Blackbox>

void operator() (unsigned long &res, Blackbox ∗B) { LinBox::rank(res, *B) ; }

} ;

// API to compute the rank

void lb rank(unsigned long &res, const BlackboxKey& key) {

RankFunctor fct ;

BlackboxFunction::call(res, key, fct) ;

}

(22)

linbox driver : exemple d’utilisation

#include <lb-driver.h>

...

// declare the objects

DomainKey Zp = createDomain(13,"linbox field dbl") ; BlackboxKey A = createBlackbox(Zp, "linbox sparse") ; ElementKey d = createElement(Zp) ;

...

// call the solution

lb determinant(d,A) ;

(23)

Incorporation du driver linbox dans maple

pratiquement imm´ ediat en utilisant l’API C fournit par maple

I

incorporation des objets linbox (cl´ es) dans des objets maple ,

I

conversion des donn´ ees ( maple ↔ linbox ),

I

garbage collection des objets linbox inutilis´ es,

I

fournir les fonctions maple correspondantes aux fonctions linbox .

(24)

L’interface en pratique

une petite d´ emo...

(25)

Quelles am´ eliorations pour maple ?

Comparaison pour des matrices enti` eres denses ` a coefficient dans [1..100]

d´ eterminant

n 50 100 200 400

Maple 0.2s 1.6s 16s 536s

LinBox 0.01s 0.09s 0.5s 1.7s

speed-up 15 17 32 302

rang

50 100 200 400

0.46s 1.43s 17.1s 542s 0.006s 0.01s 0.08s 0.29s

77 89 206 1821

syst` emes lin´ eaires

n 50 100 200 400

Maple 0.33s 0.8s 4.1s 52s LinBox 0.01s 0.05s 0.3s 2.5s

speed-up 25 16 10 20

polynˆ ome caract´ eristique

20 40 80 160

0.12s 2.22s 40.4s 906s 0.007s 0.018s 0.14s 1.3s

17 123 282 678

(26)

Conclusions

Nous avons pr´ esent´ e une interface permettant de b´ en´ eficier de la biblioth` eque linbox au sein de maple .

I

am´ elioration consid´ erable des performances de la plupart des calculs en alg` ebre lin´ eaire exacte,

I

pr´ eserve le concept de g´ en´ ericit´ e de linbox et facilite l’int´ egration future de nouvelles fonctionnalit´ es,

I

le driver facilite l’interfa¸cage avec d’autre logiciels.

driver linbox : 4 000 lignes de code ⇒ 20Mo de biblioth` eque dynamique interface maple : 1 500 lignes de code ⇒ 84Ko de biblioth` eque dynamique

disponible dans LinBox 1.1 sur www.linalg.org

perspectives :

I

augmenter les fonctionnalit´ es disponibles,

I

proposer un choix sur les algorithmes utilis´ es,

I

am´ eliorer le back end layer pour une programmation effective,

I

incorporer linbox dans le paquetage LinearAlgebra de maple .

Références

Documents relatifs

Les ´el´ements inversibles d’un anneau forment un groupe multiplicatif.. Tout morphisme de corps

´ Ecrire la matrice de ϕ dans la base pr´ ec´ edente, donner la trace, le d´ eterminant et le polynˆ ome caract´ eristique de ϕ.. Donner son polynˆ ome caract´ eristique et

10.4.2. Soit E un espace vectoriel de dimension finie. D´ emontrer qu’il existe une base orthonormale de E dans laquelle la matrice de u est triangulaire. Soient E un espace

D´ emontrer que les projecteurs sur les sous-espaces propres g´ en´ eralis´ es de f (i.e. les projecteurs spectraux) sont des polynˆ omes en f. c) Enoncer le th´ ´ eor` eme

Quelle quantit´e de chacun de ces deux alliages devez vous fondre et m´elanger pour obtenir 100g d’un alliage contenant 50%

[r]

Donner les coordonn´ees du vecteur (x, y) dans cette

Un endomorphisme u est trigonalisable si et seulement s’il existe une base dans laquelle la matrice de u est triangulaire sup´ erieure..