论文部分内容阅读
分子动力学模拟是一种利用牛顿运动定律来模拟分子运动过程的方法,给定粒子初始状态的位置和速度,通过对运动方程进行积分,从而求得粒子在下一时刻的位置和速度。这样就能记录下每一时刻粒子的位置,获取粒子的运动轨迹,再通过统计力学的方法得到模拟系统的特性,最后得到物质的宏观性质。因此分子动力学模拟广泛应用于各个领域,如材料力学、生命科学、气候模拟等学科中。
为了使分子动力学模拟的计算结果能够更加准确地反映物质的宏观性质,通常需要模拟体系的粒子个数尽可能的多,模拟尽可能长时间的物理化学反应,这使得分子动力学模拟会非常耗费计算时间,并且需要进行模拟的硬件平台拥有更高的计算性能。目前处理器制造商普遍采用在单个处理器上集成更多核心的方式来提升计算性能。为了使模拟计算更加快速与高效,需要将已有分子动力学模拟计算方法进行并行优化,并将其运用到SMP和CMP平台上,以加快模拟过程和缩短模拟时间。
本文根据并行计算基本理论,对分子动力学模拟使用OpenMP进行并行算法优化。本文的主要工作如下:
首先,介绍了并行计算机理论研究的历史与并行计算机硬件平台的发展,当前主流的并行体系处理器,以及本文所涉及到的共享存储的并行编程模型OpenMP。详细描述了分子动力学模拟算法的原理与步骤,模拟计算的过程和计算过程中需要选取的势函数、积分算法、系综等一系列条件。对处于平衡态的流体使用串行算法进行分子动力学的模拟,并在现有的实验环境下选择OpenMP并行编程模型来进行算法的优化。
其次,分析并行算法中性能的制约点,将其优化。通过研究发现:在对共享力数组进行更新时(称之为Critical算法),同一时刻只有一个线程能进入临界区,其他线程必须等待该线程执行完毕,相当于在这段时间内程序串行执行;同时研究发现在整个模拟过程中,粒子间作用力的计算占整个模拟时间的80%-90%,所以如果将这段操作并行优化,整个模拟的运算时间将会减少,并且效率也会有很大的改进。介于此,本文提出了一种改进方法——Multi-Critical算法,大大提高程序的加速比与并行效率。在Critical算法中,线程在计算完粒子间相互作用力之后,既要更新到共享力数组,又要更新到私有副本数组。此方法除了在临界区内串行执行,降低了模拟的并行效率之外,还对共享数组进行频繁的读写,也降低了程序的效率。Multi-Critical算法将其优化为:线程计算的粒子间作用力更新到该线程私有副本矩阵,并应用分布式竞争的方法,将矩阵的更新分块操作,共享矩阵的更新操作放在不同的临界区内并行执行。该算法在多个Critical section来执行更新共享矩阵的操作,故称之为Multi-Critical算法。
最后,通过对不同体系进行了测试,Multi-Critical算法相对Critical算法并行效率和加速比有显著提升。分析性能提升的原因,并进行了理论分析。通过对比计算前后的总能量,验证了算法的正确性,并编写自动化脚本来简化程序的编译与执行。