TiledArray:高性能块稀疏张量计算框架
项目介绍
TiledArray 是一个可扩展的块稀疏张量计算框架,专为快速组合高性能张量运算而设计,广泛应用于量子力学中的多体问题。该框架允许用户使用原生 C++ 代码编写复杂的张量表达式,这些代码与标准数学符号非常接近。TiledArray 的设计目标是能够在从单个多核计算机到大规模分布式内存多处理器的各种计算环境中高效运行。
TiledArray 构建在 MADNESS 并行运行时(MADWorld)之上,MADNESS 是 MADNESS 数值计算框架 的一部分。该项目目前仍在积极开发中,得到了美国国家科学基金会、阿尔弗雷德·P·斯隆基金会、卡米尔和亨利·德雷福斯基金会以及能源部的慷慨支持。
项目技术分析
TiledArray 的核心技术包括:
- 块稀疏张量运算:支持密集和块稀疏张量的通用算术运算。
- 高层次数学表达式:用户可以使用类似于数学符号的高层次表达式进行张量运算,同时也可以访问底层数据和算法。
- 大规模并行计算:支持共享内存和分布式内存的并行计算,能够在多处理器环境中实现高效的并行性能。
- 深度可定制性:从张量块类型(如支持磁盘存储或按需计算的张量)到稀疏张量结构的描述方式,所有组件均可定制。
项目及技术应用场景
TiledArray 适用于以下应用场景:
- 量子力学计算:在多体量子力学问题中,张量运算的效率至关重要。TiledArray 能够高效处理复杂的张量表达式,适用于量子化学、量子物理等领域。
- 高性能计算:在大规模并行计算环境中,TiledArray 能够充分利用多核和分布式内存资源,适用于超级计算机和集群环境。
- 科学计算:在需要处理大规模数据集和复杂计算的科学计算领域,TiledArray 提供了高效的解决方案。
项目特点
TiledArray 的主要特点包括:
- 高性能:通过块稀疏张量运算和并行计算技术,TiledArray 在处理大规模张量运算时表现出色。
- 易用性:用户可以使用类似于数学符号的高层次表达式进行编程,降低了学习和使用门槛。
- 可扩展性:TiledArray 能够从单个多核计算机扩展到大规模分布式内存多处理器,适应不同的计算环境。
- 可定制性:框架的所有组件均可定制,用户可以根据需求进行深度定制。
示例代码
以下是使用 TiledArray 进行矩阵乘法和复杂张量表达式的示例代码:
#include <tiledarray.h>
int main(int argc, char** argv) {
// 初始化并行运行时
TA::World& world = TA::initialize(argc, argv);
// 构造一个2D分块范围结构,定义数组的分割方式
auto trange = TA::TiledRange{
TA::TiledRange1{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100},
TA::TiledRange1{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}};
// 构造并填充参数数组
TA::TArrayD A(world, trange);
TA::TArrayD B(world, trange);
A.fill_local(3.0);
B.fill_local(2.0);
// 构造结果数组
TA::TArrayD C;
// 执行分布式矩阵乘法
C("i,j") = A("i,k") * B("k,j");
// 关闭并行运行时
TA::finalize();
return 0;
}
性能表现
TiledArray 在 IBM BlueGene/Q 超级计算机上的密集方阵乘法性能表现优异,与 Cyclops Tensor Framework 和 ScaLAPACK 相比,具有显著的并行性能优势。此外,TiledArray 在更复杂的张量表达式(如耦合簇单双激发(CCSD)波函数求解器)中也展示了出色的并行扩展性。
安装与使用
TiledArray 的安装过程简单明了,用户可以通过以下命令进行安装:
$ git clone https://github.com/ValeevGroup/TiledArray.git tiledarray
$ cd tiledarray
$ cmake -B build \
-D CMAKE_INSTALL_PREFIX=/path/to/tiledarray/install \
-D CMAKE_TOOLCHAIN_FILE=cmake/vg/toolchains/<toolchain-file-for-your-platform>.cmake \
.
$ cmake --build build
(可选) $ cmake --build build --target check
$ cmake --build build --target install
详细的安装说明可以在 INSTALL.md 中找到。
开发者与许可证
TiledArray 由 Valeev Group 在 Virginia Tech 开发。该项目采用 GPL v3+ 许可证,如果需要其他许可证条款,请联系开发者。
引用
引用 TiledArray 时,请使用以下格式:
"TiledArray: A general-purpose scalable block-sparse tensor framework", Justus A. Calvin and Edward F. Valeev, https://github.com/valeevgroup/tiledarray .
有关 TiledArray 内部工作原理的更多信息,请参阅相关出版物。
致谢
TiledArray 的开发得到了美国国家科学基金会、阿尔弗雷德·P·斯隆基金会、卡米尔和亨利·德雷福斯基金会、能源部 Exascale 计算项目以及能源部 INCITE 项目的支持。