跳到主要内容

RSTSR 第二次报告

· 阅读需 85 分钟
Andrew J. Zhu (祝震予)
Postdoc at Fudan University (Computational Chemistry)

RSTSR 第二次报告:对电子结构程序的理解与需求:NumPy+Rust 视角

1. 前言

电子结构程序的程序开发是为了解决或发现化学、物质结构的科学问题;但其技术挑战经常与化学本身无关。电子结构程序需要同时兼顾 1) 开发效率与降低沟通成本 2) 程序效率与资源控制;这些也是其他学科的科学计算、甚至一般程序开发任务所需要解决的问题。

Rust 语言在部分计算机或其应用的领域中,有比较好的使用反响。但对于科学计算,Rust 鲜有出彩的工作;对于 Rust 是否适合科学计算,相信现在也没有可以达成统一共识的认识。

先前的 showcase_rust_riccsd 工作,相信可以表明,对于以 MPnn、CC 为代表的电子结构所关心的问题,在合适的工具下,是可能达到比较好的开发效率和程序效率的平衡。为了表明这种可能性,我发展了 RSTSR 作为张量计算的程序工具。受制于眼界、能力、精力,这个工具未必是理想的;但我希望能借此工具,展示我对 Rust 科学计算程序的理解和期望,为满足电子结构的张量工具的开发提供一些思路。

本文档希望用简问简答的方式,展示我对电子结构程序开发和其所关心的程序问题的理解、以及对 Rust 语言的理解。本文档的后半部分会介绍 RSTSR 程序的开发思路。

一个好的程序工具,应该要能让用户一定程度地脱离繁琐的技术细节,而专注于用户自己的目标;这也是发展数学库工具的初衷。RSTSR 强烈地受 NumPy 的影响。我们有必要表明 NumPy 或者类似的数学库工具,是如何具体地在电子结构中使用的,它们的优劣在哪里,以及我们改进这些问题的思路。

本文档假设不考虑 GPU 异构或 MPI 规模并行。一些结论可能不适合这两类情形。

RSTSR 第一次报告

· 阅读需 34 分钟
Andrew J. Zhu (祝震予)
Postdoc at Fudan University (Computational Chemistry)

RSTSR 程序:基于 Python Array API 发展的 Rust 高维张量数据结构处理程序草案

摘要

编写科学计算程序时,数据的储存结构、以及如何利用该数据结构进行高效计算,是重要与基础的问题,且需要在早期规划。如今,以 NumPy、PyTorch 几乎成为高维张量数据结构的事实标准;后者也在异构编程上提供了相对统一的接口。但在 Python 以外的语言中,除了 C++ 下 LibTorch 库以外,其他语言鲜有对高维张量和异构编程同时的支持。我们希望 RSTSR 程序未来可以解决 Rust 语言下上述困境。目前的 RSTSR 程序基于 Python Array API 标准 (NumPy API 子集),已正确实现了部分重要的高维张量运算与操作,并暴露了一部分接口,为高性能 CPU 计算、与 GPU 计算作准备。但对于重新实现 CPU 上实现大多数计算化学关心的问题的目标,以目前进度仍需要 5–10 周;CUDA 的支持则可能需要更多时间和精力。本文档将 1) 对现有矩阵或张量库作简要现状分析;2) 阐述 Rust 下张量库 RSTSR 的现实意义与目标;3) 对 RSTSR 已经实现的功能作技术说明。