La bibliothèque de modèles de matrices (MTL) est une bibliothèque d'algèbre linéaire pour les programmes C++ .
Le MTL utilise la programmation par modèles , ce qui réduit considérablement la longueur du code. Toutes les matrices et tous les vecteurs sont disponibles dans tous les formats numériques classiques : float, double, complex<float>ou complex<double>.
De plus, la programmation générique permet l'utilisation de types arbitraires pourvu qu'ils fournissent les opérations nécessaires. Par exemple, on peut utiliser des formats d'entiers arbitraires (par exemple `int` unsigned short), des types pour l'arithmétique d'intervalles (par exemple `boost::interval`) issus des bibliothèques Boost C++ , des quaternions (par exemple `boost::quaternion`), des types de précision supérieure (par exemple, la bibliothèque GNU Multi-Precision ) et des types définis par l'utilisateur.
La MTL prend en charge plusieurs implémentations de matrices denses et de matrices creuses . MTL2 a été développé par Jeremy Siek et Andrew Lumsdaine.
La dernière version, MTL4, est développée par Peter Gottschling et Andrew Lumsdaine. Elle reprend la plupart des fonctionnalités de MTL2 et y ajoute de nouvelles techniques d'optimisation, comme le méta-réglage ; par exemple, le déroulement de boucle de conteneurs de taille dynamique peut être spécifié lors de l'appel de fonction. L'évolutivité des performances, indépendante de la plateforme, est assurée par des structures de données et des algorithmes récursifs.
Les applications génériques peuvent être écrites dans une notation naturelle, v += A*q - w;tandis que la bibliothèque sélectionne les algorithmes appropriés : produits matrice-vecteur, produits matriciels, produits vecteur-scalaire, etc. L’objectif est d’intégrer les problématiques de performance au sein de la bibliothèque et de fournir aux chercheurs une interface intuitive. MTL4 est utilisé dans différents logiciels d’éléments finis et de volumes finis , comme le projet FEniCS .