一种多线程程序下多节点并行架构的方法及装置制造方法及图纸

技术编号:9967364 阅读:95 留言:0更新日期:2014-04-25 07:28
本发明专利技术披露了一种多线程程序下多节点并行架构的方法及装置,其中包括:在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;在主进程的主函数中保留原始程序的线程开辟、线程绑定线程函数的操作;在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码;在子进程的主函数中删除原程序的主函数内容,增加原始程序的热点线程函数计算部分和与主进程通信部分。本发明专利技术通过在现有多线程版本程序框架下加入进程通信,实现多线程框架下多节点并行架构,提高了程序扩展性和性能,从而充分利用了节点间计算资源。

【技术实现步骤摘要】
【专利摘要】本专利技术披露了一种多线程程序下多节点并行架构的方法及装置,其中包括:在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;在主进程的主函数中保留原始程序的线程开辟、线程绑定线程函数的操作;在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码;在子进程的主函数中删除原程序的主函数内容,增加原始程序的热点线程函数计算部分和与主进程通信部分。本专利技术通过在现有多线程版本程序框架下加入进程通信,实现多线程框架下多节点并行架构,提高了程序扩展性和性能,从而充分利用了节点间计算资源。【专利说明】一种多线程程序下多节点并行架构的方法及装置
本专利技术涉及计算机软件优化技术,尤其涉及多线程程序下多节点并行架构的方法及装置。
技术介绍
并行计算广义是指在一个程序中同时执行多个计算任务,通常用于对性能要求极高的场合,例如:气象预报、石油勘探等科学计算领域。并行计算能够充分利用CPU计算资源,因此应用越来越广泛。并行计算通常有两种实现方式:多进程和多线程。多线程程序仅能用于单节点(节点指网络中的一个计算设备)并行计算,优势在于线程间通信简单,线程开销小。多进程程序可以用于多节点并行计算,但是节点间通信需要通过网络实现,开销较大。通常结合二者的设计方式是框架采用多进程方式,进程内部使用多线程方式,以充分利用多节点和节点内的CPU计算资源。多进程程序通常采用消息传递接口(MPI, Message Passing Interface)进行开发。MPI是通用的工业级的进程间通信接口,可以方便地通过消息传递方式在进程间进行通信,并提供了方便的集群多进程运行方式。多线程程序可以使用多种方式进行线程间并行计算,例如:0penMP、pThread等。OpenMP是以编译指导语句形式对源程序进行简单修改,即可利用多线程库进行自动的并行,隐藏了很多细节。OpenMP库底层是调用pThread实现的。pThread库是Linux下的底层线程库,Windows下也有对应的线程应用程序接口(API, Application ProgramInterface ),使用pThread库可以手工控制线程运作方式,提供了更加精细的控制。但是,如果原始计算程序为多线程程序,欲充分利用多节点计算资源,就必须将其改造为多进程程序。现在采用的方法是将代码大幅重写,将多线程程序框架改为多进程程序框架,费时费力。目前还没有一种方法能快速将多线程程序改造为保留多线程程序框架,计算部分采用多进程架构,以充分利用节点间计算资源。
技术实现思路
本专利技术所要解决的技术问题是提供一种多线程程序下多节点并行架构的方法,能够使得多线程程序快速改造为多线程框架下的多进程计算架构。为了解决上述技术问题,本专利技术提供了一种多线程程序下多节点并行架构的方法,包括:在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;在主进程的主函数中保留原始程序的线程开辟、线程绑定线程函数的操作;在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码;在子进程的主函数中删除原程序的主函数内容,增加原始程序的热点线程函数计算部分和与主进程通信部分。进一步地,在该方法步骤之前还包括:根据原始程序测得热点线程函数,并通过分析确定热点线程函数能够优化成多进程方式并行架构。进一步地,在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;具体包括:在主函数中使用消息传递接口初始化函数创建所述主、从进程,并通过消息传递接口获取进程号函数获取相应的进程号,其中进程号O代表主进程,其余非O进程号代表从进程。进一步地,在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码,具体包括:在进入主进程的热点线程函数时,主进程向子进程发送包括任务长度,任务数据的任务相关信息;待完成全部信息发送时,主进程进入等待状态,等待子进程返回计算结果O进一步地,在子进程的主函数中删除原程序的主函数内容,增加原始程序的热点线程函数计算部分和与主进程通信部分,具体包括:由子进程等待主进程发送任务长度的信息,并根据任务长度分配内存空间;由子进程等待接收主进程发送任务数据的信息,并将收到的任务数据信息存入分配的内存空间;使用原始程序热点线程函数中计算部分调用的子函数或相应的代码对接收的任务数据进行计算;计算结束将计算结果发送至主进程;重复本步骤直到程序结束。为了解决上述技术问题,本专利技术提供了一种多线程程序下多节点并行架构的装置,包括相互连接的主函数模块和主进程计算模块,其中:主函数模块,用于初始化进程参数,针对主进程和从进程运行相应的分支,通过多个子进程接收主进程传输的参与计算的数据并进行计算,将计算结果发送给主进程;主进程计算模块,用于将需要计算的数据传递给子进程,并接收子进程的计算结果O进一步地,主函数模块通过进程创建模块运行进程初始化函数,初始化进程参数,包括创建线程并绑定线程函数;通过主函数判断模块判断进程属于主进程或从进程,并针对不同进程运行相应的分支;通过子进程计算模块使得多个子进程接收主进程传输的参与计算的数据,并通过调用核心计算模块分别对接收的数据进行计算,并分别将计算结果发送给主进程。本专利技术通过在现有多线程版本程序框架下加入进程通信,实现多线程框架下多节点并行架构,提高了程序扩展性和性能,从而充分利用了节点间计算资源。【专利附图】【附图说明】图1是本专利技术的多线程程序下多节点并行架构的方法实施例的流程图;图2是现有的原始计算程序组成的装置结构示意图;图3是本专利技术将图2所示的装置改造成的本专利技术的多线程程序下多节点并行架构的装置实施例的结构示意图。【具体实施方式】以下结合附图和优选实施例详细说明本专利技术的技术方案。应该理解,以下列举的实施例仅用于说明和解释本专利技术,而不构成对本专利技术技术方案的限制。如图1所示,是本专利技术的多线程程序下多节点并行架构的方法实施例的流程,包括如下步骤:步骤S110,根据原始程序测得热点线程函数,并通过分析确定该热点线程函数能够优化成多进程方式并行架构;其中,测得的热点线程函数可以有一个或多个。步骤S120,在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;其中,以MPI为例建立进程,即在主函数中使用MPI初始化函数创建主、从进程,并获取分别代表主从进程的进程号,即通过MPI获取进程号函数获取相应的进程号,其中进程号O表示主进程,其余非O进程号表示从进程。因此,可以通过判断进程号确定主进程与从进程,并在不同的分支中处理不同的情况。需要说明的是,建立进程的方式与编程人员使用的方式有关。例如以MPI为例,主、从进程使用同一份源代码,对程序员来说,创建进程是在初始化函数中完成的;但真实的创建进程操作是在程序启动时完成的。由于本专利技术面向的是程序员,因此这里采用以程序员视角为准,将初始化函数认为是创建进程的操作,即每个进程都有主函数,在主函数内都会通过执行初始化函数创建相应的进程,但是所有进程使用同一份源代码,并根据进程号执行不同的操作。步骤S130,在主进程的主函数中保留原始程序的线程开辟、线程绑定线程函数的操作;步骤S140,在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码;其中,在进入主进本文档来自技高网
...

【技术保护点】
一种多线程程序下多节点并行架构的方法,包括:在原始程序的主函数中创建主、从进程,并获取分别代表主、从进程的信息;在主进程的主函数中保留原始程序的线程开辟、线程绑定线程函数的操作;在主进程的热点线程函数中删除原有的计算代码,增加与子进程通信的代码;在子进程的主函数中删除原程序的主函数内容,增加原始程序的热点线程函数计算部分和与主进程通信部分。

【技术特征摘要】

【专利技术属性】
技术研发人员:沈铂张广勇卢晓伟吴韶华
申请(专利权)人:浪潮北京电子信息产业有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1