基于动态数据划分和冲突消解的高通量药物虚拟筛选方法
【技术领域】
[0001]本发明涉及计算机辅助药物设计领域药物虚拟筛选方法,尤其指一种基于动态数据划分和冲突消解的高通量药物虚拟筛选方法。
【背景技术】
[0002]药物虚拟筛选是在计算机的帮助下,使用分子对接方法,根据小分子与蛋白结合能力判断小分子活性。高通量药物虚拟筛选(HighThroughput Virtual Screening)是在短时间内,采用分子对接技术,根据药物作用靶标的分子结构,通过分子模拟手段计算化合物库中的小分子与靶标结合的能力,预测候选化合物的生理活性。高通量药物虚拟筛选具有一定特点,主要包括:
[0003]1.存在一个总作业池,或者是作业列表,各组员进程从作业池中获取作业,并行计算,因此需要合理的数据划分方式,来达到负载均衡;
[0004]2.单个筛选作业计算时间不尽相同,同样带来负载均衡问题;
[0005]3.筛选作业之间相互独立,具有天然的并行性,而各进程之间不需要大量交换数据和状态,因此整个系统是非同步式的;
[0006]4.单个作业需要一定量10,数以万计的组员进程需要超高量的10,因此应用可能会存在1瓶颈;
[0007]5.数万进程之间的通信,如果是平摊在整个运行过程是可以接受的,但是如果瞬时发生,会阻塞系统的通信网络。
[0008]目前主流高通量药物虚拟筛选方法采用单层主从模式进行数据划分和作业调度,其主要步骤如下:
[0009]步骤1:主进程从作业池中顺序读取筛选作业,以轮转方式发送给多个子进程,确保每一个子进程处于满负荷状态;
[0010]步骤2:子进程接收作业,进行计算;
[0011 ]步骤3:子进程计算结束,给主进程发送消息;
[0012]步骤4:主进程接收来自子进程的消息,随后读取新作业发送给该子进程;
[0013]步骤5:步骤2-步骤4不断循环,直到所有作业计算结束。
[0014]首先进行虚拟筛选的小分子结构不同,计算时间不同,以简单的静态数据划分会造成进程间负载不均衡;使用普通轮转方式分配任务,随着并行规模不断扩大,通信速度下降,作业分配可能出现较大延迟,降低并行效率。以上两点使得当前的高通量药物虚拟筛选难以达到负载均衡。
[0015]目前主流高通量药物虚拟筛选方法在充分利用集群、超级计算机计算能力、可扩展性等方面还具有许多难点,原因有多重因素。首先是虚拟筛选作业数量的庞大,药物虚拟筛选候选化合物有3500万。其次是庞大的作业量带来的存储压力,药物虚拟筛选的候选化合物以小文件的形式存在,数十亿计的小文件给文件系统极大压力。然后是在数千节点上,部署使用高通量药物虚拟筛选软件时,瞬时10、通信操作,很可能会超越超级计算机的10、通信带宽,因此造成1管道堵塞,造成通信瓶颈,导致当前主流高通量虚拟筛选方法在进行药物虚拟筛选时速度缓慢、新药研制周期过长。
[0016]集群、超级计算机的发展,多节点多核以及异构体系,高速互联网络的出现给解决高通量药物虚拟筛选的可扩展性问题提供了强大的计算能力基础。为了充分利用这些计算资源,高通量药物虚拟筛选必须有一个高效可扩展的并行计算方法,达到负载均衡,并规避
10、通信的瓶颈,加速高通量药物虚拟筛选的速度和效率,缩短新药研究周期。
【发明内容】
[0017]针对目前主流高通量药物虚拟筛选方法存在负载不均衡、瞬时10、通信操作造成通信瓶颈,导致当前主流高通量虚拟筛选方法在进行药物虚拟筛选时速度缓慢的问题,本发明提供一种基于动态数据划分和冲突消解的高通量药物虚拟筛选方法,目的是实现高通量药物虚拟筛选的负载均衡,并解决海量并发10、通信问题,提高药物虚拟筛选的速度和效率,缩短新药研究周期。
[00? 8]本发明技术方案是:进程分组,任务分为两大部分,第一部分米用静态任务划分,由各组长进程以轮转方式获取筛选作业,分发给组员,即组员进程;第二部分采用动态任务划分,采用进程分组的方式,以“能者多劳”的原则,由各组组长动态获取筛选作业,分配给组员;组员进程第一次处理筛选作业时,根据进程编号睡眠一定时间,实现“流水线式” 1和通信隐藏。
[0019]具体技术方案如下:
[0020]主要变量定义:
[0021 ] NJOBS:待处理筛选作业总数量,NJOBS为大于I的整数;
[0022]FIRST_PR0P0RT10N:第一阶段所处理筛选作业比例,FIRST_PR0P0RT10N为实数,0〈FIRST_PR0P0RT10N<1;
[0023]FIRST_NJ0BS:第一阶段处理筛选作业数量,FIRST_NJ0BS为大于I的整数,FIRST_NJOBS=NJ0BS*FIRST_PR0P0RT10N;
[0024]NPROCS:总进程数,NPROCS为自然数;
[0025]JobNo:筛选作业编号 JobNo为整数,O < JobNo < NJ0BS-1 ;
[0026]NGROUPS:进程组数,NPROCS个进程被划分成NGROUPS组进程,记为第O进程组,…,第i进程组,…,第(NGR0UPS-1)进程组;指定O到NGR0UPS-1号进程为组长进程,每个组长进程中,声明一个数组ProGI,数组大小为NPR0CS/NGR0UPS,以轮转算法将进程分组,第i进程组的第j个组员进程的进程编号ProcessID为ProGI[j] = i+j*NGR0UPS,O < i < NGROUPS-1,1
<j < (NPR0CS/NGR0UPS-l),1、j均为整数;NGROUPS 为整数,I < NGR0UPS〈NPR0CS,要求NPROCS % NGROUPS = O,其中%为求余操作符,NPROCS % NGROUPS = O即为总进程数可以被进程组数整除;
[0027]GR0UPID:进程组编号,GR0UPID 为整数,GR0UPID = 0,1,..., NGROUPS-1,其中 /为除操作;
[0028]ProcessID:进程编号,ProcessID为整数,ProcessID = O,I,…,NPR0CS-1 ;
[0029]SGSIZE:睡眠组大小,SGSIZE为整数,O < SGSIZE < NPROCS ;当进程执行首次计算时,休眠进程,即执行sleep( (ProcessID/SGSIZE)*T),sleep为进程休眠操作,(ProcessID/SGSIZE)*T为休眠时间;
[0030]JobCurPos:当前待处理筛选作业首位置,JobCurPos为整数,O < JobCurPos<NJ0BS;
[0031 ] T:睡眠时间,T为大于O的整数,单位为秒。
[0032]本发明基于动态数据划分和冲突消解的高通量药物虚拟筛选方法,流程如下:
[0033]步骤1:初始化。根据参数输入或者配置文件获取初始参数:NJ0BS、FIRST_PR0P0RT10N、NPR0CS、NGR0UPS、SGSIZE、T,计算得到第一阶段处理筛选作业数量FIRST_NJ0BS = NJ0BS*FIRST_PR0P0RT10N。此时计算任务分为两部分——第一阶段处理筛选作业数量FIRST_NJ0BS,第二阶段处理筛选作业数量(NJ0BS-FIRST_NJ0BS);
[0034]步骤2:进程分组。指定O到NGR0UPS-1号进程为组长进程,每个组长进程中,声明一个数组ProGI,数组大小为NPR0CS/NGR0UPS,以轮转算法将进程分组,每个进程组中包含NPR0CS/NGR0UP个进程,包括一个组长进程和(NPR0CS/NGR0UP-1)个组员进程。第i进程组的第j组员进程的进程编号ProcessID为?抑61[」]=丨+_]_*恥肋1^5,第(肥1?(^5/吣1?01^5-1)组员进程的进程编号为 i+(NPR0CS/NGR0UPS-1) *NGR0UPS = i +NPR0CS-NGR0UPS;因此,第i 进程组中(NPR0CS/NGR0UPS-1)个组员进程的进程编号分别为:i+NGR0UPS,…,i+j*NGR0UPS,…,i+NPROCS-NGROUPS。第O进程组,…,第i进程组,…,第(NGR0UPS-1)进程组并行进行作业筛选,每个进程组作业筛选的流程相同,第i进程组作业筛选的流程如下:
[0035]步骤3:FIRST_NJ0BS个作业按JobNo分配给组长进程。第i进程组的组长进程,即进程编号ProcessID为i的进程,声明一个整数向量Vdata,以轮转算法将O到FIRST_NJ0BS-1号作业按JobNo分配给组长进程,S卩GR0UPID = JobNo % NGROUPS = i的作业被分配到第i进程组中,插入到组长进程的向量Vdata中,即组长进程执行Vdata.push(JobNo);
[0036]步骤4:组长进程将Vdata中的元素取出,以先到先得(First Come First Serve,FCFS)方式发送给(