Reutilisabilité

  • 666 views
Uploaded on

a report dealing with reusability in science computing (MSc, petsc, slepc, arnoldi, meram, eram, ...

a report dealing with reusability in science computing (MSc, petsc, slepc, arnoldi, meram, eram, ...

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
666
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. R´utilisabilit´ e e G´nie Logiciel pour le Calcul Scientifique e Caner Candan - caner@candan.fr 6 mars 2011R´sum´ e e effet nous pouvons utiliser l’outil d’installation de pa- quets “aptitute”. Une rapide introduction est pr´sent´ e e Le G´nie Logiciel constitue l’ensemble des activit´s e e en figure 1.permettant de d´finir la conception jusqu’` la pro- e aduction d’un logiciel et la R´utilisabilit´ peut ˆtre e e e $> sudo aptitude install libpetsc3.1d´finit comme une mani`re de concevoir et r´aliser les e e e $> sudo aptitude install libpetsc3.1-devcomposants de base des m´thodes num´riques de fa¸on e e c $> sudo aptitude install petsc3.1-docla plus r´utilisable possible. Pour les illustrer, nous eutiliserons une m´thode it´rative, qui contrairement e e $> sudo aptitude install libslepc3.1aux m´thodes directes, se prˆte mieux aux matrices de e e $> sudo aptitude install libslepc3.1-devgrandes tailles. Elles permettent de r´duire la taille de e $> sudo aptitude install slepc3.1-docla matrice en se limitant aux ´l´ments non-nuls. Il est ee´galement important de noter que la m´thode it´rativee e eutilis´e est une m´thode de projection pour r´soudre de e e e Figure 1 – Commandes pour l’installation des librairiestr`s grandes tailles de probl`mes. Elle est constitu´e de e e e et des d´pendances e3 parties principales : la projection dans un sous-espace,la r´solution avec une m´thode classique et le retour e edans l’espace de d´part. e Configuration Puis pour ´viter les “Makefile” e Nous rappelons, ci-dessous, les objectifs attendus du d´sordonn´s et incompl`tes fournit dans les exemples e e erapport : des librairies ainsi que les variables d’environnement ` a d´finir, nous pouvons faire appel ` l’outil CMake 1 . e a – se familiariser avec la r´utilisabilit´ e e s´quentielle/parall`le ` l’aide d’une biblioth`que e e a e Ce dernier facilite grandement la configuration d’un num´rique orient´e composant, e e projet en PETSc 2 ou SLEPc et permet ainsi ` quiconque a – utilisation des biblioth`ques PETSc, SLEPc, e une rapide prise en main des biblioth`ques utilis´es. De e e – impl´mentation des op´rations matricielles de base, e e plus la configuration de CMake est multi-plateforme. Le de la m´thode it´rative ERAM et de la m´thode e e e code 1 illustre un exemple de fichier de configuration hybride MERAM, CMake pour un projet simple. – mise ` l’´chelle des exemples r´alis´s en int´grant a e e e e les composants de ces biblioth`ques dans l’environ- e Code 1 Fichier de configuration d’un projet pour le nement YML. programme “hello world” en PETSc avec CMake CMAKE_MINIMUM_REQUIRED(VERSION 2.8)1 Installation et configuration de PROJECT(hello) l’environnement FIND_PACKAGE(PETSc REQUIRED) INCLUDE_DIRECTORIES( ${PETSC_INCLUDES} )Pr´ambule Il est important, avant tout, de pr´senter ADD_EXECUTABLE(hello hello.cpp) e eles d´marches n´cessaires ` l’installation et la configura- TARGET_LINK_LIBRARIES(hello ${PETSC_LIBRARIES}) e e ation de l’environnement. Nous entendons principalementpar environnement les librairies PETSc et SLEPc. Puisnous aborderons une m´thode de configuration d’un pro- e De la mˆme mani`re il suffirait d’inclure le code 2 pour e ejet utilisant ces librairies ` l’aide d’outils comme CMake. compiler un projet en SLEPc. a 1. CMake : g´n´rateur et langage haut niveau de Makefile e eInstallation Utilisant un OS bas´ sur “debian”, une e multi-plateforme“Ubuntu 10.10”, il est possible d’installer PETSc et 2. FindPETSc.cmake available from https://github.com/SLEPc, sans qu’aucune compilation soit n´cessaire. En e jedbrown/cmake-modules/blob/master/FindPETSc.cmake 1
  • 2. 2 DESIGN 2Code 2 Configuration additionnel pour un projet en Code 4 Exemple de code en petsc-cxxSLEPc #include <petsc_cxx/petsc_cxx>FIND_PACKAGE(SLEPC REQUIRED) using namespace petsc_cxx;INCLUDE_DIRECTORIES( ${SLEPC_INCLUDES} ) int main(int ac, char** av)TARGET_LINK_LIBRARIES(hello ${SLEPC_LIBRARIES}) { Parser parser(ac, av, "Introductory " "example " "of code using "2 Design "petsc-cxx."); Context context(parser);C vs C++ Les librairies PETSc 3 et SLEPc ont ´t´ ee // YOUR CODEd´velopp´es principalement en langage C sans utilisation e e return 0;d’aucun paradigme de programmation. Nous avons donc }choisit de porter le code des librairies en C++ afin deprofiter du paradigme objet offert par ce dernier ainsique les concepts de m´ta-programmation. Deux projets een d´coulent : petsc-cxx 4 et slepc-cxx 5 . Cela nous permet petsc_cxx::Parser, quant ` elle indique que l’on uti- e aainsi d’utiliser ces librairies d’une mani`re intuitive tout lise le gestionnaire de param`tres de PETSc. e een profitant d’un langage fortement typ´, b´n´ficiant de e e econtrats d’utilisation 6 et de couches d’abstraction. slepc-cxx Nous savons que la librairie SLEPc est d´pendante de PETSc, cela va de mˆme pour la librai- e epetsc-cxx Pour situer le contexte de la librairie, nous 7 rie slepc-cxx et petsc-cxx. Nous utilisons ´galement un eutilisons l’espace de nom petsc_cxx. Ainsi toutes les espace de nom pour slepc-cxx, il s’agit de slepc_cxx. Leclasses se situent dans ce mˆme contexte. Les codes 3 et 4 e code 5 illustre l’initialisation d’un programme en slepc-illustrent quelques diff´rences entre les librairies PETSc e cxx. D’autres exemples vont suivre.et petsc-cxx.Code 3 Exemple de code en PETSc Code 5 Exemple de code en slepc-cxx#include <petscsys.h> #include <slepc_cxx/slepc_cxx>static char help[] = "Introductory example of " int main(int ac, char** av) "code using PETSc.nn"; {int main(int ac, char** av) slepc_cxx::Parser parser(ac, av,{ "Introductory " PetscInitialize(&ac, &av, (char *)0, help); "example " // YOUR CODE "of code using " PetscFinalize(); "slepc-cxx."); return 0; petsc_cxx::Context context(parser);} // YOUR CODE return 0; } Dans le cas de petsc-cxx le simple fait d’inclure le fi-chier d’en-tˆte petsc_cxx/petsc_cxx est suffisant. Il est e´ventuellement possible d’inclure uniquement des classese Comme nous le disions, slepc-cxx d´pend de esp´cifiques afin d’all´ger le code. Autre point, il n’est e e petsc-cxx, c’est la raison pour laquelle nous utili-plus n´cessaire de faire appel ` une fonction tel que e a sons la classe petsc_cxx::Context avec la classePetscFinalize() ` la fin du programme, ceci est fait a slepc_cxx::Parser. La classe slepc_cxx::Parserde mani`re implicite lors de la sortie du contexte de e permet d’utiliser le gestionnaire de param`tres de ela fonction main depuis la classe petsc_cxx::Context. SLEPc.Cette classe, prenant en param`tre un objet de type epetsc_cxx::Parser, doit ˆtre appel´e au d´but du e e e Fonction objet Ce nouveau design est centr´ autour eprogramme pour situer le contexte PETSc. La classe de ce que l’on nomme des foncteurs ou encore fonction 3. Why is PETSc programmed in C, instead of For- objet. Il s’agit d’utiliser une classe comme fonction, in-tran or C++ ? : http://www.mcs.anl.gov/petsc/petsc-as/ troduite en langage proc´durale, tout en profitant des edocumentation/faq.html#why-c fonctionnalit´s apport´es par la programmation objet. e e 4. petsc-cxx : https://github.com/canercandan/petsc-cxx 5. slepc-cxx : https://github.com/canercandan/slepc-cxx Ainsi il est possible de d´l´guer l’appel ` une fonction ob- ee a 6. Interface jet. L’instanciation du foncteur s’effectuant avant l’ap- 7. Namespace pel, il est ainsi possible de passer des param`tres ` sa e a
  • 3. 3 ´ IMPLEMENTATION 3construction ` travers le constructeur et d’effectuer en- a La variable A est instanci´e avec la classe Matrix<T>. esuite l’appel. La variable x est instanci´e avec la classe Vector<T>. e Tous deux utilisent le type Scalar. Puis le produit de A et x est assign´ ` la variable b. De mani`re implicite ea eOp´rations La classe principale que l’on nommera e 8 des routines sont appel´es en PETSc pour r´aliser le e epetsc_cxx::BO , est une classe abstraite repr´sentant e produit. Les param`tres pass´s ` l’instance de la matrice e e atoutes les op´rations binaires prenant 3 param`tres ` e e a sont respectivement le nombre de lignes, le nombre del’appel (2 en entr´e et 1 en sortie). Il s’agit d’une inter- e colonnes et la valeur initiale pour tous les ´l´ments de eeface de foncteurs. Elle impose l’impl´mentation d’une e la matrice.m´thode repr´sentative de la fonction d’appel. e e Les classes d’op´rations qui h´ritent de la classe e epetsc_cxx::BO sont multiples, ci-dessous une liste non- 3 Impl´mentation eexhaustive. – petsc_cxx::MultiplyMatVec, pour la r´solution e Dans cette section nous allons voir comment du syst`me lin´aire Ax = b e e impl´menter des op´rations matricielles de bases puis e e – petsc_cxx::AdditionMatrix, pour l’addition de nous aborderons une impl´mentation de la m´thode e e deux matrices it´rative ERAM et de la m´thode hybride MERAM. e e – petsc_cxx::Dot, pour le produit scalaire de deux vecteurs Op´rations matricielles Le code 7 illustre le produit e – petsc_cxx::Scal, pour la mise ` l’´chelle d’un vec- matrice-vecteur sur le sous-espace de Krylov. a e teur Code 7 Exemple de code illustrant le produit matrice-Structure de donn´es Plusieurs types de structures vecteur sur le sous-espace de Krylov ede donn´es ont ´t´ port´es ` ce nouveau design, ci- e ee e a #include <petsc_cxx/petsc_cxx>dessous une liste non-exhaustive. using namespace petsc_cxx; – petsc_cxx::Scalar, repr´sente le type scalaire e int main(int ac, char** av) – petsc_cxx::Int, repr´sente un entier e { – petsc_cxx::Real, repr´sente un r´el e e Parser parser(ac, av); – petsc_cxx::Truth, repr´sente un bool´en e e Context context(parser); – petsc_cxx::Matrix, classe repr´sentant une ma- e const Int N = 4; trice PETSc Matrix< Scalar > A(N,N,10); – petsc_cxx::Vector, classe repr´sentant un vecteur e Vector< Scalar > x(N,2); PETSc Vector< Scalar > b(N); Krylov< Scalar > ksp;Surcharge d’op´rateurs Le langage C++ nous offre e ksp(A,x,b);´galement la possibilit´ de surcharger les diff´rentse e e return 0;op´rateurs. Il est ainsi possible d’impl´menter un pro- } e eduit matrice-vecteur avec un code proche de l’´quation emath´matique Ax = b. Un exemple est illustr´ dans le e ecode 6. Nous utilisons la classe Krylov<T> impl´ment´ dans e e la librairie petsc-cxx. Cette classe appelle les fonctions deCode 6 Exemple de code illustrant le produit matrice- la structure KSP disponible dans PETSc. Nous passonsvecteur en petsc-cxx a ` l’instance ksp de la classe, la matrice A et les vecteurs x et b. Le r´sultat ´tant sauvegard´ dans le vecteur b. e e e#include <petsc_cxx/petsc_cxx>using namespace petsc_cxx; EPS La librairie SLEPc introduit une famille deint main(int ac, char** av) fonctions, appel´ EPS 9 , pour le calcul des valeurs e{ propres. Il est indispensable de d´finir la m´thode de e e Parser parser(ac, av); r´solution ` utiliser parmi celles disponible : e a petsc_cxx::Context context(parser); const Int N = 4; – “power”, Matrix< Scalar > A(N,N,10); – “subspace”, Vector< Scalar > x(N,2); – “arnoldi”, Vector< Scalar > b = A * b; – “lanczos”, return 0; – “krylovschur”,} – “lapack” – “arpack” 8. Binary Operation 9. EPS : Eigen Problem Solver
  • 4. 3 ´ IMPLEMENTATION 4 – “blzpack”, L’algorithme 10 illustre les diff´rentes ´tapes que e e – “trlan”, constitue ERAM. – “blopex”, – “primme” Code 10 Algorithme ERAM (in : A, n, s, l, M, V, T ol; out : 1s , Us , Rhos ) Nous utiliserons dans notre cas la m´thode d’Arnoldi. e 1. Choix de m, V, T ol 12La projection d’Arnoldi Nous ne pourrons aborder 2. Algorithme M A(in : A, n, s, m, V ; out : λs , Us )la m´thode d’Arnoldi sans d´crire sa m´thode de pro- e e e 3. Si rho_i = || A~u_i - ~lambda_i ~u_i ||jection. L’algorithme 8 illustre ainsi la m´thode de pro- e > Tol pour i = 1 ` s alors ajection d’Arnoldi aussi appel´ r´duction d’Arnoldi. e e V = sum^s_{i=1} alpha_i . ~u_i et aller ` l’´tape 2. a eCode 8 Algorithme RA (in : A, n, m, V, out : Hm, V m) Sinon Stop 1. Phase d’initialisation : Choix de m et de V (V1 = V ||V || ) La m´thode de r´solution d’Arnoldi, int´gr´ ` SLEPc e e e ea 2. Phase de Projection : est une m´thode ERAM. Le code 11 pr´sente un exemple e e d’impl´mentation de la m´thode ERAM en slepc-cxx. e e Pour j = 1 ` m faire a z = AV_j Pour i = 1 ` m faire a Code 11 Impl´mentation de ERAM en slepc-cxx e h_ij = (z,v_i) // #include <slepc_cxx/slepc_cxx> dot = Sigma(n,i=1)(x_i * y_i) typedef petsc_cxx::Scalar T; z = z - h_ij * v_i int main(int ac, char** av) Fin pour i { slepc_cxx::Parser parser(ac, av); h_j+1,j = || z || petsc_cxx::Context context(parser); v_j+1 = z / h_j+1,j const Int N = 30; Fin pour j petsc_cxx::Matrix<T> A(N); 3. Hmyi = λi yi , i|m, 1 4. ui = Vm ∗ yi , i|m, 1 // Quelques routines de remplissage // de la matrice creuse A // ` l’aide des fonctions SLEPC. a Hm est une matrice d’Hessenberg inf´rieur. 10 e slepc_cxx::EPSolver<T> eps(EPSARNOLDI);M´thode d’Arnoldi L’algorithme 9 illustre les e eps(A);diff´rentes ´tapes que constitue la m´thode d’Arnoldi. e e e return 0;Code 9 Algorithme MA (in : A, n, s, m, V ; out : λs , Us ) } 1. Algorithme RA(in : A, n, m, V ; out : λm , Um ) 2. R´solution du probl`me de valeur propre : e e Hm .yi = λi .yi pour i = 1 ` m et s´lection de s a e M´thode hybride MERAM Une m´thode hybride e e valeurs propres d´sir´es e e est une m´thode d´finie par un ensemble de m´thodes e e e 3. Retour dans l’espace de d´part : Ui = Vm .yi pour it´ratives qui collaborent afin d’acc´l´rer la convergence e e ee i=1`s a d’une entre elles. SLEPc fournit un panel d’options pour les diff´rentes e MERAM 13 est une m´thode hybride d´finie par un e em´thodes de r´solution notamment pour Arnoldi. Il est e e ensemble d’instances d’une mˆme m´thode it´ratives e e epar exemple possible d’utiliser la m´thode d’Arnoldi en e (co-m´thodes) qui collaborent afin d’acc´l´rer la conver- e eemode diff´r´ avec l’option -eps_arnoldi_delayed. ee gence d’une entre elles.M´thode it´rative ERAM Il 11 s’agit d’un bon e e L’algorithme 12 illustre les diff´rentes ´tapes que e erepr´sentant des m´thodes it´ratives d’alg`bre lin´aire. e e e e e constitue MERAM.Elle contient toutes les op´rations ´l´mentaires des e eem´thodes it´ratives de Krylov. e e On cherche s valeurs et vecteurs propres d’une matrice creuse A d’ordre n. 10. http://fr.wikipedia.org/wiki/Matrice_de_Hessenberg 11. ERAM : Explicitely Restarted Arnoldi Method 13. MERAM : Multi-ERAM
  • 5. 4 CONCLUSION 5Code 12 Algorithme MERAM (in : t´l´charg´ 14 , utilis´ et modifi´. ee e e eA, n, s, l, M, V, T ol; out : 1s , Us , Rhos ) 1. Projection 2. Resolution dans le sous-espace 3. Retour dans l’espace de d´part e Le code 13 pr´sente un exemple d’impl´mentation de e ela m´thode MERAM en slepc-cxx. eCode 13 Impl´mentation de MERAM en slepc-cxx e#include <slepc_cxx/slepc_cxx>typedef petsc_cxx::Scalar T;int main(int ac, char** av){ slepc_cxx::Parser parser(ac, av); petsc_cxx::Context context(parser); const Int N = 30; petsc_cxx::Matrix<T> A(N); // Quelques routines de remplissage // de la matrice creuse A // ` l’aide des fonctions SLEPC. a slepc_cxx::EPSolver<T> eps(EPSARNOLDI); slepc_cxx::MERAM<T> meram(eps); meram(A); return 0;} En reprenant le code d’impl´mentation de la m´thode e eERAM nous incluons l’appel ` la classe MERAM dans ala librairie slepc-cxx effectuant les diff´rentes ´tapes cit´s e e epr´c´demment. e e4 Conclusion Le concept de r´utilisabilit´ a ´t´ int´gr´ en partie e e ee e egrˆce au librairie petsc-cxx et slepc-cxx. Nous recon- anaissons toutefois que la conception algorithmiquedes composants de base des m´thodes num´riques e ereste une ´tape laborieuse. Cela explique le peu de eparam`tres dans ces nouvelles librairies. Nous avons eainsi pu aborder toute au long de ce rapport les ´tapes ed’installation et de configuration de l’environnementde travail, le nouveau design pour la r´utilisabilit´ des e ecomposants de base, l’impl´mentation des op´rations e ede base d’alg`bre lin´aire mais aussi et surtout les e em´thodes de calcul des valeurs propres en d´taillant la e em´thode d’Arnoldi ainsi que les it´ratives ERAM et e eMERAM. Ce papier suit les termes de la licence “GNU FreeDocumentation License 1.3” et peut ˆtre librement e 14. https ://github.com/canercandan/reusability