11.3.4.4 : Les bibliothèques d'auto-vectorisation



Certaines bibliothèques (Eigen[126]Eigen, Armadillo[127]Armadillo, C++ library for linear algebra \& scientific computing, HPX[124]High Performance ParalleX - HPX, Stellar Group, XTensor[39]XTensor : Multi-dimensional arrays with broadcasting and lazy computing) utilisent la flexibilité du langage C++ noteLe C++ est un langage qui permet l'utilisation des template afin de créer des classes et des fonctions génériques. Cette fonctionnalité a été détournée pour créer les expression template[153]Fast Expression Templates, 2005, H\ardtlein, Jochen and Linke, Alexander and Pflaum, Christoph, qui permettent de programmer d'une façon qui forcera le compilateur à optimiser et vectoriser naturellement. afin de simplifier et vectoriser les calculs à effectuer.



Avantages : ces bibliothèques permettent de manipuler des objets Vector, Matrix, Tensor qui facilitent l'écriture et la lecture des programmes. Cette simplicité leur permet de rivaliser en termes de performance avec les bibliothèques les plus rapides comme MKL[33]Math Kernel Library, Intel, BLAS[35]Basic Linear Algebra Subprograms, GNU, ATLAS[38]Automatically Tuned Linear Algebra Software (ATLAS), ou LAPACK[36]LAPACK - Linear Algebra PACKage.



Inconvénients : ces bibliothèques ont leurs spécialités mais ne sont pas compatibles entre elles. Armadillo[127]Armadillo, C++ library for linear algebra \& scientific computing est très performante pour l'utilisation de petites matrices, tandis que Eigen[126]Eigen sera plus efficace sur les grandes matrices et HPX[124]High Performance ParalleX - HPX, Stellar Group permettra un calcul distribué pour de très grandes matrices noteLes tests de performances sont généralement donnés sur des matrices mais l'utilisation de vecteurs ou de tenseurs en général est possible.. Le temps de compilation et la consommation mémoire pendant la compilation sont bien plus importants qu'avec des bibliothèques plus classiques :

  • Eigen: $12$ secondes pour compiler un fichier de 100 lignes, utilise $400\,$ Mo de RAM
  • HPX: $4\,$ Go de RAM suivant les utilisations