1 (edited by bjacob 2006-12-31 08:24:47)

Topic: Eigen sort en version 1.0

Bonjour à tout le monde,

je viens de sortir la version 1.0 de Eigen,

http://eigen.tuxfamily.org

C'est une librairie de templates C++ d'algèbre linéaire (vecteurs, matrices, ...) qu'on a lancé avec quelques autres devs de KDE lorsqu'on s'est rendus compte qu'on avait besoin de ce genre de maths et que les librairies qui proposaient ça étaient très lourdes et difficiles d'emploi car elles se concentraient sur les gros calculs scientifiques (genre avec des matrices 1000x1000) alors qu'on n'avait besoin que de choses toutes simples en comparaison.

On s'est dit que ça valait le coup de faire en sorte qu'Eigen n'ait aucune dépendence, ni en KDElibs ni en Qt, de sorte que tout le monde peut l'utiliser, ça pourrait pourquoi pas renforcer les liens entre KDE et d'autres projets (c'est toujours bien de partager une librairie).

Eigen a pour but de rendre la vie facile aux programmeurs de logiciels libres, et est optimisée pour GCC (mais devrait marcher avec n'importe quel compilo) alors que d'autres librairies d'algèbre linéaire n'optimisent pas pour GCC et disent d'utiliser le compilo Intel à la place.

Les applications cibles d'Eigen sont typiquement les applications OpenGL (http://bjacob.livejournal.com/2055.html) et les jeux, les applications bureautiques comme par exemple les tableurs, etc.

Pour le moment au moins une application populaire utilise Eigen: Kalzium, à partir de la version qui sortira dans KDE4.

Voilà, et meilleurs voeux à tous,
Benoît

Re: Eigen sort en version 1.0

ah tiens cool d'être utilisé directement par kalzium, ce sera packagé d'office par les distribs.
Tu sais déjà peut-être si ce sera bien un .deb ou un .rpm séparé du package kalzium (pour permettre une reprise par d'autres plus facilement).

Sinon, si tu t'intéresses aux logiciels scientifques en général, j'en ai recensé une palanquée qui ne sont pas encore packagés, si ça intéresse du monde :
http://cookerspot.tuxfamily.org/wikka.p … Scientific

l'idée c'est de les packager / tester / documenter http://cookerspot.tuxfamily.org/wikka.p … cPackaging

Re: Eigen sort en version 1.0

Salut baud123 :) J'ai utilisé pendant longtemps ton pilote eagle-USB :)

C'est vrai que j'aimerais bien qu'Eigen soit packagé indépendamment de KDE4, pour que d'autres projets puissent facilement l'utiliser. Il n'existe encore aucun package. Ca devrait être facile à packager puisqu'il n'y a rien à compiler, c'est juste copier src/*.h vers un répertoire genre $INCLUDEDIR/eigen/

Pour les autres logiciels scientifiques: Kalzium utilisera aussi OpenBabel, j'ai vu qu'il existait des packages mdv2007 mais je ne sais pas s'ils sont dans les dépôts officiels. Bien sûr on sait qu'OpenBabel est une grosse dépendance et est rarement installé, donc on isole la fonctionnalité en question ( visualiseur de molécules en 3D, voir http://bjacob.livejournal.com/1762.html ) de sorte que Kalzium pourra tourner sans, et que l'utilisateur pourra installer OpenBabel au dernier moment.

Re: Eigen sort en version 1.0

ah encore un qui n'a pas eu de bol avec un pov' modem usb :) c'est surtout à d'autres qu'il faut dire merci, je n'ai principalement fait que le support (et 2-3 scripts + sites...) cf. http://wiki.eagle-usb.org/wakka.php?wiki=EagleUsbTeam bref.

Si, si, justement, il y a les libs à packager : d'un côté le (ou les) .so (pour avoir une bibliothèque dynamique installée une seule fois, même si utilisée par plusieurs programmes), de l'autre le package libeigen-devel qui lui contiendra effectivement les sources. Inclure plusieurs fois les même libs est consommateur de mémoire (disque et RAM) et "empêche" de faire connaître la bibliothèque (tu as de la chance sur mandriva et sur debian, il n'y a pas encore de libeigen.rpm/deb ;-) )

Justement, en reprenant ton exemple openbabel, cela aurait été découpé en libopenbabelvizmol3D.so, vous n'auriez une dépendance qu'à cette partie de la bibliothèque et si elle est packagée à part, cela ne permet de n'installer que cette partie. (hum à regarder le package openbabel il propose surtout des programmes, cela n'a pas l'air d'être un si bon exemple :p)

Tu peux regarder http://qa.mandriva.com/twiki/bin/view/Main/GenLibs qui donne quelques uns des éléments rencontrés par les packagers avec les libs (bon ce n'est qu'une partie du problème et pas expliqué très clairement :/). Cela montre quand même le découpage qui est fait en .so et qui peut être fait aussi au niveau des rpm/deb pour des très grosses bibliothèques.

Re: Eigen sort en version 1.0

En fait je me suis mal exprimé: Eigen est une pure librairie de templates, donc consiste uniquement en des fichiers headers (*.h). Tout le code est dans les headers, et est compilé au moment de la compilation de l'application qui spécialise le template. Ca veut en effet dire que si plusieurs applications utilisent Eigen, elles ne peuvent partager ni l'espace disque ni la mémoire. Pour cette raison on a beaucoup hésité au départ, et on était plutôt partis dans l'idée de faire une "vraie" librairie binaire partagée (.so). Finalement on s'est rendus compte que faire d'Eigen une librairie de templates (.h) était préférable pour les raisons suivantes:

1. Lorsqu'une application utilise une librairie de templates, seul le code qu'elle utilise effectivement est généré. Si une application n'utilise qu'une petite partie de Eigen, alors ça ne gonfle presque pas le fichier exécutable produit.

2. Faire des templates permet d'avoir des vecteurs et des matrices de taille fixe, ce qui veut dire zéro allocation dynamique de mémoire (très important pour les performances) et en même temps de proposer n'importe quelle taille (2,3,4,...) et n'importe quel type de base (float,double,std::complex<...>) en n'écrivant le code qu'une fois. Là encore, seul le code effectivement utilisé est compilé, c'est la beauté des templates. Bref, les applications qui utilisent Eigen obtiennent exactement le code qu'elles veulent et rien d'autre.

3. Eigen est une petite librairie. Dans la pratique, elle ne fait grossir les applications que de quelques ko, et même une application utilisant Eigen très intensivement ne grossira que de quelques dizaines de ko. Ensuite ça dépend de ce que le compilateur décide d'inliner.

4. On n'est vraiment pas les premiers à décider que ça vaut le coup de faire des templates, ça marche très bien pour la libstdc++ et pour Qt. Ces librairies ont des .so à côté car elles ont aussi du code non-templaté, mais Eigen ne contient que des templates.

Voilà, j'espère que c'est plus clair :)

Donc je pense qu'il n'y a qu'un package libeigen-devel à faire, pas de package libeigen (en d'autre termes, eigen n'est utilisée qu'au moment de la compilation).