Skip to content

Commit afb2ad2

Browse files
committed
doc: ri_rccsdt (WIP)
1 parent ff391b4 commit afb2ad2

File tree

7 files changed

+341
-17
lines changed

7 files changed

+341
-17
lines changed

docs/src/SUMMARY.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@
55
- [RI-RHF:极简演示](./ri_rhf_slow.md)
66
- [RI-RHF:高效率实现](./ri_rhf.md)
77
- [RI-RCCSD:高效率实现](./ri_rccsd.md)
8-
- [RI-RCCSD(T):初步实现](./ri_rccsdt_slow.md)
9-
- [RI-RCCSD(T):高效率实现](./ri_rccsdt.md)
8+
- [RI-RCCSD(T):极简到高效率](./ri_rccsdt.md)

docs/src/intro.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@
3737
Rust 语言的不足包括
3838
- 作为编译语言,尽管支持增量编译,但其编译或链接时间仍然较长 (与 C++ 项目同等级,涉及到模板特化的耗时较多);
3939
- REPL 支持有限,难以像 Python, Matlab, Mathematica, Julia 脚本式地运行程序[^1]
40-
- 科学计算与 AI 生态有待发展,GPU 支持不足;
41-
- 语法上对重载 (overload) 的支持有限[^2]
40+
- 科学计算与 AI 生态与 GPU 支持还有待发展[^2]
41+
42+
Rust 语言具有争议的地方包括
43+
- Rust 完全否定面向对象;必须通过类似于 C#、Java 的接口 (trait) 实现多态 (polymorphism);
44+
- 语法上对重载 (overload) 的支持有限[^3]
4245

4346
[^1]: Rust 实际上有 REPL 库 [evcxr](https://github.com/evcxr/evcxr),可以使用但体验与 Python 还是有差距的。作为参考,C++ [xeus-cling](https://github.com/jupyter-xeus/xeus-cling) 是类似的情况。
44-
[^2]: 一种常见的误解是 Rust 不能重载。实际上 Rust 具有重载能力 (基于 trait),RSTSR 也大量使用了 Rust 重载;它或许可以看作支持泛型的 C11 `_Generic`,与 Python 的 named-arguments 不同。但重载在 Rust 语言中的支持确实不足,导致现在很多 RSTSR 函数的参数必须打两个括号才能使用。
47+
[^2]: 一方面除了 C/C++ 外,其他所有计算机语言对 GPU 的支持事实上都不足 (Fortran 有支持但较有限),大多都需要通过 FFI (foreign function interface) 实现。另一方面,只从 CUDA 生态而言,涉及 GPU 的代码应看作 CUDA 语言而非传统的 C/C++ (不是相同的语言);只是大多数工具链 (toolchain) 允许 CUDA 与 C/C++ 混合编译,使用上与语法上非常接近。从工程量上来看,使用 C/C++ 不一定就比使用其他语言更少。
48+
[^3]: 一种常见的误解是 Rust 不能重载。实际上 Rust 具有重载能力 (基于 trait),RSTSR 也大量使用了 Rust 重载;它或许可以看作支持泛型的 C11 `_Generic`,与 Python 的 named-arguments 不同。但重载在 Rust 语言中的支持确实不足,导致现在很多 RSTSR 函数的参数必须打两个括号才能使用。
4549

4650
Rust 语言与其他语言的对比:
4751
- C++ 的表达能力非常自由,但程序编写者更容易写出错误的代码;C++ 语言本身复杂,编写程序时需要考虑引用、右值引用、移动等语义。
@@ -179,4 +183,4 @@ $$
179183

180184
这份文档希望讨论程序的具体细节,以追求比较理想的程序性能。Rust 语言不仅能帮助我们较容易地达到理想性能,而且其具有较高的开发效率的潜力,适合计算化学的程序开发。
181185

182-
但也要留意,程序性能的提升经常只是改进;真正的突破需要依靠计算化学的算法、方法、或认知论的发展。
186+
但也要留意,程序性能的提升经常只是改进;它当然也很重要,但真正的突破还需要依靠计算化学的算法、方法、或认知论的发展。

docs/src/ri_rccsd.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- 性能较高
66
- 体系 (H2O)<sub>10</sub> cc-pVDZ ($n_\mathrm{basis} = 240$, $n_\mathrm{aux} = 840$,无冻结轨道)
77
- 计算设备 Ryzen HX7945,16 cores,算力约 1.1 TFLOP/sec
8-
- 一次 CCSD 迭代约 24.0 sec
8+
- 一次 CCSD 迭代约 24.0 sec,CPU 性能利用率约 49%
99
- 本文档的所有性能分析均基于 OpenBLAS 后端讨论
1010
- 该程序总共约 700 行
1111
- 该程序包含 DIIS 迭代
@@ -1088,7 +1088,7 @@ $$
10881088
- 计算耗时约 10.5 sec,实际运行效率为 0.48 TFLOP/sec;
10891089
- CPU 性能利用率为 43%。
10901090
- 如前面讨论指标 $(a, b)$ 的分批看到的,我们实际上多计算了少许的、对角线附近但在上三角区片的 $(a, b)$ 情形。对于 $n_\mathrm{vir} = 190$、`nbatch_a = 8` 的情形,这个浪费的比例在 4% 左右;这对性能利用率有大约 2%-3% 的影响。
1091-
- 需要留意,从浮点计算量上来看,对于 RI-RCCSD 方法,PPL 项的 FLOPs 实际上比 PHL 项还要少一些。
1091+
- 需要留意,从浮点计算量上来看,对于 RI-RCCSD 方法,PPL 项的 FLOPs 实际上比 PHL 项还要少一些。不过这个情况因基组而异;这里的基组是较小的 cc-pVDZ。对于较大的基组,PPL 项的 FLOPs 应该会比 PHL 项更多。
10921092
10931093
## 13. RI-RCCSD 其他计算过程与总结
10941094

0 commit comments

Comments
 (0)