我正在使用 Gromacs 和 DL_POLY 等几个软件包运行分子动力学 (MD) 模拟。
Gromacs现在支持粒子分解和域分解算法。默认情况下,Gromacs 模拟使用域分解,尽管多年来,直到最近,粒子分解是 Gromacs 中实现的唯一方法。在 Gromacs 的一篇论文 (DOI 10.1002/jcc.20291) 中,作者给出了他们最初选择粒子分解的原因:
“早期的设计决策是选择使用粒子分解而不是域分解来将工作分配给处理器。在后一种情况下,空间域被分配给处理器,这使得仅通过本地通信能够快速找到空间邻居,但由于复杂性对在空间边界上移动的粒子的影响是相当大的。只有当线性系统大小大大超过相互作用的范围时,域分解才是更好的选择,这在分子动力学中很少出现。通过粒子分解,每个处理器都计算力和坐标/速度更新对于指定的部分粒子,使用均匀分布在处理器上的预先计算的邻居列表。 和的更新 必需的, 只计算一次并传送给其他处理器。每个处理器都将系统的完整坐标集保存在其本地内存中,而不是将存储限制为它需要的坐标。这更简单并节省了通信开销,而内存要求通常根本不是限制因素,即使对于数百万个粒子也是如此。另一方面,邻居列表可以包含多达 1000 倍的粒子数量,分布在处理器上。通信本质上仅限于在处理器环周围的每个时间步发送一次坐标和力。随着时间的推移,这些选择已被证明是稳健的,并且很容易适用于现代处理器集群。”
“只有当线性系统大小大大超过相互作用范围时,域分解才是更好的选择,而分子动力学中很少出现这种情况”这句话中的“线性系统大小”是什么意思?从上面的段落中,我了解到粒子分解的优点是不必处理跨域边界移动的粒子。相反,您只需要为每个处理器提供足够的内存来存储整个系统配置。所以粒子分解看起来非常有利,而域分解看起来非常不利。
我确信这是一个非常复杂的问题(可能是许多书籍的主题),但基本上,如果粒子分解看起来如此有利,为什么有人需要使用域分解? 如果系统的大小非常大(使得在每个处理器中存储总配置变得困难或不可能),域分解是否只是有利的?根据上面引用的段落,我不确定为什么域分解现在是 Gromacs 中的默认并行化算法,就在最近。
DL_POLY现在(第 4 版)似乎也使用域分解。来自第 4 版手册:
“以这种方式划分配置数据是基于模拟单元中原子的位置,系统数据的这种几何分配是 DD 算法的标志。请注意,为了使这种策略有效地工作,模拟的系统必须具有合理均匀的密度,以便为每个处理器分配几乎相等部分的原子数据(尽可能多)。通过这种方法,力计算和运动方程的积分在处理器和处理器之间(合理)平等地共享在很大程度上可以在每个处理器上独立计算。该方法在概念上很简单,但很难编程,特别适用于效率最高的大规模模拟。
...
在 DD 策略的情况下,SHAKE (RATTLE) 算法比 DL_POLY Classic 的复制数据方法更简单,后者需要原子位置的全局更新(合并和拼接)。”
这听起来好像域分解是好的,因为它可能更有效,即使可能更难以实现。
另一方面,以前的版本(DL_POLY Classic)使用复制数据并行化,这似乎是粒子分解的另一个名称。从该版本的手册中:
复制数据 (RD) 策略是在 MD 中实现并行化的几种方法之一。它的名字来源于并行计算机的每个节点上的配置数据的复制(即定义原子坐标,速度 和力的数组,对于全部模拟系统中的原子,在每个处理节点上再现)。在这种策略中,大部分力的计算和运动方程的积分可以在节点之间轻松平等地共享,并且在很大程度上可以在每个节点上独立处理。该方法编程相对简单并且相当有效。此外,它可以很容易地“折叠”以在单个处理器上运行。然而,该策略在内存中可能很昂贵并且具有很高的通信开销,但总体而言,它已被证明在广泛的应用程序中是成功的。
这一段似乎与这个问题的第一段大体一致,除了它说复制的数据/粒子分解具有“高通信开销”。Gromacs 论文中的段落似乎相反——粒子分解更可取,因为它比域分解具有更低的通信开销。
你有什么想法吗?