Questions tagged «molecular-dynamics»

4
当前可用的GPU是否支持双精度浮点运算?
我已经在包含24个Intel Xeon CPU的节点组成的Ubuntu Linux集群上运行了分子动力学(MD)代码GROMACS。我的兴趣点对浮点算术精度有些敏感,因此我不得不以双精度而不是单精度运行GROMACS-尽管双精度的计算成本较高。因此,在群集上,我以双精度方式编译了GROMACS。 我正在考虑购买一些GPU,因为可能会有相对于CPU的加速(“ GPU加速”)。但是,我需要一个可以执行双精度算术的GPU。您知道这样的硬件是否可以在市场上买到吗?一个在GROMACS邮件列表上最近的文章表明,双精度的GPU市场上不能获得: 硬件尚不支持[双精度算术],但AFAIK。 这个Wikipedia页面似乎暗示双精度GPU并不常见,因为它们可能效率不高: Nvidia GPU上的浮点实现大部分符合IEEE标准。但是,并非所有供应商都这样。这对正确性有影响,对于某些科学应用而言,正确性被认为很重要。虽然在CPU上通常可以使用64位浮点值(双精度浮点数),但GPU并不普遍支持这些值。有些GPU架构牺牲了IEEE遵从性,而另一些则完全缺乏双精度。已经进行了一些努力来在GPU上模拟双精度浮点值。但是,速度折衷首先抵消了将计算量卸载到GPU上的任何好处。 此NVIDIA的Tesla页,在图表中引用“峰值双精度浮点性能”,似乎表明,双精度计算可以,其实,做他们的GPU(虽然在更高的计算成本)。 那么,我应该相信什么?您对此问题有经验吗?

3

