4. 运行 LAMMPS
本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。
4.1.运行 LAMMPS 的基础知识
4.2.命令行选项
4.3.屏幕和日志文件输出
当 LAMMPS 读取输入脚本时,它会将有关设置模拟所需的重要操作的信息打印到屏幕和日志文件中。当模拟准备开始时,LAMMPS 执行各种初始化,并打印有关即将执行的运行的信息,包括模拟所需的内存量(以每个处理器的 MB 为单位)。它还打印系统初始热力学状态的详细信息。在运行过程中,每隔几个时间步长就会定期打印热力学信息。运行结束时,LAMMPS 会打印最终的热力学状态和模拟的总运行时间。它还附加了有关模拟的 CPU 时间和存储要求的统计信息。此处显示了一组统计数据示例:
Loop time of 0.942801 on 4 procs for 300 steps with 2004 atoms
Performance: 54.985 ns/day, 0.436 hours/ns, 318.201 timesteps/s, 637.674 katom-step/s
195.2% CPU use with 2 MPI tasks x 2 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.61419 | 0.62872 | 0.64325 | 1.8 | 66.69
Bond | 0.0028608 | 0.0028899 | 0.002919 | 0.1 | 0.31
Kspace | 0.12652 | 0.14048 | 0.15444 | 3.7 | 14.90
Neigh | 0.10242 | 0.10242 | 0.10242 | 0.0 | 10.86
Comm | 0.026753 | 0.027593 | 0.028434 | 0.5 | 2.93
Output | 0.00018341 | 0.00030942 | 0.00043542 | 0.0 | 0.03
Modify | 0.039117 | 0.039348 | 0.039579 | 0.1 | 4.17
Other | | 0.001041 | | | 0.11
Nlocal: 1002 ave 1006 max 998 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Nghost: 8670.5 ave 8691 max 8650 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Neighs: 354010 ave 357257 max 350763 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Total # of neighbors = 708020
Ave neighs/atom = 353.30339
Ave special neighs/atom = 2.3403194
Neighbor list builds = 26
Dangerous builds = 0
第一部分提供了全局循环时序摘要。循环时间是模拟运行的 MD 步骤的总挂钟时间,不包括初始化和设置的时间(即可以通过运行 N pre no 跳过的部分)。提供性能线是为了方便地帮助预测运行所需的物理模拟所需的时间,并提供对不同模拟设置或系统规模之间的性能比较有用的数字。 CPU 使用线提供每个 MPI 任务的 CPU 利用率;它应该接近 OpenMP 线程数量的 100%(如果不使用 OpenMP,则为 1)。较低的数字对应于由于文件 I/O 或未进行多线程的部分代码的线程利用率不足而导致的延迟。
MPI 任务部分将 CPU 运行时间(以秒为单位)细分为主要类别:
-
Pair = non-bonded force computations非成键力计算
-
Bond = bonded interactions: bonds, angles, dihedrals, impropers成键相互作用:键、角度、二面角、不正确
-
Kspace = long-range interactions: Ewald, PPPM, MSM长程相互作用:Ewald、PPPM、MSM
-
Neigh = neighbor list construction邻居列表构建
-
Comm = inter-processor communication of atoms and their properties原子及其属性的处理器间通信
-
Output = output of thermodynamic info and dump files热力学信息和转储文件的输出
-
Modify = fixes and computes invoked by fixes修复并由修复调用的计算
-
Other = all the remaining time所有剩余时间
对于每个类别,都有处理器在此类计算上花费的最少、平均和最多的挂机时间的细分。 “%varavg”是最大值或最小值与平均值的差异百分比。这是负载不平衡的指示。接近 0 的百分比是完美的负载平衡。很大一部分是不平衡的。最后的“%total”列是该类别花费的总循环时间的百分比。
使用计时器完整设置时,会添加一个附加列,该列还以百分比形式打印 CPU 利用率。此外,当使用timer full 且package omp 命令处于活动状态时,会提供在线程区域中花费的时间的类似计时摘要,以监视线程利用率和负载平衡。还添加了一个新的线程计时部分,其中列出了将每线程数据元素减少到存储以进行非线程计算所花费的时间。这些线程计时仅针对第一个 MPI 等级进行测量,因此,由于 MPI 任务的细分可能会因 MPI 等级而异,因此对于各个等级,这种细分可能会非常不同。以下是本节的输出示例:
Thread timings breakdown (MPI rank 0):
Total threaded time 0.6846 / 90.6%
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.5127 | 0.5147 | 0.5167 | 0.3 | 75.18
Bond | 0.0043139 | 0.0046779 | 0.0050418 | 0.5 | 0.68
Kspace | 0.070572 | 0.074541 | 0.07851 | 1.5 | 10.89
Neigh | 0.084778 | 0.086969 | 0.089161 | 0.7 | 12.70
Reduce | 0.0036485 | 0.003737 | 0.0038254 | 0.1 | 0.55
上面的第三部分列出了每个处理器存储的拥有原子 (Nlocal)、幽灵原子 (Nghost) 和成对邻居的数量。最大值和最小值给出了这些值在处理器之间的分布,并用 10 箱直方图显示了分布情况。直方图计数的总数等于处理器的数量。
最后一部分给出了 LAMMPS 跟踪的成对邻居和特殊邻居的聚合统计信息(跨所有处理器)(请参阅special_bonds 命令)。邻居列表重建的次数以及潜在危险重建的次数都会被统计。如果原子移动触发了邻居列表重建(请参阅 neigh_modify 命令),则危险的邻居是在检查原子移动的第一个时间步长时触发的邻居。如果此计数非零,您可能希望减少延迟因子,以确保在重建发生之前移动超出相邻蒙皮距离的原子不会错过任何力相互作用。
如果通过最小化命令执行能量最小化,则会打印附加信息,例如
Minimization stats:
Stopping criterion = linesearch alpha is zero
Energy initial, next-to-last, final =
-6372.3765206 -8328.46998942 -8328.46998942
Force two-norm initial, final = 1059.36 5.36874
Force max component initial, final = 58.6026 1.46872
Final line search alpha, max atom move = 2.7842e-10 4.0892e-10
Iterations, force evaluations = 701 1516
第一行打印确定最小化收敛的标准。下一行列出了初始和最终能量,以及倒数第二次迭代的能量。接下来的两行给出了能量梯度的测量(所有原子上的力)。 2-范数是这个 3N 分力矢量的“长度”;还给出了力(无穷范数)的最大分量(x、y 或 z)。然后提供有关线搜索的信息以及有关最小化器所需的迭代次数和力评估的统计信息。通常在每次迭代时进行多次力评估,以在搜索方向上执行一维线最小化。有关更多详细信息,请参阅最小化页面。
如果在运行期间使用了执行fft的kspace_style远程库仑解算器(PPPM, Ewald),则会打印额外的信息,例如:
FFT time (% of Kspce) = 0.200313 (8.34477)
FFT Gflps 3d 1d-only = 2.31074 9.19989
第一行是执行 3d FFT 所花费的时间(每个时间步多次)以及它代表总 KSpace 时间的分数(上面列出)。每个 3d FFT 都需要计算(3 组 1d FFT)和通信(转置)。执行的总触发器为 5Nlog_2(N),其中 N 是 3d 网格中的点数。 FFT 在有或没有通信的情况下进行定时,并计算 Gflop 速率。 3d速率是有通讯的; 1d 速率没有(仅 1d FFT)。因此,您可以估计 FFT 时间的哪一部分花在通信上,在上面的示例中大约为 75%。