Boyutsal agnostik kod için hızlı, hafif C ++ tensör kütüphanesi


20

Boyut agnostik kodu destekleyen bir C ++ tensör kütüphanesi arıyorum. Özellikle, her boyut boyunca (3'e kadar) işlemler yapmam gerekiyor, örneğin bir ağırlıklı toplam hesaplanıyor. Boyutlar bir şablon parametresidir (ve dolayısıyla bir derleme zamanı sabiti). Başka bir kısıt, kütüphanenin nispeten hafif olması gerektiğinden Trilinos / PETSc'den daha fazla Eigen / Boost tarzı olmalıdır.

Herhangi bir öneri?

Not: Eigen'e bir göz attım ve 2D tensörlerle sınırlı olmasaydı neredeyse profile tam olarak uyduğunu düşünüyorum. Eğer yanılmışsam, lütfen beni düzeltin.

Yanıtlar:


9

FTensor , ergonomik toplama gösterimi içeren hafif, yalnızca başlık, tamamen ayarlanmış bir kütüphanedir. 2, 3 ve 4 boyutta kapsamlı bir şekilde test edilmiştir, ancak herhangi bir boyut için iyi çalışmalıdır.


6

Değeri ne olursa olsun, Eigen desteklenmeyen bir modül olarak bir Tensor sınıfına sahiptir.

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

Ben kullanmadım bu yüzden daha fazla söyleyemem.

Armadillo sınıf kütüphanesi 3. dereceden bir tensör sınıfına sahiptir.

http://arma.sourceforge.net/

Armadillo'nun tensör yeteneklerini de kullanmadım, ancak standart matris sınıflarını denedim ve kullanımı nispeten kolay görünüyor ve iyi bir performansa sahipler.


2
Daha spesifik olarak, Armadillo, 3. dereceden tensörleri uygulayan Cube sınıfına sahiptir
mtall

6

Bence bu yeni tacolib de gerçekten iyi.

Tensör Cebir Derleyici (taco) seyrek ve yoğun tensörlerde tensör cebir ifadelerini hesaplayan bir C ++ kütüphanesidir. Hem seyrek tensör cebiri hem de seyrek lineer cebir için yaygın olarak kullanılan kütüphanelerde elle optimize edilmiş çekirdeklerle performansı rekabetçi hale getirmek için yeni derleyici tekniklerini kullanır.

Taco'yu, tensörleri yüklemenizi, dosyalardan tensörleri okumanızı ve tensör ifadelerini hesaplamanızı sağlayan bir C ++ kütüphanesi olarak kullanabilirsiniz. Taco'yu, tensör ifadelerini hesaplayan C işlevleri üreten bir kod üreticisi olarak da kullanabilirsiniz.

Tartışma: https://www.youtube.com/watch?v=Kffbzf9etLE Makale: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
SciComp.SE'ye hoş geldiniz! Cevabınızı kütüphaneyi (bağlantılar kesilebilir) ve özellikle de OP'nin gereksinimlerini nasıl karşıladığını açıklamak için genişletebilir misiniz? Aksi takdirde daha çok bir yorum.
Christian Clason

Çok ilginç bir kütüphane gibi görünüyor! Bu, ekstra bir derleme adımı oluşturuyor gibi görünüyor. Bunun yerine şablonlar kullanarak bu uygulamanın mümkün olup olmadığını merak ediyorum?
HelloGoodbye


4

Deal.II kütüphanesi ( http://www.dealii.org ), daha büyük amaçlar için yazılırken, muhtemelen yapmak istediğiniz şeylerin çoğunu yapan bir tensör sınıfları alt kütüphanesine de sahiptir. Özellikle, boyut için şablonlar kullanır.

(Feragatname: Bu kütüphanenin baş yazarlarından biriyim.)


2

Boost.Numeric.uBlas kütüphanesi yakın zamanda Boost sürüm 1.70 ile birlikte gelen bir tensör uzantısı ekledi. Lütfen https://github.com/boostorg/ublas adresine bir göz atın . Çalışma zamanı değişkeni sırası (boyut sayısı), birinci ve son derece depolama biçimleri için boyutlar (sütun ve satır-büyük) ile standart matris ve tensör işlemleri sağlar. Aynı zamanda, ainstral tensör çarpımlarını ifade etmek için Einstein toplama kuralını da kolayca kullanabilirsiniz. Boost.Numeric.uBlas yalnızca başlıktır ve mevcut projelere kolayca entegre edilebilir.


Godbolt'taki kütüphane ile oynamaya da çalışabilirsiniz: godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) 4 sıra (tensel gösterime dayalı) tensörler için hızlı ve hafif de kullanımı kolay ÇOK C ++ şablon kütüphanesidir. Herhangi bir şey derlemenize gerek yoktur, sadece ana başlık dosyasını eklemeniz gerekir. Birkaç projede kullandım ve iyi çalıştım.

Doğrusal çözücüler, svd, LU ve Cholesky ayrışmaları gibi sıra-2 tensörler için bazı yerleşik özelliklere sahiptir. Bunlardan hiçbirini kullanmadım (bunun için başka kütüphaneler kullanıyorum).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.