Amlioration des performances de Metafor
Dvelopper du code avec une quipe de non-geeks l'ULgRomain BOMANUniversit de LigeDpartement darospatiale et mcanique
Geeks Anonymes 17 juin 2016
1
Plan2
Contexte et passEnvironnement de travailInterface pythonGestion du code sourceDocumentationBatterie de testsGestion mmoireVisualisationFutur
Trouvons un compromisEspce de geek!
2
3J.-P. Ponthot
Position du labo lULgSimulation numrique.Mcanique du solide.Mthode des lments finis.Dveloppement de logiciels.
Mcanique Numrique Non Linaire
hydroformage dun tubeDpartementArospatiale & Mcanique
3
Notre logiciel : Metafor4Code de calcul Element Fini implicite pour la simulation de grandes dformations de solides
Formalisme ALE, remaillage. Schmas dintgration thermomcaniques.Modlisation de fissures, rupture.Algorithmes de contact.Loi constitutives non linaires.Gnration de maillages partir dimages mdicales.
Elments fluides.Schmasmonolithiques.Applications Metal FormingCrash / ImpactBiomcaniqueInteractionfluide/structure
4
Simulations phares5
Simulation dune ligne de profilage mise forme de poutrelles partir de tles dacier
5
Simulations phares6Test obligatoire trs coteux. On essaye ici de prdire le comportement avant le test rel.Une aube se dtache suite un impact doiseau par exemple.Laube perdue et les dbris doivent rester contenus dans le carter.
Simulation dun test de certification de moteur davion (perte daube)soufflante (fan)Turboracteur double flux
6
Simulations phares7Suite une perte daube laxe du moteur vibre (balourd).Les aubes du compresseur basse-pression (Techspace Aero) scrasent sur le carter.Le carter ne doit pas cder.Nanmoins, on aimerait un carter le plus lger possible.Metafor permet de modliser finement le comportement non linaire du matriau pour prdire une charge de flambement plus faible que les modles lastiques linaires traditionnels... On espre donc un gain de poids.
Compresseur
7
Equipe actuelle8D. BoemerR. BomanC. CanalesM.L. CerquagliaY. Carretta
Y. CrutzenG. DeligeC. HennuyerP. JorisL. PapeleuxG. Wautelet
5 thsards 4 ingnieurs de recherche 1 scientifique permanent
8
Anciens dveloppeurs9
http://metafor.ltas.ulg.ac.be/dokuwiki/team
A. StephanyE. BiotteauC. LaurentJ. XhardezL. VigneronL. AdamL. NoelsL. ZianeM. MengoniO. KarasevaP. BussettaP.-P. JeunechampsR. KoeuneS. HannayS. TrichonV.Q. BuiV. dOtreppeW. Guocontribution au code actuel uniquement depuis 2000
9
10Partenaires industriels
dtient une licence de Metafor
10
Metafor... de 1992 aujourdhui11
images de http://geek-and-poke.com/Jai eu une super ide de projet:On va combiner les rsultats de notre projet A et de la thse B pour dvelopper C!Je ne sais pas, mais le projet est accept!On dmarre demain!On a gard le code source de A et B?
11
Mon arrive au labo en 199712Projet RW emboutissageprrequisprrequisMon projet de thse!
Good luck,have fun!prrequisprrequisprrequis
Metafor PhD Ponthotdoc
1992
Metafor +poudreMetafor +contactMetafor +optimisation1997
Metafor +coquesMetafor +thermique, +3Dtests
Metafor +remaillage1996
12
Etat de Metafor en 199713Code sourceFortran 77Gestionmanuelle des rvisions (cp/tar partir un rpertoire NFS partag).
DocumentationUne vieille note technique de 1992 imprime.
TestsProcdure non systmatique et incomplte.
CompilationUn Makefile mal foutu (compilation en debug par dfaut).
PortabilitNulle: le code dpend troitement dune lib propritaire dont on na pas les sources.Compilation uniquement sous DEC Alpha / VAX.
Institut de Mcanique du Val BenotTerminal VT220
13
Etat de Metafor en 199714Trs longue tradition de Fortran 77 en simulation par lments finis...
...et mme en calcul numrique plus gnralement...(cfr BLAS: http://www.netlib.org/blas/ )
En 2016, tous les grands frres de Metafor sont toujours crits en Fortran 77!
14
Etat de Metafor en 199715Le Fortran 77 dans les mains de non-geeks:
pas dallocation de mmoire:modification trs intrusives (mmoire alloue en C et passe en argument),tentation de rutiliser des variables temporairement non utilises pour un but diffrent du but initial,tentation dutiliser des variables globales.
ncessit dapprendre un autre langage pour accder certaines fonctionnalits (allocation mmoire, widgets GUI, autres bibliothques, etc.)bnfice de simplicit de syntaxe perdu!Il est bien videmment possible dcrire un bon code en Fortran. La rigueur ncessaire et leffort de maintenance sont juste colossaux!
aperu dun appel dune routine de Metafor Fortran
O est le problme?
15
Metafor se marie Oofelie16En 2001, jenvisage dabandonner ma thse...
Je suis contact par le WSL et Igor Klapka pour crer Open Engineering dont le but est de commercialiser Oofelie, un code lments finis crit en C++.
Je dcide de rcrire Metafor dans Oofelie!
Le succs est norme tel point que trop dacteurs entrent en jeu (WSL, Interface, ULg, LTAS, Samtech, Ansys) et se partagent le gteau...
...sans moi! Ils mont oubli dans le partage... Je dcide de me retirer du projet.
Aprs une ngociation dure, jobtiens le droit dutiliser mon propre code source pour continuer ma thse (mais pas de le mettre en open source).
16
Aujourdhui17
Nanmoins, tout nest pas rose!Plus de 230k lignes de C++.1400 classes.33 modules (.dll/.so).~3100 modles EF tests.OS: Windows/Linux.Une version unique depuis 2001. Quasiment aucun dveloppement perdu!
17
Environnement de travail18
images de http://geek-and-poke.com/Cest gnial! jai trouv une super lib qui va me permettre de calculer le volume dun cube.Tu peux me la compiler rapidement sur toutes les machines? Je tenvoie le lien...Essay quoi?Tas essay sur ton PC?
18
Environnement de travail19Cursus ULg des ingnieurs aro-mca (et physiciens)Pas de cours de programmation/informatique.De moins en moins de projets o il faut programmer.
De plus:Connaissance OS limite (y compris Windows!)La programmation, cest pas de la science!
Au mieux:Connaissance (trs sommaire) de Matlab.Parfois: connaissance dun peu de python, C.
PROBLEME: Ils veulent faire du High-Performance Computing!
venez en section physique!
19
Environnement de travail20Utilisateurs:Chercheur lambda.Etudiants.Industriels.WindowsLinuxUtilisation:Calculs intensifs (clusters du CECI).Avantages:Excution ~10% plus rapide.Rien installer en plus du systme.Prototypes/essais simplifis:apt-get install new-lib
Avantages:IDE plus convivial (Visual Studio).Visualisation des rsultats plus fluide (drivers graphiques optimiss).Pas besoin dun deuxime OS pour MS Office, SolidEdge, etc.Compilation trs rapide.
Inconvnient:Convivialit IDE? Inconvnient:Compilation des bibliothques.
20
Environnement de travail21Le code source est scind en 33 bibliothques dynamiques (.dll)lib HPClib GUIlib CADOn isole les chercheurs/les projets dans LEUR bibliothque. risque de conflit limit.code pourri/dupliqu localis.vite lutilisation dobjets de haut niveau dans du code de bas niveau.
pas compil sur clusterMetafor.exeexcutablemtGeo.dllgomtriemtMath.dlloutils mathsmtFEM.dllmthode EFmtMaterials.dlllois constitutivesmtViz.dllvisualisationmtKernel.dllaccs aux donnesNDA
pas distribu (NDA)
mtSabca.dlllois dun industrielmtThixo.dlllois dun thsard
21
Environnement de travail22Compilation multiplateforme
CMakeLists.txt
http://www.cmake.org/ makeVisual Studio
Metafor
Metafor.exe
(exe linux)(exe windows)
seul fichier crer!CMake permet de gnrer un fichier Makefile qui sera utilis par le programme make pour effectuer la compilation.
CMake est multiplateforme. Il est par exemple capable de gnrer de projets "Visual studio" sous Windows ou des projets Eclipse" sous Linux.
CMake utilise un fichier CMakeLists.txt dont la syntaxe est trs simple.
Makefile
cmake
Metafor.sln
gnrgnr
22
Environnement de travail23
cmake_minimum_required(VERSION 2.6)
project(Metafor CXX)
set(SRCS main.cpp class1.cpp class2.cpp)
add_executable(Metafor ${SRCS})CMakeLists.txtExemple de fichier CMakeLists.txt et compilation
On dfinit la version minimale de CMake utiliser
On dfinit un projet nomm Metafor. il est cod en C++ (CXX). Un projet peut contenir plusieurs programmes, des bibliothques, etc.
On cre une variable SRCS qui contient la liste des 3 fichiers (*.cpp) compiler.
On dclare un programme excutable nomm Metafor et compos des sources dfinies par la variable SRCS.mkdir buildcd buildcmake ..make./Metafor
23
Environnement de travail24Choix des bibliothques externesLinux:on utilise les versions disponibles sous Ubuntu LTScompiler metafor = sudo apt-get ... + svn co ... + cmake + makepython 2.7 et pas python 3.x
Windows:on fournit des versions binaires release/debug de ces mmes versions compiles avec le visual studio 2012, ainsi quun script dinstallation.Quelles versions utilise-t-on?
Je dois lancer setup.py?Pfffff a se fait pas tout seul?
24
Environnement de travail25Gnralement la rponse est non.
Questions quon se pose avant de dire oui:Possibilit de compilation Windows MSVC (release/debug)?La fonctionnalit voulue est-elle disponible dans une lib dj utilise?Quel risque et quel cot de maintenance sur le long terme?Et alors, ma nouvelle lib?
Choix des bibliothques externes
25
Environnement de travail26Compilation Windows distribue
full build: 25min 4min3052 CPUs169,8 GHzhttps://www.incredibuild.com/ 300$+24$/an(prix univ par agent 8 curs)
26
Interface python27
images de http://geek-and-poke.com/Ca fait 3 heures que mon code ne compile plus! Je ne comprends pas, Faut que tu viennes voirAh? Je sais pas, jai pas lu, il y en a beaucoup! Viens, viens... tu vas voirAttends, cest quoi le message derreur?
27
Interface python28Les objets C++ de Metafor sont accessibles travers une interface python dans 2 buts prcis: Ecriture des jeux de donnes des simulationsMoins de code: pas besoin de parseur maison (toujours bugu).Langage complet: utilisation de boucles, branchements conditionnels, objets dans le jeu de donnes.Extensibilit: appel des libs externes (Qt, wxWidgets, numpy, )Glue language: appel de codes externes (gmsh, SAMCEF, Abaqus, Matlab, etc.)Scurit: erreurs correctement traites (y compris les exceptions C++!)
Extension du code (user subroutines)Beaucoup de classes C++ (conditions aux limites, commandes de postprocessing, ntits gomtriques, matriaux, mailleurs, etc.) peuvent tre drives en python et utilises dans le jeu de donnes.
28
Interface python29Scripts Python comme jeux de donnesUne classe Python est cre automatiquement par SWIG pour chaque classe C++materials.i%module materials%{#include "ElasticMat.h"%}
%include "ElasticMat.h"Ajouter un nouveau matriau revient ajouter seulement 2 lignes dans le fichier dentre de SWIG (materials.i) pour le rendre accessible en Python!
from materials import *
mat = ElasticMat(E, nu)
model.setMaterial(mat)model.run()
JEU DE DONNEES
materials.py_materials.pyd
(Module python compil)(Shadow classes)
29
Interface python30Hritage de classes C++ en python : user subroutinesSWIG peut gnrer le code (norme et complexe) requis pour driver un classe C++ en Python!
class ElasticMat{public: virtual T computeStress(T &strain);};
MATERIAU C++ ELASTIQUE
from materials import *
class ElasticPlasticMat(ElasticMat):
def computeStress(self, strain): # compute stresses # from strains # using python cmds here return stress
MATERIAU PYTHON ELASTO-PLASTIQUE
Ce code python sera appel partir du code C++!Trs utile pour les tudiants (TFE)
Une nouvelle loi de comportement est disponible sans compilateur!
30
Interface python31Le code source scind en 33 bibliothques dynamiques (.dll) ... et 33 bibliothques dinterface python python.exeexcutableNDAmtGeo.dllgomtriemtMath.dlloutils mathsmtFEM.dllmthode EFmtMaterials.dlllois constitutivesmtSabca.dlllois dun industrielmtThixo.dlllois dun thsardmtKernel.dllaccs aux donneslib HPClib CAD
distribu sabca uniqtmtFEM.pymthode EFmtMaterials.pylois constitutivesmtThixo.pylois dun thsardmtSabca.pylois dun industrielmtMath.pyoutils mathsmtGeo.pygomtriemtKernel.pyaccs aux donnesimport mtFEMimport mtThixo...
test_thesard.py
import mtFEMimport mtSabca...
test_sabca.pyChaque script de test va piocher les fonctionnalits voulues.
31
Gestion du code source32
images de http://geek-and-poke.com/Cest quand que tu fais ton commit? Jaurais besoin de tes nouveaux trucs pour ma thse.Ah? Heu... Oui, oui mais pas maintenant; jai un papier rviser lDemain, ce sera fait.Et toi? ton commit?
32
Gestion du code source33A relire: svn/git aux Geeks AnonymesSbastien Jodogne : Programming practices and project management for professional software development, mai 2013.Cyril Soldani : Git your life for fun and profit, juin 2013.
Buts Gestion de lhistorique des modifications du code.Une seule version de rfrence pour tout le monde (~10 personnes).Conserver un maximum de dveloppements du pass.
Historique de MetaforCVS jusquavril 2007SVN depuis lorsQuelques sous-projets sous git depuis 2015
33
Gestion du code source34Lutilisation quotidienne doit tre trs simple car le non-geek ne lira pas le manuel...
...et menacera implicitement de ne pas commiter son travail si on insiste.On nutilise pas de branches.La version commite est toujours stable.Procdure de dveloppement trs rigide.
svn checkout[modifs locales]svn updatebatterie de tests [1 nuit] (voir plus loin) criture dune page web de commit (voir plus loin)svn commit
COMPROMIS TROUVE
34
Gestion du code source35
Tortoise SVNmon code marche pas... Jai pourtant rien modifi...Utilisation instinctive.
Bien utile pour rsoudre dun coup dil ceci:Seul bmol:
jai fait un svn blame! a plante dans ton code...https://tortoisesvn.net/
Pas besoin de mmoriser les commandes!
Les modifs sautent aux yeux!
35
Gestion du code source36SVN peut tre utilis sans lire un manuel.Chaque commit possde un seul numro de version qui sincrmente automatiquement.Pas de pull request : on observe la qualit du code aprs commit.La mthode utilise ne pousse pas le non-geek commiter.En tude actuellement:Utilisation de branches de dveloppement git avec commits quotidiens.Ncessit de dfinir une mthode dutilisation qui se rsume en quelques commandes simples et figes. Avantages SVN
Inconvnients SVN
36
Documentation37
images de http://geek-and-poke.com/Tu sais que la doc sur la classe Machin nest pas crite? Pfff, quel guignol cet ancien thsard...Cest bien possibleTiens, propos, tas crit la doc de ton dernier commit?Ah ben non, jai pas eu le temps, tu sais, je pars en conf la semaine prochaine...
37
Documentation38
documentation des commits Quest ce qui a t modifi? Quand? Par qui? Pourquoi?documentation du code sourcedocumentation utilisateur Utilisation de lexcutable
3 types de documentation
Int ConferencePLASTICITY 2017
svn log!
Doxygen!
LaTeX! (+svn)
38
Documentation39Compromis trouvs
Fonctions de base documentes (pour le reste, utilise grep dans la batterie de tests ou svn blame sur le source).
Rgle: Utilise une langue que tu maitrises (mieux vaut une bonne doc en franais que de langlais incomprhensible).Nom de classes, fonctions, variables dautant plus explicites quelles sont visibles.
Code source compltement document (Doxygen).
Version en ligne sur wiki.
Mathjax sur le wiki.
1 powerpoint mis jour chaque anne.
Doc utilisateur complte.Langue: en anglais et franais.Version papier et en ligne.Rappels thoriques avec quations LaTeX.Tutoriels, vidos, etc.
39
Documentation40Systme de wiki choisi depuis 10 ans: Dokuwiki
https://www.dokuwiki.org/
Points forts:Installation trs simple (DB format texte).Compatible LDAP.Nombreux plugins.Mises jour rgulires et automatiques.Dispo sur NAS Synology.
... et pas besoin de lire un long manuel pour diter une page
http://metafor.ltas.ulg.ac.be/
40
Documentation41
Comme tout wiki:Edition en ligne.Conservation de lhistorique.Ajout dimages, vidos, etc.
moteur javascript de rendu dquations
Impression
Vue en ligneEditeur en ligne
41
Documentation42
Documentation des commits
svn log est peu utile vu la procdure de commit utilise.
Chaque commit est longuement document par son auteur sur le wiki.
42
Batterie de tests43
images de http://geek-and-poke.com/Jai mis jour ma version aprs le commit de mon abruti de collgue et mes dveloppements ne marchent plus du tout!Ah oui, cest vrai faudra que je commite un jour des tests, jai pas encore eu le temps Tu sais... la conf, le papier, etc. Mmm?.. Bizarre a Tes sr que tes tests sont suffisants?
43
Batterie de tests44Buts:Assurer la non-rgression du code et des modles numriques.Eviter les conflits entre personnes.Principe:Gre par un script python maison.Srie denviron 3100 modles EF, lancs en parallle si la machine le permet.Tourne en moins dune nuit sur un PC classique (~75000s CPU = ~5h30 sur un quad core).3 configurations:Windows x64, Visual Studio 2012 (gnralement le PC de travail)Linux Debian x64, gccLinux Debian x64, intelChaque test extrait des valeurs de rsultats bien choisis qui seront vrifies avec les rsultats de la version officielle du code (rsultats commits dans le dpt avec les sources).
44
Batterie de tests45Interdiction de commiter sans vrifier intgralement la batterie de tests.Tout dveloppement non test peut tre dtruit (inutile de se plaindre).Risque:Solution actuellement mise en place:La procdure documente et scripte.2 rgles simples
Cest trop difficile, je commite pas
... mais je vais faire un svn update.
45
Batterie de tests46En 5min:Zipper ses sources modifies (dans lexplorer Windows).Transfert sur les machines de test (Filezilla).ssh sur les machines (putty).Lancer comp.py.
Ensuite:rentrer chez soi
Procdure scripte
dure = 1 nuit
46
Batterie de tests47Le lendemain, les rsultats sont reus par e-mail.
Etape finale:vrifier que les diffs observes ne sont pas significatives avant commit.
Les rsultats sont tris en catgories On voit le nombre de diffs avec la dernire version commite
dtail pour chaque diff
47
Gestion mmoire48
images de http://geek-and-poke.com/Faut que je me rachte un PC avec plus de RAM; mes calculs sont tellement gros que jarrive plus travaillerHeuu, cest quoi a?A mon avis, les destructeurs de tes classes ne sont pas correctement appels...
48
Gestion mmoire49
Compromis trouvToute mmoire alloue doit tre libre.Pas de memory leak en cours de calcul.
Inacceptable!TolrcalculcalculExemple:
49
Gestion mmoire50Garde-fousDe temps en temps:Intel Inspector.GUI:Dtection de fuites via vtkDebugLeaks.
RAM limite sur machines de test.
Certains objets sont compts (et le compteur est un rsultat de batterie).
50
Visualisation51
images de http://geek-and-poke.com/Aha! Jai trouv un bug dans tes routines de visu!Quand je visualise mon nouveau type de maillage, il y a tout qui plante!Tu crois que jai le temps de mamuser avec du graphisme?Ca ne mtonne pas, jai crit a bien avant tes dveloppements. Mais je peux texpliquer comment a marche...
51
Visualisation52
Visualisation continue des rsultats en cours de calcul
Initialement 2 buts:Voir tout moment ce quon fait.Faciliter lutilisation pour les tudiants et les industriels.
Particularits:1 thread graphique ct du/des thread(s) de calcul. On affiche simplement en 3D ltat de la mmoire.Pas daccs disque.
Consquence:Plus besoin doutil externe de post-processing.
Interprteur python
Affichage du problme en 3D
52
Visualisation53Gestion des widgets avec QtPoints forts de Qt:Portable (Windows, Linux, etc.) sans tre trop laid.Nombreux utilisateurs (base de KDE).Open source (LGPL).Interface python (PySide PyQt).Moderne : Orient objet (C++), mcanisme signal/slot.Bien document.Framework complet (p. expl. QThread, QDataStream, etc.).The Qt companyhttp://www.qt.io/
Essays et abandonns:wxWidgets, GTK+, Tcl/Tk
Boutons, listes droulantes, cases cocher, etc.
53
Visualisation54
Affichage 3D des rsultats sur maillage avec VTK(Kitware)http://www.vtk.org/ Points forts de VTK:voir Qt+ interface Qt/pythonDataSet1Mapper1Actor1RenderWindowMapper2Actor2Pipeline de visualisation (principe):
DataSet2Filter
Maillage + rsultatsExtrusion,Extraction diso-valeurs,Numrotation, Conversion en primitives graphiques
54
Conclusion et perspectives55
images de http://geek-and-poke.com/Ca y est: je suis docteur!Jai pu rutiliser les acquis du pass. La collaboration a port ses fruits.Merci pour ton travail. Les projets suivants sont dj en route!
Espce de geek!
55
Conclusion et perspectives56Exemple de collaboration plus large (dpartement)
David ThomasMetaforSolveur solideSolveur fluide structure
metafor.pySU2.pySU2Solveur fluideCouplage fluide-structure
Labo Prof. V. Terrapon
Labo Prof. J.-P. Ponthot
56
Conclusion et perspectives57Metafor en Open Source?Extraction de certains composants gnriques de Metafor en vue dun dpt sur github (en cours)MetaforBatterie de test
Solveur EF basique
Mailleur biomec
Interface CAD
Mailleur quad
57
Merci!58
gource -s .4 -p 0.001 -1280x720 --auto-skip-seconds .4 --multi-sampling --stop-at-end --highlight-users --hide mouse,progress --file-idle-time 0 --max-files 1000 --background-colour 111111 --font-size 20 --title "Metafor" --output-ppm-stream - --output-framerate 60 | avconv -y -r 60 -f image2pipe -vcodec ppm -i - -b 8192K movie.mp4
58
Recommended