Commit 2014-10-02
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 //