JUXAID
JUXAID
PYXAID是由Oleg V. Prezhdo和Alexey V. Akimov共同开发的优秀非绝热分子动力学软件,在凝聚态体系的激发态动力学模拟中得到了广泛应用。随后,Alexey V. Akimov开发的Libra进一步拓展了相关方法体系。此外,Hefei-NAMD、NEXMD、SHARC和Newton-X等软件也在激发态动力学研究中得到了广泛应用,并表现出良好的性能。
在PYXAID基础上,本项目开发了JUXAID,一个基于Julia语言的轻量化重构版本。该实现基于原程序的代码逻辑进行重新实现,并采用简洁的单文件结构。在保留从头算电子-核运动耦合核心理论框架的基础上,充分利用Julia在高性能数值计算与跨平台执行方面的优势,实现了非绝热分子动力学过程的高效模拟。同时,JUXAID引入了改进的表面跳跃算法(如SDM方法)以及更加灵活的模块化设计,从而提升了程序在复杂体系中的适用性与可扩展性。此外,JUXAID支持Linux与Windows等多平台环境运行,适用于大规模计算以及后续与机器学习方法的集成。
使用方法
julia namd.jl
性能对比
在以下两种硬件平台上,对PYXAID、MAXAID和JUXAID不同版本进行了性能测试:
-
服务器平台:
英特尔® 至强® 金牌 6444Y,256 GB 内存,CentOS -
桌面平台:
Intel(R) Core(TM) Ultra 9 285H,32 GB 内存,Windows 11
相对速度对比表
| 软件版本 | 相对速度(PYXAID=1) |
性能表现说明 |
|---|---|---|
PYXAID |
1× | 基准参考 |
MAXAID |
1/15× | 电子态数增加时性能显著下降 |
JUXAID (v10) |
1× | 与 PYXAID 基本一致 |
JUXAID (v12) |
6× | 优化 |
JUXAID (v14) |
13× | 优化 |
JUXAID (v15) |
19× | 关闭部分非必要输出 |
PXAID (v10) |
1/36× | 初始 Python 重构版本,性能较低 |
PXAID (v12) |
1/15× | 优化 |
PXAID (v13) |
11× | 优化 |
PXAID (v14) |
34× | 优化 |
PXAID (v15) |
154× | 关闭部分非必要输出 |
更新日志
v15 相比 v14 的主要改进
1. 增加输出文件保存开关
-
v14 默认保存全部输出文件
-
v15 增加四类输出控制参数:
-
SAVE_DECOHERENCE_RATES -
SAVE_ICOND_FILES -
SAVE_ME_ENERGIES -
SAVE_ME_POP
-
-
用户可根据需求灵活选择是否保存对应文件
2. 降低文件IO开销
-
v14 会持续写入多类文本文件
-
v15 可关闭部分非必要输出
-
在大规模
icond和长时间轨迹计算中可显著减少写文件耗时
v14 相比 v12 的主要改进
1. 引入多线程并行计算(Threads)
-
v12 主要采用单线程执行
-
v14 引入
Base.Threads -
在退相干计算与多轨迹动力学模拟中实现并行加速
-
显著提升大规模轨迹计算效率
2. 核心电子动力学完全“去对象化”
-
v12 使用
ElectronicStructure对象传播 -
v14 将核心传播改写为:
-
C -
A -
g -
tau_m -
t_m
等底层数组直接操作
-
-
降低对象访问与动态分派开销
3. 大量函数inline化
-
v12 普通函数调用较多
-
v14 对核心小函数使用
@inline -
减少函数调用开销,提高热点循环执行效率
4. 三维数组批量存储Hamiltonian
-
v12 使用
Vector{Matrix}存储Hme_batch -
v14 改为:
Array{ComplexF64,3}
-
提高内存连续性与缓存命中率
5. 轨道映射进一步压缩
-
v12 使用嵌套
Vector -
v14 引入:
pack_diag_orbital_map
-
将轨道映射压缩为定长矩阵
-
降低动态内存访问开销
6. 更底层的传播核心实现
-
v12 使用较高层对象接口
-
v14 拆分为多个
_core!函数:-
propagate_coefficients_core! -
update_populations_core! -
hop_core! -
sdm_decoherence_core!
-
-
更适合编译器优化与并行执行
7. FFT实现进一步优化
-
v12 使用:
-
fft -
ifft
-
-
v14 在实值退相干相关函数计算中改为:
-
rfft -
irfft
-
-
利用实数能量涨落序列的特性减少FFT计算量与内存占用
8. 大规模输出写入优化
-
v12 频繁直接文件写入
-
v14 引入:
IOBuffer
-
减少大量小规模IO操作带来的性能损耗
9. 多轨迹模拟线程局域化
-
v12 所有轨迹共享全局统计数组
-
v14 为每个线程建立:
-
sh_tls -
se_tls
-
-
降低线程竞争与同步开销
10. 数据加载进一步向连续内存优化
-
v12 使用
Vector{Matrix}存储H_batch -
v14 改为:
H_array
-
更适合批量线性代数与缓存优化
v12 相比 v10 的主要改进
1. 自相关函数FFT加速
-
v10 使用双重循环计算自相关函数(O(N²))
-
v12 使用 FFT 实现严格等价的自相关计算(O(N log N)
-
在长时间轨迹下显著提升
decoherence计算速度
2. 参数结构化(移除global)
-
v10 使用大量
global变量(hbar、kb、dt等) -
v12 引入
NAMDParams结构体统一管理参数 -
提高类型稳定性,增强
Julia编译优化能力
3. 多电子态映射预计算
-
v10 在每个时间步重复计算
delta_states和ext2int -
v12 预计算:
-
transition_map -
diag_orbital_map
-
-
显著减少重复计算开销
4. 避免存储完整时间序列对象
-
v10 存储完整
oe_es和me_es数组(内存开销大) -
v12 使用:
-
Hme_batch(轻量) -
单个
ElectronicStructure对象传播
-
-
大幅降低内存占用
5. Hamiltonian构造模块化
-
v10 在
main中集中实现(难维护) -
v12 拆分为函数:
-
build_spin_orbital_H! -
build_Hme_batch -
write_me_energies
-
-
提高代码可读性与可维护性
6. 减少临时数组分配
-
v10 使用矩阵乘法和广播(产生临时对象)
-
v12 使用显式循环更新矩阵
-
降低
GC压力,提高运行效率
7. hop算法优化
-
v10 使用
vec+cumsum -
v12 使用
view+ 在线累加 -
避免不必要的内存分配
8. 更易扩展并行计算
-
v12 将数据结构扁平化(
Hme_batch+ 单对象) -
更适合后续:
-
多线程(
Threads) -
多进程(
Distributed)
-
引用
这是PYXAID的原始文献:
-
Akimov A V, Prezhdo O V. The PYXAID program for non-adiabatic molecular dynamics in condensed matter systems. Journal of Chemical Theory and Computation, 2013, 9(11): 4959–4972.
-
Akimov A V, Prezhdo O V. Advanced capabilities of the PYXAID program: integration schemes, decoherence effects, multiexcitonic states, and field–matter interaction. Journal of Chemical Theory and Computation, 2014, 10(2): 789–804.
本工作:
论文正式发表后补充。