Perpustakaan tensor C ++ cepat dan ringan untuk kode dimensi-agnostik

20

Saya mencari perpustakaan tensor C ++ yang mendukung kode dimensi-agnostik. Khususnya, saya perlu melakukan operasi di sepanjang setiap dimensi (hingga 3), misalnya menghitung jumlah tertimbang. Dimensi adalah parameter templat (dan karenanya konstanta waktu kompilasi). Kendala lain adalah bahwa perpustakaan harus relatif ringan, jadi agak Eigen / Boost-style daripada Trilinos / PETSc.

Ada saran?

Catatan: Saya sudah melihat Eigen dan berpikir itu hampir cocok dengan profilnya, jika tidak terbatas pada tensor 2D. Jika saya salah dengan ini, tolong perbaiki saya.

Michael Schlottke-Lakemper
sumber

Jawaban:

9

FTensor adalah perpustakaan yang ringan, hanya tajuk, sepenuhnya templated yang mencakup notasi penjumlahan yang ergonomis. Ini telah diuji secara luas dalam 2, 3, dan 4 dimensi, tetapi harus bekerja dengan baik untuk sejumlah dimensi.

Baja Damaskus
sumber
6

Untuk apa nilainya, Eigen memang memiliki kelas Tensor sebagai modul yang tidak didukung.

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

Saya belum menggunakannya sendiri sehingga tidak bisa mengatakan lebih banyak tentang itu.

Perpustakaan kelas Armadillo memiliki kelas tensor orde 3.

http://arma.sourceforge.net/

Saya belum pernah menggunakan kemampuan tensor Armadillo tetapi telah bereksperimen dengan kelas matriks standar dan mereka tampaknya relatif mudah digunakan dan memiliki kinerja yang baik.

Bill Greene
sumber
2
Lebih khusus lagi, Armadillo memiliki kelas Cube , yang mengimplementasikan tensor orde 3
mtall
6

Saya pikir tacolib baru ini juga sangat bagus.

Tensor Algebra Compiler (taco) adalah pustaka C ++ yang menghitung ekspresi aljabar tensor pada tensor jarang dan padat. Ini menggunakan teknik kompiler baru untuk mendapatkan kinerja yang kompetitif dengan kernel yang dioptimalkan dengan tangan di perpustakaan yang banyak digunakan untuk kedua aljabar tensor jarang dan aljabar linier jarang.

Anda bisa menggunakan taco sebagai pustaka C ++ yang memungkinkan Anda memuat tensor, membaca tensor dari file, dan menghitung ekspresi tensor. Anda juga dapat menggunakan taco sebagai pembuat kode yang menghasilkan fungsi C yang menghitung ekspresi tensor.

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

Dhi Aurrahman
sumber
2
Selamat datang di SciComp.SE! Bisakah Anda memperluas jawaban Anda untuk menggambarkan perpustakaan (tautan bisa mati) dan terutama bagaimana memenuhi persyaratan OP? Kalau tidak, itu lebih dari komentar.
Christian Clason
Sepertinya perpustakaan yang sangat menarik! Sepertinya ini menghasilkan langkah kompilasi tambahan. Saya bertanya-tanya apakah mungkin untuk mengimplementasikan ini menggunakan templat?
HelloGoodbye
4

Perpustakaan deal.II ( http://www.dealii.org ), walaupun ditulis untuk tujuan yang jauh lebih besar, juga memiliki sub-perpustakaan kelas tensor yang kemungkinan melakukan banyak hal yang ingin Anda lakukan. Secara khusus, ia menggunakan template untuk dimensi.

(Penafian: Saya adalah salah satu penulis utama perpustakaan ini.)

Wolfgang Bangerth
sumber
2

Library Boost.Numeric.uBlas baru-baru ini menambahkan ekstensi tensor yang dikirimkan bersama Boost versi 1.70. Silakan lihat di https://github.com/boostorg/ublas . Ini memberikan operasi matriks dan tensor standar dengan urutan variabel runtime (jumlah dimensi), dimensi untuk format penyimpanan urutan pertama dan terakhir (kolom dan baris utama). Anda juga dapat dengan mudah menggunakan konvensi penjumlahan Einstein untuk mengekspresikan perkalian tensor aribtrary. Boost.Numeric.uBlas hanya header dan mudah diintegrasikan ke dalam proyek yang ada.

Cem Bassoy
sumber
Anda juga dapat mencoba bermain-main dengan perpustakaan di Godbolt: godbolt.org/z/Sf5V77
Cem Bassoy
1

Saya belum menggunakannya sendiri tetapi libtensor tampaknya memenuhi persyaratan Anda.

Juan M. Bello-Rivas
sumber
1

LTensor ( https://code.google.com/p/ltensor/ ) adalah pustaka template C ++ yang SANGAT mudah digunakan untuk tensor hingga peringkat 4 (berdasarkan notasi indik), cepat dan ringan juga. Anda tidak perlu mengkompilasi apa pun hanya perlu menyertakan file header utama. Saya telah menggunakannya pada beberapa proyek dan bekerja dengan baik.

Ini memiliki beberapa fitur bawaan untuk tensor peringkat-2 seperti pemecah linear, svd, LU dan dekomposisi Cholesky, dll. Saya tidak menggunakan salah satu dari mereka (saya menggunakan perpustakaan lain untuk itu).

Mauricio Cele López Belón
sumber
0

Ada juga ITensor (membutuhkan C ++ 17).

Jakub Klinkovský
sumber