Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2014:10_02

Commit 2014-10-02

  • Performance entre TBB & MKL Blas
UPDATE : mettez à jours vos libs (une variable d'enum des mkl a changé de nom entre la version 10 et 11 !!!) ⇒ /ftpDisk/metafor/bin/VS2012_X64/LibsVS2012_2014-09-30.zip

TBB/MKL

  • Utilisation d'un queuing_mutex en remplacement du spin_mutex dans StrMatrixLoopBody
  • Définition d'un typedef MatrMutexType pour facilement définir et changer de mutex (developpement)
  • Définition d'un typedef VectMutexType dans StrVectorLoopBody (défini à spin_mutex pour l'instant)
  • mtBlas.cpp :
    • modification du set_num_threads(n) en mkl_domain_set_num_threads ( 1, MKL_DOMAIN_ALL ) et mkl_domain_set_num_threads ( n, MKL_DOMAIN_PARDISO ) (soit les blas ne seront parallèles QUE sur le solveur PARDISO)
    • Ajout d'une option kmp_set_blocktime(0) qui défini le temps durant lesquels les threads OPENMP “tournent à vide” avant de s'éteindre (défaut 200ms) qui était la cause principale du ralentissement de Metafor
  • StrMatrixLoopBody :
    • Modification de l'assemblage de la matrice de raideur (en séparant la recherche de la position de la valeur à ajouter dans la matrice globale de l'assemblage proprement dit)
    • activation de la lock sur la phase d'assemblage uniquement (le plus tard possible)

IOMP

  • Séparation dans les makefiles des IOMP_LIB_PATH & IOMP_INCLUDE_PATH (qui étaient auparavant insérées dans les MKL_LIB_PATH & MKL_INCLUDE_PATH)
  • Ajout du fichier findIOMP.cmake cherchant les variables IOMP
  • Ajout d'une option : MKL_USE_IOMP selon que les mkl utilisent la librairies de threading de intel (iomp) ou de gnu (gomp). Option à True par défaut, obligatoire si on compile avec le compilateur intel ou le visual, optionnelle avec le gcc (restera à tester les perfs…).
  • Correction de tous les cmake pour chaque machine
Je n'ai pas pu vérifier toutes les configuration de machines ⇒ en cas de soucis de configuration sur votre machine, vérifier que les répertoires par défaut machine.cmake correspond bien à la configuration de votre machine !!!

CSRMatrix

  • Correction de l'affichage du nombre d'éléments de la matrices CSR (qui affichait des valeurs négatives suite à un overflow)
  • Modification de la recherche d'index de la matrice CSR (en remplacant la recherche linéaire sur la ligne par une recherche dichotomique sur cette même ligne)
  • split de la fonction d'assemblage en
    • la recherche de l'index dans le tableau des valeurs : int CSRMatrix::findIndex(int i, int j)
    • l'assemblage proprement dit (d'une liste de valeurs sur une liste d'index): void CSRMatrix::append(std::vector<int> index, std::vector<double> vals)
  • La fonction d'assemblage par composante reste présente : void CSRMatrix::assemble(int i, int j, double val)

SkylineMatrix

  • Même split de l'assemblage en deux fonctions findIndex & append
  • Afin de différencier si le terme appartient à situ ou sitl dans le solveur non symétrique, j'ai utilisé la technique pourrie “PUT A MINUS SIGN” sur les termes de la triangulaire inférieure (sitl). Faites donc attention si vous devez modifier ces fonctions.
  • nb: dans le solveur symétrique, la diagonale est stoquée dans SITL, alors que dans le non sym, elle est dans SITU !!!

Batterie

  • Ajout d'une catégorie de tests “parallel” (oo_meta/apps/parallel) contenant des tests qui tournent 1 à la fois, mais en parallèle sur les blas & tbb (le nombre de threads = nombre de tests tournant en même temps pour les tests “normaux”)
  • ajout de tests dérivés de apps.iso.tubeT (en isotherme & maillage plus dense pour tester le parallèle)
machine Solveur Tbb Blas (mkl) Real User
corto DSS 1 1 374 375
Thorgal (gomp) DSS 1 1
Thorgal (iomp) DSS 1 1
blueberry DSS 1 1 608 610
corto DSS 1 6 150 528
Thorgal (gomp) DSS 1 8 171 800
Thorgal (iomp) DSS 1 8 171 849
blueberry DSS 1 4 264 818
corto DSS 6 6 114 549
Thorgal (gomp) DSS 8 8 284 1982
Thorgal (iomp) DSS 8 8 126 863
blueberry DSS 4 4 220 822
corto DSS 6 1 339 386
Thorgal (gomp) DSS 8 1 641 705
Thorgal (iomp) DSS 8 1 552 608
blueberry DSS 4 1 565 612
corto SymDSS 1 1 231 232
Thorgal (gomp) SymDSS 1 1
Thorgal (iomp) SymDSS 1 1
blueberry SymDSS 1 1 358 359
corto SymDSS 6 6 76 324
Thorgal (gomp) SymDSS 8 8 162 1026
Thorgal (iomp) SymDSS 8 8 86 551
blueberry SymDSS 4 4 136 494

Divers

  • Correction de toolbox.utilities pour que les tests qui tournent en “execfile” puissent profiter des disques locaux sur le cluster (application correcte du _theWDirRoot sur le wdir de la fonction setDir)
  • Correction des tests & methodes de apps.remeshing / apps.welding.complex / apps.biomec.complex / apps.XFEM.complex pour que tous les résultats / fichiers temporaires soient contenu dans un répertoire relatif au test du workspace
  • il reste encore marcus.msh, mesh.msh & papillon.msh dans baseDir … (si qqn a l'occasion de régler le probleme …)
  • idem workspace/toothPDLMesh qui traine aussi …
  • Ajout de areaInContact & paramétrisation de apps.iso.tubeT
  • MiscValueExtractor : ajout de 3 extracteurs : EXT_USER_CPU, EXT_REAL_CPU, EXT_KERNEL_CPU
  • Suppression du timer TSC-OMP (qui renvoyait toujours 0.0)
  • Nouvelle version des libs VS2012 X64 sur le ftp :
    • mise à jour des tbb (versio 4.3) / cmake (3.0.2) / mkl (11.1.2.1)
    • ajout ghostscript / imageMagick
    • /ftpDisk/metafor/bin/VS2012_X64/LibsVS2012_2014-09-30.zip

Fichiers ajoutés/supprimés

 
A : oo_meta\CMake\FindIOMP.cmake
R : oo_meta\CMake\natacha.cmake

Tests ajoutés/supprimés

A : oo_meta\apps\parallel\largeTubeDssTbb1Blas.py
A : oo_meta\apps\parallel\largeTubeDssTbbBlas.py
A : oo_meta\apps\parallel\largeTubeDssTbbBlas1.py
A : oo_meta\apps\parallel\largeTubeSymDssTbbBlas.py
R : 

Luc Papeleux 2014/09/16

commit/2014/10_02.txt · Last modified: 2016/03/30 15:23 (external edit)