计算化学公社

 找回密码 Forget password
 注册 Register
Views: 202|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[辅助/分析程序] GPU加速的REPEAT电荷计算程序

[复制链接 Copy URL]

345

帖子

1

威望

1781

eV
积分
2146

Level 5 (御坂)

本帖最后由 slxc920113 于 2026-2-3 16:16 编辑

最近在阅读gpu4pyscf的代码,学习GPU编程,就拿REPEAT电荷这个比较耗时的程序练手了。核心的REPEAT计算算法并不复杂,就是分成实空间+倒空间,进行Ewald求和,熟悉MD程序的应该都懂。起初用Python重写的程序只有300多行,但是纯CPU下计算很慢,至少比C++版本慢了两个数量级。然后就把所有的Python加速手段一点点往上面叠加,最后代码量到了离谱的2000多行。

1. GIL版本的Python, 多进程
2. GIL版本的Python, 多进程+numba jit计算加速
3. GIL版本的Python,numba jit +TBB 并行
4. noGIL版本的Python(3.13+),多线程
5. 采用Cupy或者Pytorch进行GPU加速
6. 采用Cupy或者Pytorch进行GPU加速+多线程调度多张显卡
7. FP64精度降低到FP32混合精度

最终测试下来在7950X+4090上,一个200原子的MOF体系的REPEAT电荷计算python版本可以压缩到10秒以内,纯C++的CUDA并行版本大约3-4秒。
欢迎试用:LZ0211/pyREPEAT: Python program for calculate Electrostatic Potential fitted charges for periodic systems

  1. python repeat.py [CUBE_FILE] [OPTIONS]

  2. 位置参数:
  3.   cube_file             输入的CUBE文件路径

  4. 可选参数:
  5.   --fit-type {0,1}      拟合类型: 0=不考虑周期性, 1=考虑周期性 (默认: 1)
  6.   --vdw-factor FLOAT    VDW半径缩放因子 (默认: 1.0)
  7.   --vdw-max FLOAT       VDW半径上限 (默认: 1000.0)
  8.   --cutoff FLOAT        实空间截断半径 (默认: 20.0)
  9.   --total-charge FLOAT  体系总电荷 (默认: 0.0)
  10.   --cores N             CPU核心数 (默认: 自动检测)
  11.   --gpu [DEVICES]       启用GPU加速
  12.                         示例: --gpu, --gpu 0, --gpu 0,1,2, --gpu all
  13.   --stats               计算统计量(RMS误差)。默认关闭以节省时间
  14.   --fp64                强制双精度fp64 (默认fp32)
  15.   --block-k N           k空间分块大小 (默认: 64)
  16.   --symm-file PATH      对称性约束文件
  17.   --resp-file PATH      RESP参数文件
  18.   --qeq-file PATH       QEq参数文件
  19.   --charge {repeat,qeq} 电荷模型 (默认: repeat)
  20.   --output PATH         输出文件路径
复制代码


repeat.py (107.65 KB, 下载次数 Times of downloads: 5)

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-17 01:10 , Processed in 0.161949 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list