J'utilise Julia pour l'instant mais j'ai une fonction critique de performance qui nécessite une énorme quantité d'opérations matricielles répétées sur de petites matrices de taille fixe (3 dimensions ou 4 dimensions). Il semble que toutes les opérations matricielles dans Julia soient traitées par un back-end BLAS et LAPACK. Il apparaît également qu'il y a beaucoup d'allocation de mémoire dans certaines de ces fonctions.À quel point Eigen est-il plus rapide pour les petites matrices de taille fixe?
Il existe une bibliothèque julia pour small matrices qui propose des accélérations impressionnantes pour les matrices 3x3, mais n'a pas été mise à jour depuis 3 ans. Je pense réécrire ma fonction critique de performance en Eigen
Je sais que Eigen prétend être vraiment bon pour les matrices de taille fixe, mais j'essaie toujours de juger si je devrais réécrire cette fonction dans Eigen ou non. Les performances benchmarks sont pour des matrices de taille dynamique. Est-ce que quelqu'un a des données pour suggérer quelle performance on obtient des matrices de taille fixe? Les types d'opérations que je fais sont la matrice matrice x, la matrice x le vecteur, les solutions linéaires définies positives.
Faites des tests de performance et voyez par vous-même. C'est la seule façon de répondre à la question avec certitude. Assurez-vous de compiler Eigen avec optimisation. Et essayez-le avec et sans OpenMP activé. – duncan
Bon moment pour rappeler la citation: "Première règle d'optimisation: Ne le faites pas!", Ou les mots sages de Knuth: "L'optimisation prématurée est la racine de tout le mal.". Et sur une note positive: S'il y a un goulot d'étranglement de performance spécifique, alors partager un peu de code dans la question peut aider. –
Avez-vous essayé 'Base.LinAlg.matmul3x3!' Et d'autres fonctions dans ce module? Ils contournent BLAS et permettent des calculs d'allocation minimaux. –