Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2011:04_08

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 2011/04/08 10:23

commit/2011/04_08.txt · Last modified: 2018/05/04 16:34 by boman