Bibliothèque de tenseurs C ++ rapide et légère pour le code indépendant de la dimension


20

Je recherche une bibliothèque de tenseurs C ++ qui prend en charge le code indépendant de la dimension. Plus précisément, je dois effectuer des opérations le long de chaque dimension (jusqu'à 3), par exemple calculer une somme pondérée. Les dimensions sont un paramètre de modèle (et donc une constante de temps de compilation). Une autre contrainte est que la bibliothèque doit être relativement légère, donc plutôt de style Eigen / Boost que Trilinos / PETSc.

Aucune suggestion?

Remarque: j'ai jeté un œil à Eigen et je pense qu'il correspond presque exactement au profil, s'il n'était pas limité aux tenseurs 2D. Si je me trompe, corrigez-moi.

Réponses:


9

FTensor est une bibliothèque légère, entièrement en-tête et entièrement basée sur des modèles, qui comprend une notation de sommation ergonomique. Il a été largement testé en 2, 3 et 4 dimensions, mais devrait fonctionner correctement pour n'importe quel nombre de dimensions.


6

Pour ce que ça vaut, Eigen a une classe Tensor comme module non pris en charge.

http://eigen.tuxfamily.org/dox-devel/unsupported/group_ CXX11 _Tensor__Module.html

Je ne l'ai pas utilisé moi-même, je ne peux donc pas en dire plus.

La bibliothèque de classes Armadillo a une classe tenseur d'ordre 3.

http://arma.sourceforge.net/

Je n'ai pas non plus utilisé les capacités de tenseur d'Armadillo, mais j'ai expérimenté avec les classes de matrice standard et elles semblent relativement faciles à utiliser et ont de bonnes performances.


2
Plus précisément, Armadillo a la classe Cube , qui implémente des tenseurs de 3e ordre
mtall

6

Je pense que cette nouvelle tacobibliothèque est vraiment bien aussi.

Le compilateur d'algèbre tenseur (taco) est une bibliothèque C ++ qui calcule les expressions d'algèbre tensorielle sur des tenseurs clairsemés et denses. Il utilise de nouvelles techniques de compilation pour obtenir des performances compétitives avec des noyaux optimisés à la main dans des bibliothèques largement utilisées pour l'algèbre tensorielle clairsemée et l'algèbre linéaire clairsemée.

Vous pouvez utiliser taco comme une bibliothèque C ++ qui vous permet de charger des tenseurs, de lire des tenseurs à partir de fichiers et de calculer des expressions de tenseurs. Vous pouvez également utiliser taco comme générateur de code qui génère des fonctions C qui calculent des expressions tensorielles.

Discuter: https://www.youtube.com/watch?v=Kffbzf9etLE Papier: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
Bienvenue sur SciComp.SE! Pourriez-vous développer votre réponse pour décrire la bibliothèque (les liens peuvent disparaître) et surtout comment elle répond aux exigences de l'OP? Sinon, c'est plus un commentaire.
Christian Clason

On dirait une bibliothèque très intéressante! Il semble cependant que cela génère une étape de compilation supplémentaire. Je me demande s'il serait possible d'implémenter cela à l'aide de modèles à la place?
HelloGoodbye


4

La bibliothèque deal.II ( http://www.dealii.org ), bien qu'écrite à des fins beaucoup plus importantes, possède également une sous-bibliothèque de classes de tenseurs qui fait probablement beaucoup de ce que vous voulez faire. En particulier, il utilise des modèles pour la dimension.

(Avertissement: je suis l'un des principaux auteurs de cette bibliothèque.)


2

La bibliothèque Boost.Numeric.uBlas a récemment ajouté une extension de tensor qui est livrée avec Boost version 1.70. Veuillez consulter https://github.com/boostorg/ublas . Il fournit des opérations matricielles et tensorielles standard avec un ordre variable à l'exécution (nombre de dimensions), des dimensions pour les formats de stockage de premier et dernier ordre (colonnes et lignes principales). Vous pouvez également facilement utiliser la convention de sommation d'Einstein pour exprimer des multiplications de tenseurs aribtraires. Boost.Numeric.uBlas est uniquement en-tête et facile à intégrer dans les projets existants.


Vous pouvez également essayer de jouer avec la bibliothèque sur Godbolt: godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) est une bibliothèque de modèles C ++ TRÈS facile à utiliser pour les tenseurs jusqu'au rang 4 (basé sur la notation indicale), rapide et légère également. Vous n'avez pas besoin de compiler quoi que ce soit, il suffit d'inclure le fichier d'en-tête principal. Je l'ai utilisé sur plusieurs projets et j'ai bien fonctionné.

Il a des fonctionnalités intégrées pour les tenseurs de rang 2 comme les solveurs linéaires, les décompositions svd, LU et Cholesky, etc. Je n'en ai utilisé aucune (j'utilise d'autres bibliothèques pour cela).


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.