commit:2011:04_08
Commit 2011-04-08
Parallélisme
- Utilisation des “libs TBB debug” en debug (Windows & Linux) avec
TBB_USE_DEBUG
etTBB_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
deDBSet
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 surblueberry
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 enunsigned int
(ce qui risque de merdouiller en 64 bits). La solution trouvée est de passer unestring
au lieu duint
et d'effectuer un cast dans les routines C++. J'ai également essayer de passer unsize_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 2011/04/08 10:23
commit/2011/04_08.txt · Last modified: 2018/05/04 16:34 by boman