次元に依存しないコード用の高速で軽量なC ++テンソルライブラリ


20

ディメンションに依存しないコードをサポートするC ++テンソルライブラリを探しています。具体的には、加重合計の計算など、各ディメンション(最大3)に沿って操作を実行する必要があります。次元はテンプレートパラメータです(したがって、コンパイル時の定数です)。別の制約として、ライブラリは比較的軽量である必要があるため、Trilinos / PETScよりもEigen / Boostスタイルが必要です。

助言がありますか?

注:私はEigenを見ており、2Dテンソルに限定されていなければ、プロファイルにほぼぴったり合っていると思います。これに間違えられたら、私を修正してください。

回答:


9

FTensorは、軽量でヘッダーのみの完全にテンプレート化されたライブラリであり、人間工学に基づいた合計表記が含まれています。2、3、および4次元で広範囲にテストされていますが、任意の数の次元で正常に動作するはずです。


6

Eigenには、サポートされていないモジュールとしてTensorクラスがあります。

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

私は自分で使ったことがないので、それ以上詳しくは言えません。

Armadilloクラスライブラリには3次のテンソルクラスがあります。

http://arma.sourceforge.net/

Armadilloのテンソル機能も使用していませんが、標準のマトリックスクラスを試しましたが、それらは比較的使いやすく、優れたパフォーマンスを発揮します。


2
具体的には、アルマジロは持っているキューブクラス、実装3次テンソル
mtall

6

この新しいtacoライブラリも本当に良いと思います。

Tensor Algebra Compiler(taco)は、スパースおよびデンステンソルでテンソル代数式を計算するC ++ライブラリです。スパーステンソル代数とスパース線形代数の両方で広く使用されているライブラリで、手作業で最適化されたカーネルと競争力のある新しいコンパイラ技術を使用します。

tacoは、テンソルのロード、ファイルからのテンソルの読み取り、テンソル式の計算を可能にするC ++ライブラリとして使用できます。tacoは、テンソル式を計算するC関数を生成するコードジェネレーターとして使用することもできます。

トーク:https : //www.youtube.com/watch?v=Kffbzf9etLE ペーパー:http : //tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
SciComp.SEへようこそ!ライブラリを説明するためにあなたの答えを広げてください(リンクは死んでしまう可能性があります)、特にOPの要件をどのように満たしていますか?それ以外の場合は、コメントです。
クリスチャンクラソン

非常に興味深いライブラリのようです!ただし、これにより追加のコンパイル手順が生成されるようです。代わりにテンプレートを使用してこれを実装することが可能かどうか疑問に思っていますか?
HelloGoodbye


4

deal.IIライブラリ(http://www.dealii.org)は、はるかに大きな目的のために書かれていますが、あなたがやりたいことの多くを行う可能性が高いテンソルクラスのサブライブラリも持っています。特に、ディメンションのテンプレートを使用します。

(免責事項:私はこのライブラリの主要著者の一人です。)


2

ライブラリBoost.Numeric.uBlasは、Boostバージョン1.70に同梱されているテンソル拡張機能を最近追加しました。見ていてくださいhttps://github.com/boostorg/ublasを。実行時変数の順序(次元数)、一次および最後の順序のストレージ形式(列および行優先)の次元を備えた標準の行列およびテンソル操作を提供します。また、アインシュタインの総和規則を簡単に使用して、異常なテンソル乗算を表現することもできます。Boost.Numeric.uBlasはヘッダーのみであり、既存のプロジェクトに簡単に統合できます。


また、Godboltのライブラリをいじってみることもできます。godbolt.org/ z
Cem Bassoy



1

LTensor(https://code.google.com/p/ltensor/)は、非常に使いやすいC ++テンプレートライブラリで、ランク4(インディカル表記に基づく)までのテンソル用で、高速で軽量です。メインヘッダーファイルをインクルードするだけでコンパイルする必要はありません。私はいくつかのプロジェクトでそれを使用し、うまくいきました。

線形ソルバー、svd、LU、Cholesky分解などのランク2テンソル用の組み込み機能がいくつかあります。これらはいずれも使用しませんでした(他のライブラリを使用しています)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.