论文部分内容阅读
摘要:采用基于球坐标系的病毒三维重构算法中球谐函数的计算非常复杂,在单机单核上耗时很长。通过分析,该文实现了一种基于OpenMP的多核并行方法,可以提高球谐函数计算速度,实验结果证明方法简单有效。
关键词:多核系统;并行计算;OpenMP
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)33-0083-02
结构决定功能,生物大分子同样如此。生物大分子三维结构研究对于了解其功能及生物学机制等具有非常重要的意义。结构生物学方法包括X射线晶体学方法(X-ray crystallography)、核磁共振技术(nuclear magnetic resonance spectroscopy)和冷冻电镜技术[Cryo-electron microscopy (Cryo-EM) single particle]。近年来,随着冷冻电子显微镜技术的发展、三维重构算法的不断完善及计算机计算能力的不断提高等,冷冻电镜技术,特别是冷冻电镜单颗粒技术(Cryo-EM single particle)已成为解析大型蛋白质复合体、病毒乃至细胞器高分辨三维结构的最有力工具之一,其在结构生物学中正扮演着越来越重要的角色。
在生物大分子三维重构实现中需要用到数万个二维投影颗粒的冷冻电镜照片,对二维投影颗粒的处理过程中每次都要重复进行中心移位,球谐函数计算等处理操作。普通的计算机单核线程处理时间长。而目前我们配备的计算机都具有八个以上线程核心,配备的服务器线程核心高达48个,传统的串行程序只会跑满一个线程核心,其他线程核心处于闲置状态。因此充分利用线程核心很有必要。
OpenMP标准形成于二十世纪九十年代,用于多处理器核心并行程序设计的一套方案,能够充分利用现有的CPU的硬件资源,目前OpenMPC、C 和Fortran等程序语言,也支持GNU的编译器,符合我们当前使用的程序设计方案。采用OpenMp可以在現有的程序代码中提专用的pragma等编译指导语句,编译器可以自动将程序进行并行化,容易改造,成本比较低。
采用基于球坐标系的病毒三维重构算法,已经成为基于冷冻电镜技术进行三维重构的重要方法。其中关于对称匹配函数的计算量大,耗时长。
对称匹配函数的计算包括组合系数[Aμl,m]和球谐函数[Yl,m]两部分,高阶组合系数可以由低阶系数通过复杂递推关系获得。球谐函数可表示为:
[Yl,m(θ,?)=(-1)m(2l 1)(l-m!4π(l m)!Pml(cosθ)eim?] (1)
其中[Pml(cosθ)]为缔合勒让德多项式,可表示为:
[Pml(cosθ)=12ll!sinmθdl m(dcosθ)l m(cos2θ-1)l] (2)
由上可见,单个球谐函数的计算变得非常复杂,而对于球谐函数组成的对称匹配函数,比如,l=1000,需要Y1000,0, Y1000,1, …., Y1000,1000共1001个球谐函数的组合,而且考虑基函数完备性,l=1000时还有35种不同的多重性(μ=35),即35种不同的组合方法,因此,整个计算过程变得更加复杂。我们从此算法过程可以看出,35种组合方法的组合系数和球谐函数的计算可以由通过OpenMp并行处理。
如图1所示为并行程序设计流程图,图2 为串行程序设计的流程图,二者的主要区别在于串行程序每次计算一个颗粒,并行程序每次计算100个颗粒。
由于每个颗粒的计算完全独立,不需要进行数据共享和数据通讯,所以用OpenMP非常方便,仅仅使用 !$OMP PARALLEL ,!$OMP END PARALLEL即可。以下为伪代码:
program main
Use omp_lib
Call ReadPara(100)
!$OMP PARALLEL
Do pid=first,last
Call ComputeStick(para)
End do
!$OMP END PARALLEL P
End program
ReadPara函数是读入多个颗粒数据,ComputeStick函数是计算球谐函数。
结果与分析:
我们使用计算CPV病毒的程序(以下简称为串行程序),计算过程是取10409个颗粒进行计算。在主频3.5G intel i7的CPU上运行,串行程序,需要时间是接近3小时。经过并行化改造后,仅仅需要30分钟左右,执行效率提高了5倍。采用OpenMp方法对原来程序改造,修改代码很少,效果明显。
参考文献:
[1] 周伟明.多核计算与程序设计[M].武汉: 华中科技大学出版社,2009.
[2] 张平,李清宝,赵荣彩.OpenMP并行程序的编译器优化[J].计算机工程,2006,32(24):37-40.
[3] Parallel Programming in Fortran 95 using OpenMP [EB/OL].Fortran Coder.http://www.fcode.cn
[4] OpenMp homepage [EB/OL] .http://www.openmp.org/
关键词:多核系统;并行计算;OpenMP
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)33-0083-02
结构决定功能,生物大分子同样如此。生物大分子三维结构研究对于了解其功能及生物学机制等具有非常重要的意义。结构生物学方法包括X射线晶体学方法(X-ray crystallography)、核磁共振技术(nuclear magnetic resonance spectroscopy)和冷冻电镜技术[Cryo-electron microscopy (Cryo-EM) single particle]。近年来,随着冷冻电子显微镜技术的发展、三维重构算法的不断完善及计算机计算能力的不断提高等,冷冻电镜技术,特别是冷冻电镜单颗粒技术(Cryo-EM single particle)已成为解析大型蛋白质复合体、病毒乃至细胞器高分辨三维结构的最有力工具之一,其在结构生物学中正扮演着越来越重要的角色。
在生物大分子三维重构实现中需要用到数万个二维投影颗粒的冷冻电镜照片,对二维投影颗粒的处理过程中每次都要重复进行中心移位,球谐函数计算等处理操作。普通的计算机单核线程处理时间长。而目前我们配备的计算机都具有八个以上线程核心,配备的服务器线程核心高达48个,传统的串行程序只会跑满一个线程核心,其他线程核心处于闲置状态。因此充分利用线程核心很有必要。
OpenMP标准形成于二十世纪九十年代,用于多处理器核心并行程序设计的一套方案,能够充分利用现有的CPU的硬件资源,目前OpenMPC、C 和Fortran等程序语言,也支持GNU的编译器,符合我们当前使用的程序设计方案。采用OpenMp可以在現有的程序代码中提专用的pragma等编译指导语句,编译器可以自动将程序进行并行化,容易改造,成本比较低。
采用基于球坐标系的病毒三维重构算法,已经成为基于冷冻电镜技术进行三维重构的重要方法。其中关于对称匹配函数的计算量大,耗时长。
对称匹配函数的计算包括组合系数[Aμl,m]和球谐函数[Yl,m]两部分,高阶组合系数可以由低阶系数通过复杂递推关系获得。球谐函数可表示为:
[Yl,m(θ,?)=(-1)m(2l 1)(l-m!4π(l m)!Pml(cosθ)eim?] (1)
其中[Pml(cosθ)]为缔合勒让德多项式,可表示为:
[Pml(cosθ)=12ll!sinmθdl m(dcosθ)l m(cos2θ-1)l] (2)
由上可见,单个球谐函数的计算变得非常复杂,而对于球谐函数组成的对称匹配函数,比如,l=1000,需要Y1000,0, Y1000,1, …., Y1000,1000共1001个球谐函数的组合,而且考虑基函数完备性,l=1000时还有35种不同的多重性(μ=35),即35种不同的组合方法,因此,整个计算过程变得更加复杂。我们从此算法过程可以看出,35种组合方法的组合系数和球谐函数的计算可以由通过OpenMp并行处理。
如图1所示为并行程序设计流程图,图2 为串行程序设计的流程图,二者的主要区别在于串行程序每次计算一个颗粒,并行程序每次计算100个颗粒。
由于每个颗粒的计算完全独立,不需要进行数据共享和数据通讯,所以用OpenMP非常方便,仅仅使用 !$OMP PARALLEL ,!$OMP END PARALLEL即可。以下为伪代码:
program main
Use omp_lib
Call ReadPara(100)
!$OMP PARALLEL
Do pid=first,last
Call ComputeStick(para)
End do
!$OMP END PARALLEL P
End program
ReadPara函数是读入多个颗粒数据,ComputeStick函数是计算球谐函数。
结果与分析:
我们使用计算CPV病毒的程序(以下简称为串行程序),计算过程是取10409个颗粒进行计算。在主频3.5G intel i7的CPU上运行,串行程序,需要时间是接近3小时。经过并行化改造后,仅仅需要30分钟左右,执行效率提高了5倍。采用OpenMp方法对原来程序改造,修改代码很少,效果明显。
参考文献:
[1] 周伟明.多核计算与程序设计[M].武汉: 华中科技大学出版社,2009.
[2] 张平,李清宝,赵荣彩.OpenMP并行程序的编译器优化[J].计算机工程,2006,32(24):37-40.
[3] Parallel Programming in Fortran 95 using OpenMP [EB/OL].Fortran Coder.http://www.fcode.cn
[4] OpenMp homepage [EB/OL] .http://www.openmp.org/