探索高效计算新境界:TiledArray——一个强大的块稀疏张量框架
项目介绍
TiledArray 是一款基于C++的可扩展性块稀疏张量框架,专为高速执行复杂的高精度计算而设计,特别是在多体量子力学等领域中广泛应用。它能够让用户以近乎自然数学的方式编写和组合张量表达式,并在单机多核到大型分布式内存并行系统上实现无缝扩展。
项目技术分析
TiledArray 建立在MADNESS平行运行时(MADWorld)之上,提供了一种灵活、高效的编程模型。它支持:
- 密集和块稀疏张量的通用算术运算。
- 高级(类似数学)组合以及底层数据和算法的完全访问,这在C++中均可实现。
- 大规模共享和分布式内存并行处理。
- 高度可重用的框架:从瓷砖类型(如支持磁盘存储或按需计算的张量)到如何描述稀疏张量结构,几乎一切都可以定制。
TiledArray 还利用了Einstein求和约定,使得表达式的编译更加直观简洁。
应用场景与案例
例如,以下是一个简单的分布式内存矩阵乘法的示例代码:
#include <tiledarray.h>
int main(int argc, char** argv) {
// 初始化并行运行时
TA::World& world = TA::initialize(argc, argv);
// 定义2D瓷砖范围结构,定义数组的分块。每个维度包含10个瓷砖
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;
}
性能亮点
在IBM BlueGene/Q超级计算机“Mira”上的测试显示,TiledArray 在稠密矩阵乘法中的性能优于Cyclops Tensor Framework和ScaLAPACK。此外,对于更复杂的表达式,如耦合簇单双(CCSD)波函数求解器,其也展现出极好的并行扩展性。
安装与使用
安装TiledArray只需几个简单的步骤,详情请参考INSTALL.md文档。开发团队提供了详细的说明,帮助用户快速上手。
开发者与贡献
该项目由Valeev Group在弗吉尼亚理工学院开发。请引用TiledArray 时参考以下信息:
"TiledArray: 一个通用的可扩展块稀疏张量框架", Justus A. Calvin 和 Edward F. Valeev, https://github.com/valeevgroup/tiledarray 。
许可协议
TiledArray 采用GPL v3+许可协议,如需其他许可方式,请联系开发者。
结语
无论您是希望提升科学计算效率的研究人员还是寻求高性能解决方案的工程师,TiledArray 都是一个值得探索的强大工具。它的灵活性、易用性和卓越的性能都使其成为处理复杂张量运算的理想选择。立即加入,开启您的高效计算之旅!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考