J'ajuste mon code GEMM et je le compare avec Eigen et MKL. J'ai un système avec quatre cœurs physiques. Jusqu'à présent, j'ai utilisé le nombre de threads par défaut d'OpenMP (huit sur mon système). Je pensais que cela serait au moins aussi bon que quatre threads. Cependant, j'ai découvert aujourd'hui que si j'exécute Eigen et mon propre code GEMM sur une grande matrice dense (1000x1000), j'obtiens de meilleures performances en utilisant quatre threads au lieu de huit. L'efficacité est passée de 45% à 65%. Je pense que cela peut également être vu dans ce graphique https://plafrim.bordeaux.inria.fr/doku.php?id=people:guenneba
La différence est assez importante. Cependant, les performances sont beaucoup moins stables. Les performances sautent un peu à chaque itération, aussi bien avec Eigen qu'avec mon propre code GEMM. Je suis surpris que l'Hyperthreading rende les performances si mauvaises. Je suppose que ce n'est pas une question. C'est une observation inattendue sur laquelle j'espère trouver un retour.
Je vois qu'il est également suggéré de ne pas utiliser l'hyper enfilage.
Comment accélérer le produit matriciel de la bibliothèque Eigen ?
J'ai une question concernant la mesure des performances maximales. Ce que je fais maintenant est d'exécuter CPUz et de regarder la fréquence pendant que j'exécute mon code GEMM, puis d'utiliser ce nombre dans mon code (4,3 GHz sur un système overclocké que j'utilise). Puis-je me fier à ce chiffre pour tous les threads ? Comment puis-je connaître la fréquence par thread pour déterminer le maximum ? Comment puis-je prendre en compte correctement le turbo boost ?