一种快速开发异构并行程序的方法技术

技术编号:10428762 阅读:138 留言:0更新日期:2014-09-12 19:32
本发明专利技术提供一种快速开发异构并行程序的方法,涉及CPU串行程序的性能分析和异构并行程序的移植:首先对CPU串行程序进行性能和算法分析,定位程序性能瓶颈和其可并行性;然后在原有代码的基础上插入OpenACC预编译指令,得到可在异构并行环境上执行的异构并行代码;将代码根据软硬件平台指定参数编译执行,根据程序运行结果确定是否需要进一步的优化。这种快速开发异构并行程序方法和现有的技术相比,其优势在于:1).无需重构现有代码;2).多语言支持,支持C/C++和FORTRAN等语言;3).跨平台和硬件,支持Linux、Windows和Mac等操作系统平台,支持英伟达、AMD的GPU、Intel Xeon Phi等硬件。本发明专利技术能够高效的对现有程序进行并行化,使程序充分利用异构系统的计算能力,实用性强,易于推广。

【技术实现步骤摘要】
一种快速开发异构并行程序的方法
本专利技术涉及计算机应用和高性能计算领域,具体地说是一种快速开发异构并行程序的方法。
技术介绍
2006年,英伟达(NVIDIA)公司推出了可软件编程进行通用计算的图形处理器G80,该处理器包含128个流式微处理器。为了挖掘其图形处理器(GPU,GraphicProcessingUnit)的计算潜力,英伟达公司于2008年5月推出了计算统一设备架构(CUDA,ComputeUnifiedDeviceArchitecture)编程模型和适用于其产品线的软件工具开发包。自此GPU编程和其高性能逐渐被科研和市场所接受和重视,被广泛应用到计算流体力学、生物制药、金融、能源等许多领域。英伟达生产的专用于服务器上的Tesla协处理器已经被部署到许多计算集群或超级计算机上,包括中国制造的超级计算机天河I号。2008年6月,苹果公司在苹果全球开发者大会(WWDC,WorldwideDevelopersConference)上提出了OpenCL规范。OpenCL旨在提供一组通用的开发API,以便让编程人员能开发出GPU通用计算软件。不同于CUDA,使用OpenCL开发的软件可运行在任何支持OpenCL标准的图形处理器上,而不仅只是英伟达自家生产的图形处理器。2010年,英特尔(Intel)公司向开发者推出了基于众核集成架构(MIC,ManyIntegratedCoreArchitecture)的处理器产品,并于2011年向市场推出了第一代MIC产品。2012年英特尔正式将这一加速器产品线命名为IntelXeonPhi。在世界Top500中排名第一、由中国制造的超级计算机天河II号上,部署的加速器是IntelXeonPhi。2011年,英伟达,Cary,PGI和CAPS公司推出了适用于并行计算的编程标准OpenACC。OpenACC类似于OpenMP,开发人员只需在需要并行的代码块中插入并行预编译即可,无需关注底层的实现细节。相对于CUDA,OpenCL提供了统一的编程接口,用其开发的软件可适用于更多的硬件平台。而CUDA的优势在于更接近于硬件,能更好地发挥硬件的性能;其缺点则是可移植性差,目前CUDA程序几乎只能运行在英伟达公司生产的图形处理器上。而MIC与两者不同,需要按照英特尔公司提出的编程模型才能利用其计算能力。对想获益于异构体系性能的开发者而言,CUDA、OpenCL和MIC的差异造成了选择上的困难:需要在开发前权衡程序的通用性和性能。如若全部学习和使用,则将加大学习的负担和开发的难度。另一方面,无论是CUDA、OpenCL还是MIC,开发者均需要对现有的代码进行重构才能得到适用于CPU+Accelerator的异构环境的并行程序。对现有的代码进行重构可能会引入bug,同时开发人员需要投入相应的努力才能得到异构的并行程序。面对不断发展的硬件和性能不断提升的异构并行系统,需要与之相对应的软件才能发挥出其真正潜力。为了实现采用异构并行程序计算的需求,亟需一种快速有效的异构并行程序开发方法。
技术实现思路
为了解决上述技术问题,本专利技术提出了一种快速开发异构并行程序的方法。该方法的技术任务是解决现有技术的不足,为异构架构编程人员提供一种快速开发异构并行程序和性能优化的方法。本专利技术的技术方案实施过程如下:步骤一:串行CPU程序分析,分析工作和方案包括:1)使用第三方性能测试工具获取程序运行的数据;2)使用打印时间方式测试程序中的性能瓶颈;3)根据算法和数据结构特点分析代码块是否可并行;步骤二:对可并行的关键函数或者模块插入OpenACC指令进行异构并行化,其中:1)对程序整体性能影响很小的代码块无需并行化;2)大部分的时间耗时都是因为循环迭代造成,可以使用#pragmaaccparallelloop语句将循环迭代并行化;3)使用#pragmaaccdata、#pragmaaccupdate等指令显式指定数据复制、更新,以保证数据在主机和加速器上的一致性和有效性;步骤三:完成了基于OpenACC指令的程序异构并行化之后,使用支持OpenACC的编译器针对不同硬件平台编译代码。在编译过程中:1)编译器需支持或兼容所采用的OpenACC指令的版本和标准;2)对不支持OpenACC标准的编译器,设置其忽视所插入的OpenACC预编译指令,即可得到与修改前一样的串行CPU程序;3)根据程序运行的软硬件指定编译参数,得到适用于指定软硬件平台的可执行程序。通常软件平台指Windows、Linux或Mac等操作系统,硬件平台包括英伟达公司的图形处理器、AMD公司的Radeon图形处理器或者IntelMIC协处理器等。步骤四:在异构硬件平台上运行并行程序,测试其性能。性能测试数据包括并行版本的加速比、各代码块的耗时等数据。步骤五:分析收集的异构并行程序运行的数据信息,如果未达到预定的性能要求,可对其进行进一步优化。其中优化手段包括:1)插入更多的并行指令以更为细致的方式引导编译器进行进一步优化;2)并行在串行测试中不是很关键的代码块或者函数。并行化后的程序可能会让之前不是性能瓶颈的模块成为新的性能热点,将其并行化能够进一步减少并行程序耗时;3)采用异步通信方式掩盖数据传输带来的延迟;4)预先分配数据空间,减少因为处理器每次执行并行代码带来的分配空间和初始化开销;步骤六:重复上述开发和优化流程,直到不能再进一步优化或者达到目标要求。本专利技术与现有技术手段相比所产生的有益效果是:1.本专利技术可以在不修改原有串行代码的基础上快速有效的得到适用于多软件平台、多硬件平台的异构并行程序代码;2.本专利技术提供的方法可以帮助开发人员快速开发和迭代得到适用于异构并行计算环境的高性能并行程序;3.本专利技术提供的快速开发并行程序算法具有天然的可移植性,可以让程序代码变得更为通用;4.本专利技术缩短了异构并行程序开发的周期,减少了bug调试时间,减轻了程序开发人员的负担和难度;5.本专利技术提供的方法按照逐步修改,快速迭代的原则,简洁高效;6.本专利技术提供的一种快速开发异构并行程序的方法实用性强,易于推广。附图说明图1是本专利技术的异构程序开发流程图;图2为一种异构并行程序的运行模型图;图3为使用OpenACC指令的异构并行代码示例图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的方法进行清楚、完整的描述。所描述的实施例仅仅是本专利技术的一部分实施例,而不是全部。基于本专利技术中的实施例,本领域技术人员在没有做出创造性工作前提下所获得的所有其他实施例,都属于本专利技术保护的范围。如附图1所示,本专利技术提供的一种快速开发异构并行程序的方法首先对串行CPU程序进行性能分析和热点测试,然后在现有的代码基础上插入OpenACC预编译指令将程序进行异构并行化;使用支持OpenACC标准的编译器针对运行的软硬件平台编译异构并行化的程序代码,得到可执行程序;在异构计算系统上运行并行程序,采集程序运行信息数据;根据数据信息,结合性能和开发需求确定是否对程序进行进一步的性能优化。本专利技术充分利用了OpenACC技术的跨平台和开发便捷性,能够快速高效地开发出适用于不同异构体系的异构并行计算程序。一种快速开发异构并行计算程序的方法的具体操作过程为:1、对CPU串行程序本文档来自技高网
...
一种快速开发异构并行程序的方法

