摘要:为提高激光诱导光化学反应模拟效率,在Linux 环境下,基于OpenMP 技术设计光化学反应并行程序,并在多核处理器上实现。实验结果表明:采用OpenMP 并行技术可以有效地利用计算机资源,提高运算效率,在十六核处理器上获得了十四倍以上的加速比,使得高效模拟大分子体系光化学反应成为可能。
关键词:OpenMP;多核处理器;并行计算;加速比;激光诱导光化学反应模拟
引言
近年来,在激光诱导光化学模拟中,研究光化学反应的关键因素就是激光与分子的相互作用。因为半经典分子动力学模拟不但可以在分子水平上而且可以在电子水平上对体系进行精细的理论研究,所以是其它理论研究方法所难以替代的。因此,大分子体系的半经典分子动力学模拟计算方法的研究便成为当今计算化学领域中极具挑战性的研究热点之一[1]。由于超短激光脉冲技术的发展,使得对光化学反应的研究进入到核运动(分子振动、化学键的离解和生成)的微观世界[2]。运用飞秒激光脉冲技术,可以实现在许多传统方法上不能发生的化学反应[3-8]。
本文的计算模型是激光诱导光化学反应的半经典动力学计算模型[9]。在该模型中,动力学由Ehrenfest 动力学方法处理,电子结构由DFTB (Density Functional based Tight Bonding)方法计算,通过Peierls 替代引入激光与分子的相互作用。在该模拟计算中,确定哈密顿矩阵元是最费时的计算,因此本模型能够用于大体系和较长时间反应过程的关键就是快速计算这些矩阵元。所以我们的重点就是运用多核系统与OpenMP 并行算法来优化哈密顿矩阵元的计算,提高运算效率,为能够在大分子体系和较长时间的反应过程中模拟提供现实的可能性。
为了更高效的对大分子体系进行模拟,就要提高计算机的运算速度,而提高计算机运算速度最好的办法就在于并行计算[10]。本文就是把并行算法运用到激光诱导光化学模拟中,通过运用OpenMP 共享内存的并行技术,对力的计算在十六核处理器上进行并行优化,得到了十四倍以上的并行加速比和80%以上的运算效率。
1 多核系统与并行程序采用多核处理器芯片构成计算机系统是一个片内多处理的并行计算机系统。这种系统是一种并行进程和并行线程的系统,多个进程和线程可以真正的并行运行,而不是像单处理器系统中那样轮流地在CPU 上运行。然而,在多核系统中,原有的单个程序的运行速度并不能得到提高。要提高单个程序的运行性能,需要从新设计原有程序,将单个计算任务分解成多个并行的子任务,让这些子任务分别在不同的处理器核上运行[11]。
为了实现并行程序的设计,需要在多处理器系统中进行任务划分、数据划分和数据流划分。任务划分的目的是使得各个处理器都能分配到平衡的工作负载,从而提高运算的并行性。
数据划分是将数据对象划分成多个并行处理的数据子集。数据流划分是根据数据的处理过程进行划分,在不同的处理阶段进行不同的数据划分。
一般而言,实现并行程序设计的方法有三种:库函数、新的语言构造和编译指导。由于库函数方法使程序中的并行性问题没有经过编译程序的检查、分析、优化,程序设计的难度较大,容易出现错误;新的语言构造方法需要采用新的编译程序,并且增加了编译程序的复杂性;而编译指导方法的特点介于以上两种方法之间的,可以中和以上两种方法的不足,是并行程序设计的理想选择。因此,本文选用编译指导并行算法优化哈密顿矩阵元的计算。
2 系统模型本系统模型的模拟计算主要有一下五个步骤:
(1)给定系统运算条件的参数,如初始温度、粒子数、密度、时间等。
(2)体系初始化,即选定初始位置和速度。
(3)计算原子之间的作用力,确定下一时刻的原子速度和位移。作用力的求解由非键结3 OpenMP 并行程序实现编译指导是在原有的语言中增加表达并行运算的编译指导语句。编译指导语句能够被并行编译程序识别,串行编译程序则忽略这些语句。并行编译程序根据这些指导语句将相关代码转换成在并行计算机中运行的代码。OpenMP 就是这种方法的一个例子。
OpenMP 标准是编写可移植的多线程应用程序的API。OpenMP 并行技术是共享存储器的多处理器系统,线程间通过共享变量传递结果。它支持多线程间的同步和局部数据变量,采用分叉和汇集(fork-join)的执行模式建立多线程,使得编译和运行库能够有效地编译和运行程序,减少线程执行的开销[12]。
在本文中,为了对程序进行并行优化改进,运用OpenMP 程序设计模型提供的一种与平台无关的编译指导命令(pragma)、编译指示符、函数调用和环境变量,把我们的应用程序中最费时的计算进行并行性优化。由于OpenMP 提供了一个编写可移植的多线程应用程序的API,可以我们在本程序中实现do 循环程序的多线程化,对do 循环程序进行按循环迭代的任务划分,创建多个线程,每个线程完成若干个循环迭代的计算子任务。
在进行程序并行化过程中,我们运用时钟函数secnds()来进行统计时间:t=secnds(0.0)
3 光化学模拟中并行算法用例的测试与讨论4.1 设计仿真算例测试环境:在共享内存的十六颗CPU 和64G 内存的服务器基础上,采用Linux 2.6.28版本的操作系统,基于OpenMP 指导语句的并行程序设计。在trun=2fs、dt=1fs(trun 为整个程序的运行时间,dt 为模拟一个循环的时间,fs 为飞秒,1fs=10-12s)的环境变量设置下,分别对100、300 和500 个C 原子进行模拟计算,由于我们的激光诱导光化学模拟模型是在三维空间下电子级进行的模拟,我们知道每个C 原子外围都有4 个电子,所以当对500 个C原子进行模拟测试时,要构建三维坐标大小为“2000,2000,2000”的矩阵,即有80 亿个数据的激光诱导光化学模拟体系进行计算。优化结果评估由于优化前的研究体系是串行程序,该程序执行一次的时间相当于一个线程参与下的运行时间,而优化后的程序是在十六个线程参与下的并行程序,由实验结果可以看出,优化后程序的加速比达到了14 倍之多,在现实的实验模拟中,也大大提高了运算效率,节约了大量的宝贵时间。
根据表 1、表2 和表3 中的加速比数据,运用MATLAB6.5 拟合参与线程数与加速比的一阶线性方程,线性方程曲线图如图4。由图4 可以看出,加速比随着线程个数的增加而增大。
5 结论原有的激光诱导光化学反应的半经典动力学计算模型是串行模型,只能对小分子(不大于60 个C 原子)体系进行模拟。本文在共享内存的十六颗CPU 和64G 内存的服务器基础上,采用OpenMP 指导语句进行并行程序设计。通过对原有串行程序进行并行程序改进,提高了计算效率,取得了较好的加速比,并且更适合大分子体系进行模拟。在后续的研究中将对该结果进行更深入的讨论,进一步确定适合哪些范围的大分子体系。
6 致谢在此,特别感谢美国德克萨斯州提供的一台十六颗CPU 共享内存的服务器。以及所有给予我论文帮助的老师、师兄师姐和同门。
文章由中国论文指导网为您分享,本论文网专业从事发表经济论文业务!如需转载请保留一个链接:http://www.lunwen39.com/post/jingji.html
















