Libreria tensore C ++ veloce e leggera per codice indipendente dalla dimensione


20

Sto cercando una libreria tensoriale C ++ che supporti il ​​codice indipendente dalla dimensione. In particolare, devo eseguire operazioni lungo ciascuna dimensione (fino a 3), ad esempio calcolando una somma ponderata. Le dimensioni sono un parametro modello (e quindi una costante di compilazione). Un altro vincolo è che la libreria dovrebbe essere relativamente leggera, quindi piuttosto Eigen / Boost-style rispetto a Trilinos / PETSc.

Eventuali suggerimenti?

Nota: ho dato un'occhiata a Eigen e penso che si adatti quasi esattamente al profilo, se non fosse limitato ai tensori 2D. Se mi sbaglio, per favore correggimi.

Risposte:


9

FTensor è una libreria leggera, solo intestazione, completamente basata su modelli che include una notazione sommatoria ergonomica. È stato ampiamente testato in 2, 3 e 4 dimensioni, ma dovrebbe funzionare bene per qualsiasi numero di dimensioni.


6

Per quello che vale, Eigen ha una classe Tensor come modulo non supportato.

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

Non l'ho usato da solo, quindi non posso dire di più.

La libreria di classi Armadillo ha una classe tensore di terzo ordine.

http://arma.sourceforge.net/

Non ho nemmeno usato le capacità tensore di Armadillo ma ho sperimentato le classi di matrici standard e sembrano relativamente facili da usare e hanno buone prestazioni.


2
Più specificamente, Armadillo ha la classe Cube , che implementa i tensori del 3 ° ordine
mtall

6

Penso che anche questa nuova tacolibreria sia davvero buona.

Tensor Algebra Compiler (taco) è una libreria C ++ che calcola le espressioni di algebra tensoriale su tensori sparsi e densi. Utilizza nuove tecniche di compilazione per ottenere prestazioni competitive con kernel ottimizzati a mano in librerie ampiamente utilizzate sia per l'algebra tensoriale sparsa che per l'algebra lineare sparsa.

È possibile utilizzare taco come libreria C ++ che consente di caricare tensori, leggere tensori da file e calcolare espressioni di tensori. È inoltre possibile utilizzare taco come generatore di codice che genera funzioni C che calcolano le espressioni tensore.

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


2
Benvenuti su SciComp.SE! Potresti espandere la tua risposta per descrivere la biblioteca (i collegamenti possono essere interrotti) e soprattutto in che modo soddisfa i requisiti del PO? Altrimenti è più un commento.
Christian Clason,

Sembra una biblioteca molto interessante! Sembra che questo generi un ulteriore passo di compilazione, però. Mi chiedo se sarebbe possibile implementare questo utilizzando i modelli invece?
Ciao Arrivederci


4

La libreria deal.II ( http://www.dealii.org ), sebbene sia stata scritta per scopi molto più grandi, ha anche una sotto-biblioteca di classi tensoriali che probabilmente fa molto di ciò che vuoi fare. In particolare, utilizza modelli per la dimensione.

(Dichiarazione di non responsabilità: sono uno dei principali autori di questa biblioteca.)


2

La libreria Boost.Numeric.uBlas ha recentemente aggiunto un'estensione tensore che viene fornita con la versione 1.70 di Boost. Dai un'occhiata a https://github.com/boostorg/ublas . Fornisce operazioni a matrice e tensore standard con ordine variabile di runtime (numero di dimensioni), dimensioni per i formati di archiviazione del primo e dell'ultimo ordine (colonna e riga maggiore). Puoi anche facilmente usare la convenzione di sommatoria di Einstein per esprimere le moltiplicazioni del tensore aribtrale. Boost.Numeric.uBlas è solo intestazione e facile da integrare in progetti esistenti.


Potresti anche provare a giocare con la libreria su Godbolt: godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) è una libreria di modelli C ++ MOLTO facile da usare per tensori fino al grado 4 (basato su notazione indica), veloce e leggera. Non è necessario compilare nulla, è sufficiente includere il file di intestazione principale. L'ho usato su diversi progetti e ha funzionato bene.

Ha alcune funzionalità integrate per tensori di grado 2 come solutori lineari, decomposizioni svd, LU e Cholesky, ecc. Non ne ho usato nessuno (per questo uso altre librerie).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.