【技术保护点】
一种快速开发异构并行程序的方法,其特征在于,所述方法具体包括以下步骤:步骤一:进行CPU串行程序性能分析,包括测试当前串行程序的性能瓶颈、分析算法或代码块的可并行性等;步骤二:针对性能热点和可并行化代码块,插入OpenACC指令对其进行异构并行化;根据算法特点和数据特点使用合适的指令将密集计算部分转移到加速器上执行;步骤三:针对程序执行的软硬件平台,使用支持OpenACC的编译器对异构并行代码进行编译,得到可执行文件;步骤四:在异构环境上执行并行化的程序,收集性能数据;步骤五:根据性能数据,确定是否需要进行进一步优化;如果需要再次优化,优化手段包括优化数据结构、优化通信交互方式等。

【技术特征摘要】
1.一种快速开发异构并行程序的方法,其特征在于,所述方法具体包括以下步骤:步骤一:进行CPU串行程序性能分析,包括测试当前串行程序的性能瓶颈、分析算法或代码块的可并行性等;步骤二:针对性能热点和可并行化代码块,插入OpenACC指令对其进行异构并行化;根据算法特点和数据特点使用合适的指令将密集计算部分转移到加速器上执行;步骤三:针对程序执行的软硬件平台,使用支持OpenACC的编译器对异构并行代码进行编译,得到可执行文件;步骤四:在异构环境上执行并行化的程序,收集性能数据;步骤五:根据性能数据,确定是否需要进行进一步优化;如果需要再次优化,优化手段包括优化数据结构、优化通信交互方式等;如果性能未达到要求,可在以下方面进行进一步优化:A)插入更多的并行指令以更为细粒度的方式引导编译器执行深层优化;B)若有新的程序性能瓶颈出现,分析其算法的并行性和并行粒度;如果可并行化,则在相应的代码段插入OpenACC预编译指令进行并行化;C)主机和加速器之间的数据复制在保证正确性的情形下使用异步复制方式;D)预先分配数据空间,减少空间分配和初始化带来的程序性能开销。2.根据权利要求1所述的一种快速开发异构并行程序的方法,其特征在于:所述步骤一的详细过程为:性能瓶颈分析指根据运行时间确定耗时占比大的算法或者函数代码块,作为后续并行化的重点关注对象;算法或代码块的可并行性分析指根据算法的数据结构特点,算法的具体执行方式来确定其是否能够并行,以及并行的粒度。3.根据权利要求1所述的一种快速开发异构并行程序的方法,其特征在于:所述步骤二的详细过程为:根据步骤一的性能分析,对可并行化的热点代码块或者算法插入OpenACC预编译指令对其进行并行化;根据代码的特征采用合适的数据分配和主机与加速器之间的通信模式。4.根据权利要求1所述的一种快速开发异构并行程序的方法,其特征在于:所述步骤三中,对代码的编译需要采用支持OpenACC标准的编译器来编译,支持OpenACC的编译器可根据用户指定的硬件平台编译得到相应的可执行程序,本发明提出的方法将与操作系统平台和硬件相关的底层工作交给编译器,开发者只需要关注高层接口和特性,开发...

【专利技术属性】
技术研发人员:刘铁刚何晓峰赵越
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:北京;11

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

1