Reutilisabilité
Upcoming SlideShare
Loading in...5
×
 

Reutilisabilité

on

  • 915 views

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, ...

Statistics

Views

Total Views
915
Views on SlideShare
907
Embed Views
8

Actions

Likes
0
Downloads
8
Comments
0

3 Embeds 8

https://www.linkedin.com 4
http://www.linkedin.com 3
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Reutilisabilité Reutilisabilité Document Transcript

    • 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 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 ´ 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
    • 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
    • 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