论文部分内容阅读
分子对接是指通过计算机模拟小分子配体和大分子受体之间的相互作用。在过去几十年里,世界上各个研究小组开发了数个分子对接软件,其中,Kuntz研究小组开发的DOCK分子对接软件应用最为广泛。生成小球的Sphgen程序是DOCK分子对接软件中很重要的一个步骤,它的计算过程十分耗时,严重地拖延了整个分子对接过程。因此,很有必要通过并行计算的技术来加快Sphgen程序计算,缩短分子对接的时间。Kuntz研究小组已经开发了一个基于Pthreads的并行Sphgen程序,但是这个并行Sphgen程序的加速比很低,在16个CPU参与计算情况下,加速比最多只有8.9,负载不均衡是导致加速比低下的原因。因此,本文首先提出了解决并行Sphgen程序的负载不均衡的三种方法:去除零原子,非均匀划分法,动态调度。本文通过分析Sphgen程序的计算数据,发现零原子是负载不均衡的一个原因,通过去除零原子,负载不均衡的问题得到了缓解,加速比有所提高;本文又从Sphgen程序的时间复杂度出发,经过理论推导,得出一个新的数据划分方法——非均匀划分法,它从理论上保证了各个CPU分配的计算任务的时间复杂度是相等的。通过这三种改进方法,在最好的情况下,并行Sphgen程序的加速比增加了5.0。其次,本文开发了基于MPI+OpenMP的并行Sphgen程序。通过MPI实现并行Sphgen程序面临的最大难点是串行的Sphgen程序是用C++编写的,而MPI只能传递简单数据类型,不能传递C++对象,因此,本文这一部分主要解决了MPI不能传递C++对象的问题。本文通过对象序列化机制,开发了能传递C++对象的MPI_Send_Object和MPI_Recv_Object两个函数,扩展了MPI函数库,使C++对象的传递和简单数据类型传递一样简单。最后,本文开发了基于CUDA的并行Sphgen程序。本文对这个三个版本的并行Sphgen程序进行了比较,基于CUDA的并行Sphgen程序的计算效率最为高效。