====== Commit 2011-04-08 ====== ===== Parallélisme ===== * Utilisation des "libs TBB debug" en debug (Windows & Linux) avec ''TBB_USE_DEBUG'' et ''TBB_USE_THREADING_TOOLS=1''. Ceci permet d'avoir de meilleures infos sous Parallel Studio (sinon de faux problèmes apparaissent). C'est vivement conseillé par Intel et ça ne peut pas faire de tort. * Suppression pure et simple d'OpenMP! J'ai eu plusieurs problèmes à ce niveau. Le principal venait de la double section critique dans le ''growTo'' de ''DBSet'' qui avait tendance à freezer. Un autre problème était les conflits potentiels avec les MKL. Metafor n'utilise donc plus du tout OpenMP mis à part dans les MKL. Ca simplifie beaucoup les choses et ça me permet surtout de ne pas constamment me demander si les problèmes de threads que je rencontre viennent de conflits entre OpenMP, MKL et IntelTBB. * Je suis passé à MKL 10.3 suite à des problèmes avec MKL 10.2 (windows) et 10.1 (linux). Seul ''gaston'' reste en 10.1 à cause du vieux système installé sur la machine. Voici les problèmes résolus: * Sous windows, en mode ''dynamic=false'' (défaut dans Metafor), le nombre de threads est imposé et si nbthreads>nbcores alors le DSS de MKL 10.2 merdouillait. Avec MKL 10.3, c'est résolu. * Sous Linux, MKL 10.1 plantait avec gcc si plus d'un thread était utilisé. Avec MKL 10.3, c'est résolu. * La nouvelle version TBB 3.0.174 a été installée partout. * Je linke maintenant Metafor à ''tbbmalloc_proxy'', une lib d'Intel qui surdéfinit les opérateurs d'allocation de mémoire pour obtenir de meilleures perfs en parallèle. J'ai l'impression que cette lib permet d'obtenir de meilleures perfs même en mode série. La batterie sur ''blueberry'' n'a jamais été aussi rapide! (meilleur total depuis la version #1). Quant à ''gaston'', je regagne 2% sur le total de la batterie. L'ALE a l'air de profiter énormément de cette lib (certainement la création des maillages auxiliaires - je n'ai pas vérifié). * Conséquence de la modif précédente: les objets sont alloués différemment. J'ai eu des problèmes avec ''geniso'' qui castait des pointeurs en ''unsigned int'' (ce qui risque de merdouiller en 64 bits). La solution trouvée est de passer une ''string'' au lieu du ''int'' et d'effectuer un cast dans les routines C++. J'ai également essayer de passer un ''size_t'' mais il semble que SWIG ne s'en sorte pas dans ce cas-là (peut être qu'une prochaine version de SWIG résoudra le problème). __En résumé:__ * Installez le nouveau TBB * Installez les nouvelles libs MKL __Remarque:__ * Cette version est toujours une version série où le calcul parallèle des forces et de la matrice de raideur est désactivé. La raison est simple: ce calcul parallèle ne fonctionne qu'avec certains matériaux (le "stupid material") et certaines options (raideur analytique). La parallélisation du contact est en cours mais également désactivée par défaut. --- //[[romain.boman@gmail.com|Romain BOMAN]] 2011/04/08 10:23//