3
粒子分解和域分解并行化算法的优缺点是什么?
我正在使用几个软件包(例如Gromacs和DL_POLY)运行分子动力学(MD)模拟。 Gromacs现在支持粒子分解和域分解算法。默认情况下,Gromacs模拟使用域分解,尽管直到最近,多年以来,粒子分解是Gromacs中唯一实现的方法。在Gromacs的一篇论文(DOI 10.1002 / jcc.20291)中,作者给出了最初选择粒子分解的原因: “早期的设计决策是选择使用粒子分解而不是域分解来将工作分配到处理器上。在后一种情况下,将空间域分配给处理器,这使得仅通过本地通信即可快速找到空间邻居,但是会带来复杂性对于跨越空间边界的粒子而言,域分解是一个更好的选择,只有当线性系统的大小大大超出相互作用范围时,分子动力学中才很少发生这种情况,通过粒子分解,每个处理器都可以计算力和坐标/速度更新对于预先分配的粒子,使用预先计算的邻居列表均匀分布在处理器上。F我 ĴF一世ĴF_{ij}从颗粒之间的一对相互作用产生一世一世i 和ĴĴj,这是需要两种粒子的速度更新和 一世一世iĴĴj,仅计算一次,并传达给其他处理器。每个处理器将系统的完整坐标集保留在其本地内存中,而不是将存储限制在所需的坐标范围内。这更简单并节省了通信开销,而内存要求通常根本不是限制因素,即使对于数百万个粒子也是如此。另一方面,可以包含多达1000倍粒子数量的邻居列表分布在处理器上。基本上,通信仅限于围绕处理器环的每个时间步发送一次坐标和力。这些选择随着时间的推移被证明是可靠的,并且很容易适用于现代处理器集群。” 句子“仅当线性系统的大小大大超过相互作用范围时,才是域选择是一个更好的选择,这在分子动力学中很少见”,它们是什么意思?从上面的段落中,我得到一种想法,即粒子分解的优点是不必处理跨域边界移动的粒子。相反,您只需要为每个处理器有足够的内存来存储整个系统配置即可。因此,粒子分解看起来非常有利,而域分解看起来非常不利。 我确信这是一个非常复杂的问题(可能是许多书籍的主题),但是基本上,如果粒子分解看起来如此有利,为什么有人需要使用域分解? 如果系统规模很大(使每个处理器都难以或不可能存储整个配置),则域分解是否有利?基于上面引用的段落,我不确定为什么最近刚将域分解作为Gromacs中的默认并行化算法。 似乎现在的DL_POLY(版本4)也使用域分解。从版本4手册中: “以这种方式对配置数据进行划分是基于原子在模拟单元中的位置,系统数据的这种几何分配是DD算法的特点。请注意,为了使该策略有效地起作用,系统必须具有合理均匀的密度,以便为每个处理器分配几乎相等的原子数据部分(尽可能多),通过这种方法,在处理器和该方法在概念上很简单,尽管编程很麻烦,但在概念上却很简单,特别适合效率最高的大规模仿真。 ... 在使用DD策略的情况下,SHAKE(RATTLE)算法比DL_POLY Classic的“复制数据”方法更简单,后者需要原子位置的全局更新(合并和剪接)。” 这听起来好像域分解是好的,因为它可能更有效,即使可能更难以实现。 另一方面,以前的版本(DL_POLY Classic)使用了复制数据并行化,这似乎是粒子分解的另一个名称。从该版本的手册中: 复制数据(RD)策略是在MD中实现并行化的几种方法之一。从配置数据的并行计算机中的每个节点(在复制其名称导出即阵列限定的原子坐标,速度 ,和力,对于全部[R一世[R一世\textbf{r}_iv一世v一世\textbf{v}_iF一世F一世\textbf{f}_iññN在模拟系统中的每个原子都在每个处理节点上重现。在这种策略中,大多数力的计算和运动方程的积分可以在节点之间轻松而平等地共享,并且在很大程度上可以在每个节点上独立进行处理。该方法编程相对简单并且相当有效。而且,它很容易在单个处理器上“崩溃”运行。但是,该策略在内存中可能很昂贵,并且具有较高的通信开销,但总的来说,它已被证明在各种应用程序中都是成功的。 该段似乎与该问题的第一段基本一致,不同之处在于它说复制的数据/粒子分解具有“高通信开销”。Gromacs论文的段落似乎相反-粒子分解是更可取的,因为它比域分解具有较低的通信开销。 你有什么想法吗?

1
MD模拟的复杂性
我是分子动力学(MD)模拟的新手。就模拟时间而言,分子动力学模拟的复杂性是多少?换句话说,如果我想将模拟时间从10纳秒增加到20纳秒,那么对于运行时间的增加我有什么期望?


1
从经典MD重新开始MD的方法
我正在运行水的分子动力学模拟以进行测试。如果您问一个运行经典MD的人,那么盒子很小;如果您问一个DFT的人,则盒子很大:我在周期性边界条件下有58个水分子。 为了节省CPU时间,我在运行从头开始MD之前使用经典的力场优化了单元。我通常以300K的系统平衡系统1 ns,然后拍摄最后一个快照并将其用作从头开始MD的输入。我的从头算学博士是基于DFT的常规Born-Oppenheimer博士,具有平面波基集和PAW(伪)电势(VASP是代码)。在经典和从头算起的仿真中,我都使用速度缩放恒温器将温度保持在300K不变。 我正在研究在经典和从头开始之间进行过渡的两种不同方法: 从经典轨迹中获取初始速度和位置,并将其作为初始配置导入,以进行从头计算 将系统冻结到零温度,保持经典位置,将其导入DFT代码,然后快速加热(目前我以0.5 ps的速度进行操作),最高加热至300K 我希望这两种策略都能在短时间(例如10 ps)的平衡期后产生相同的平均能量,尤其是考虑到起始配置完全相同(相同的初始位置),除了提到的温度技巧(初始速度不同) 。不是这种情况。下图显示了将系统冻结然后快速加热的模拟,发现该区域的能量比另一个从传统MD输入的速度低约1 eV的能量。 我的问题是: 是否可以预期; 有没有成功的策略可以优化从经典MD到从头算的过渡; 您能指出我有关此事的相关文献吗? 编辑: 我已经在运行更多的测试,并且-由于目前的数据有限-看来这可能是系统特定的问题。在相同大小的盒子中用甲醇代替水进行的测试表明,两种不同的初始速度方案很快会收敛到相同的平均能量。但是,在甲醇的情况下,经典构型非常接近量子构型,即,t = 0时的能量非常接近收敛后的平均能量。水是一个非常困难的系统,所以也许这个问题或多或少是针对水的。如果未添加任何答案,则在完成所有测试后,我将尝试根据结果发布一个答案。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.