用于与维度无关的代码的快速、轻量级 C++ 张量库

计算科学 C++ 图书馆 张量
2021-11-30 20:41:57

我正在寻找一个支持与维度无关的代码的 C++ 张量库。具体来说,我需要沿每个维度(最多 3 个)执行操作,例如计算加权和。尺寸是模板参数(因此是编译时常量)。另一个限制是库应该是相对轻量级的,所以应该是 Eigen/Boost 风格而不是 Trilinos/PETSc。

有什么建议?

注意:我看过 Eigen 并认为它几乎完全符合轮廓,如果它不限于 2D 张量。如果我对此有误,请纠正我。

4个回答

FTensor是一个轻量级的、只有标题的、完全模板化的库,其中包括符合人体工程学的求和符号。它已经在 2、3 和 4 维度上进行了广泛的测试,但对于任何数量的维度都应该可以正常工作。

就其价值而言,Eigen 确实有一个 Tensor 类作为不受支持的模块。

http://eigen.tuxfamily.org/dox-devel/unsupported/group_CXX11 _Tensor__Module.html _

我自己没有用过,所以不能多说。

Armadillo 类库有一个三阶张量类。

http://arma.sourceforge.net/

我也没有使用过犰狳的张量功能,但已经尝试过标准矩阵类,它们似乎相对易于使用并且具有良好的性能。

我认为这个新的taco库也非常好。

张量代数编译器 (taco) 是一个 C++ 库,用于计算稀疏和密集张量上的张量代数表达式。它使用新颖的编译器技术来获得与广泛使用的稀疏张量代数和稀疏线性代数库中的手动优化内核相比的性能。

您可以将 taco 用作 C++ 库,它允许您加载张量、从文件中读取张量以及计算张量表达式。您还可以将 taco 用作生成计算张量表达式的 C 函数的代码生成器。

谈话:https ://www.youtube.com/watch?v=Kffbzf9etLE 论文:http ://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf

Xtensor 是一种现代方法,并且越来越受欢迎。 https://github.com/QuantStack/xtensor