CN103226540B - 基于分组多流的gpu上多区结构网格cfd加速方法 - Google Patents
基于分组多流的gpu上多区结构网格cfd加速方法 Download PDFInfo
- Publication number
- CN103226540B CN103226540B CN201310189688.8A CN201310189688A CN103226540B CN 103226540 B CN103226540 B CN 103226540B CN 201310189688 A CN201310189688 A CN 201310189688A CN 103226540 B CN103226540 B CN 103226540B
- Authority
- CN
- China
- Prior art keywords
- gpu
- stream
- cfd
- multithread
- num
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于分组多流的GPU上多区结构网格CFD加速方法,目的是加速GPU上运行的多区结构网格CFD应用。技术方案是构建CPU和GPU软硬件平台,部署多区结构网格CFD应用软件;执行分组多流管理软件、时间步推进软件,设置分组多流参数、CFD时间迭代步数和收敛条件,执行GPU存储管理软件初始化GPU存储空间使用方式、预先分配GPU存储空间并根据需要进行调整;在时间步迭代内执行分组多流管理软件,由GPU完成多区结构网格CFD应用的多流计算。本发明可有效加速GPU上运行的多区结构网格CFD应用,重叠GPU上多个网格分区的计算以及CPU与GUP间通信,以隐藏CPU和GPU间数据传输开销,缓解GPU全局显存容量较小的限制,且本发明简单易实现,通用性强。
Description
技术领域
本发明涉及GPU上多区结构网格CFD的加速方法,特别是利用多区结构网格CFD分区计算特点和GPU流处理机制,根据CFD应用问题的存储需求和GPU全局显存大小,对多个网格分区进行分组并在组内实现不同网格分区利用GPU多流加速的方法。
背景技术
计算流体动力学(Computational Fluid Dynamics,CFD)以理论流体力学与计算技术为基础,是流体力学当代新兴的一个分支学科。CFD通过数值方法求解流体力学控制方程,得到流场离散的定量描述,即所谓的流场在时间、空间点上的数值解,并以此预测流体运动规律。近三、四十年以来,随着计算技术与计算机技术的迅猛发展,CFD已发展成为一门独立学科,在航空、航天、气象、船舶、水利等方面应用十分广泛。CFD在确定计算区域的几何描述后需要采用网格划分技术将计算域表示成离散形式,网格按网格点之间的邻接关系可分为结构网格、非结构网格和混合网格三类。目前,结构网格仍是CFD应用中的首选,具有拓扑结构简单、数据存储开销小、索引方便、流场计算精度高、边界处理能力强等优点,通过引入分区、重叠网格等技术,结构网格在一定程度上能适应复杂外形的模拟。
随着数值模拟的几何外形日益复杂,流动机理研究越来越精细,CFD计算的网格规模和复杂度也空前增长,采用并行计算技术实现CFD并行计算已成为提高CFD应用效率的关键技术途径之一。传统CPU上并行计算主要采用分区并行方法[向大平等,低马赫数流动分区并行计算研究,空气动力学报,2002],利用消息传递通信实现任务并行或共享存储实现线程并行[莫则尧等,消息传递并行编程环境MPI,科学出版社,2001]。近年来,在高性能计算机系统的设计和实现中纷纷采用图形处理单元(GraphicsProcessing Unit,GPU)等作为加速处理部件,取得了惊人的性能提升。例如,我国的“天河一号”凭借CPU和GPU混合异构架构获得2010年TOP500[www.top500.org,2010]的第一。2007年NVIDIA公司[www.nvidia.com,2012]推出了统一计算架构(ComputeUnified Device Architecture,CUDA),CUDA通过对C、Fortran等数值计算高级语言进行简单的扩展,大大提高了GPU开发的效率和灵活性。近年来国外以欧美发达国家为主的大量学者结合GPU体系结构特点,逐步将一些CFD应用移植到GPU平台上,取得了很好的加速效果。例如,2008年,T.Brandvik等[T.Brandvik等,Acceleration of a 3DEuler solver using commodity graphics hardware,AIAA-2008-607 2008;T.Brandvik等,采用商业图形硬件加速3D欧拉求解器,AIAA-2008-607,2008]首次采用GPU进行了三维Euler方程的显式格式求解。同年,E.Elsen等[E.Elsen等,Large calculation of theflow over a hypersonic vehicle using a GPU,J.Comp.Phys.2008;E.Elsen等,基于GPU的超声速飞行器流动复杂计算,J.Comp.Phys.2008]开展了更具实际工程意义的工作,实现了多区结构网格可压缩欧拉求解器的GPU并行。2009年,A.Corrigan等[A.Corrigan等,Running unstructured grid based CFD solvers on modern graphics hardware,the 19thAIAA CFD Conference,2009;A.Corrigan等,在图形硬件上实现的非结构网格CFD求解器,19届AIAA CFD会议,2009]在Tesla C1060GPU上实现了一个非结构可压缩欧拉求解器的GPU并行。2009年,D.C.Jesperson等[D.C.Jesperson等,Acceleration of aCFD Code with a GPU,NAS Technical Report NAS-09-003,2009;D.C.Jesperson等,在GPU上加速CFD代码,NAS技术报告NAS-09-003,2009]对一个利用隐式SSOR方法求解结构网格RANS方程的CFD程序进行了GPU并行。为了进一步提高GPU计算的规模和加速比,近年来有学者实现了GPU集群上的CFD代码加速。2009年,E.H.Phillips等[E.H.Phillips等,Rapid aerodynamic performance prediction on a cluster of graphicsprocessing units,the47th AIAA Aerospace Sciences Meeting,2009;E.H.Phillips等,在图形处理单元集群上进行快速空气动力学性能预测,47届AIAA航空宇航科学会议]实现了一个支持GPU集群的可压缩多区结构网格求解器,能够利用包括16块GPU卡的GPU集群进行加速。2010年,D.Jacobsen等[D.Jacobsen等,An MPI-CUDAimplementation for massively parallel incompressible flow computations on multi-GPUclusters,the48th AIAA Aerospace Sciences Meeting;D.Jacobsen等,多GPU集群上大规模不可压流计算的MPI-CUDA实现,48届AIAA航空宇航科学会议]实现了一个支持包括128块GPU的集群的不可压Jacobi迭代CFD求解器。国内在基于GPU加速CFD并行计算方面开展的工作仍然较少。南京航空航天大学的张兵等[张兵等,基于GPU和隐式格式的CFD并行计算方法,航空学报,2010]探索了在个人计算机上如何采用GPU进行一般规模CFD问题的加速并行计算,实现了三维Euler方程的GPU并行。
上述研究表明GPU对于提高CFD计算效率具有巨大的潜力。分析发现,已有研究多关注如何利用CUDA编程模型实现CFD应用的细粒度并行、GPU存储层次优化等。近年来CUDA开始通过流处理机制支持任务级并行,允许用户将应用问题分为多个相互独立的任务,即所谓的流(Stream),每个任务或者流定义了一个操作序列,同一流内的操作需要满足一定的顺序,而不同流则可以在GPU上乱序执行。流机制的引入一方面满足了应用问题多层次并行性设计的需求,另一方面很好地适应了GPU的硬件资源特点,提高其资源利用效率。但流处理机制编程实现较为复杂,CFD开发人员对于流处理机制的应用还处于探索阶段,目前GPU上加速的CFD应用多采用单流实现,即一次GPU执行只能利用单个流处理一个分区,对于多个分区GPU采用单流依次进行处理。同时,由于当前主流的GPU显存大小仅为3GB到6GB且难以扩展,受限于存储空间大小,基于GPU加速的CFD应用的网格规模也相对较小。此外,由于多区网格不仅可能存储开销大,同时也增加了CPU和GPU间通过PCI-E总线进行通信交互的开销,因此当前GPU上加速的CFD应用多为单区简单外形问题。
根据专利文献检索,以往的专利与文献中尚未见到利用分组多流方法实现多区结构网格CFD问题的任务级GPU并行加速的相关报道。一些专利涉及到了如何构建CPU和GPU混合的并行系统进行数值模拟,例如专利号为8225074的美国专利以及专利号为201110136539.6的中国专利,另一些专利则阐述了如何处理CPU和GPU协同计算中的数据结构问题,例如专利号为20100036940的美国专利以及专利号分别为201010244535.5和201210140745.9的中国专利,上述专利都不涉及具体应用领域,也没有强调利用GPU的流处理机制实现任务级并行。专利号为201210115719.0的中国专利提出了另外一种基于CUDA实现多任务共享GPU的方法,既非面向CFD领域,也非采用流处理机制。另外,也有一些专利申请采用CPU和GPU协同加速科学计算核心算法或应用的方法,例如,专利号为200910226769.4的专利阐述了利用CPU和GPU协同工作对三角线性方程组求解的加速方法,专利号为201210128973.4的中国专利介绍了一种利用GPU加速格子-玻尔兹曼的方法,专利号为200810063008.7的中国专利则描述了一种基于GPU的实时动态水面模拟方法。上述专利均不涉及传统CFD应用领域,也没有涉及到基于流处理的任务级并行。
发明内容
本发明要解决的技术问题是:针对多区结构网格CFD应用,提出一种基于分组多流的GPU加速方法,通过流处理机制实现不同网格分区计算任务的加速,重叠GPU计算以及CPU和GPU间通信,隐藏CPU和GPU间数据传输开销;根据CFD应用问题的存储需求和GPU全局显存大小,调整分组多流的参数和部分流场变量在GPU上的存储使用方式,缓解GPU全局显存容量较小的限制,显著提升多区结构网格CFD应用在GPU上并行计算的效率和规模。
本发明技术方案如下:
第一步,构建CPU和GPU软硬件平台,在CPU和GPU平台上部署多区结构网格CFD应用软件。方法是:CPU作为主处理器,GPU作为加速器,CPU和GPU间通过PCI-E总线连接,CPU上安装有操作系统、编译器以及GPU驱动、GPU开发环境,要求GPU硬件体系结构实现及其编程开发环境支持流处理机制(详细要求请参见相关的GPU厂商的规范,例如如果采用英伟达公司的GPU,则可以参考网站www.nvidia.com.cn);在CPU上安装多区结构网格CFD应用软件,包括CFD求解流程涉及的几种软件:初始化软件,负责在时间步迭代之前初始化CFD流场;边界处理软件,负责在每个时间步迭代后处理CFD边界条件;时间步推进软件,通过时间步迭代实现CFD应用求解的核心逻辑;流场解输出软件,负责在时间步迭代结束后输出计算得到的流场离散值;其中时间步推进软件反复执行时间步迭代,是CFD软件的性能热点,也是本方法在GPU上进行加速的模块;此外,在CPU安装GPU存储管理软件,负责在GPU上为流场变量分配、释放存储空间并在CPU与GPU间拷贝流场变量;在CPU安装分组多流管理软件,负责配置分组多流参数、创建并以分组方式启动GPU上的多流。以下步骤中,除了4.3.6步由GPU执行,其它步骤均由CPU执行,CPU控制GPU存储空间的分配和释放、启动GPU上的计算以及CPU与GPU之间的数据传输。
第二步,初始化分组多流参数,设置CFD流场变量的GPU存储使用方式,设置CFD的时间迭代步数和收敛条件。流场变量在GPU上的存储使用方式包括三类:第一类是针对全局流场变量的,在GPU上的存储使用方式为预先分配GPU存储,计算过程中无需重新分配、释放;第二类是针对全局流场变量的,但在GPU上的存储使用方式为临时分配GPU存储,计算过程中需要重新分配、释放,需要在CPU和GPU间拷入拷出;第三类是针对各CFD计算过程涉及的局部流场变量的,在GPU上的存储使用方式为临时分配、使用、释放GPU存储空间。通常而言,CFD应用越复杂则流场变量越多,网格规模越大则每个流场变量所需存储越大,因而需要的GPU存储空间越大;在GPU存储允许的情况下,采用第一类方式效率最高且第一类方式不受分组多流参数的影响,而第二类、第三类方式所需的GPU存储空间与每组流的大小有关,流的数量越多,所需的存储空间越大。记GPU上网格分区数为block_num,流的分组数量num_stream_grp,每组流的数量num_stream,时间迭代步数为Max_Step,block_num、num_stream_grp、num_stream、Max_Step均为正整数。方法如下:
2.1启动分组多流管理软件根据网格分区数初始化配置GPU流的分组,将num_stream_grp初始化为1,num_stream初始化为block_num;
2.2启动GPU存储管理软件将所有全局流场变量的GPU存储使用方式设置为第一类,局部流场变量的GPU存储使用方式设置为第三类。
2.3启动CFD时间步推进软件,设置CFD的时间迭代步数和收敛条件(不同的CFD应用问题的时间步迭代和收敛条件的设定差别较大,请参考CFD专业书籍,例如阎超编著的计算流体力学方法及应用[M],北京航空航天大学出版社,2006)。
第三步,执行GPU存储管理软件,根据第二步的设置为第一类变量预先分配GPU存储空间,并根据GPU存储空间使用情况调整流场变量的GPU存储使用方式。具体流程如下:
3.1执行GPU存储管理软件,根据2.2设定的流场变量存储使用方式为第一类全局变量预先分配GPU存储空间(具体分配方法参见相应的GPU厂商的编程手册,例如英伟达公司的《CUDAAPIREFERENCEMANUAL》,version4.0,2011),如果GPU存储空间不足则转3.2,否则转3.3。
3.2调整GPU存储使用方式和分组多流配置参数。原则是:尽可能地优先采用第一类方式以减少CPU和GPU间通信交互,如果GPU存储空间不足,首先通过分组多流配置进行调整,再将一部分全局流场变量的GPU存储使用由第一类改第二类。具体流程如下:
3.2.1执行分组多流管理软件,流的分组数量重新设置为num_stream_grp=num_stream_grp+1,相应地每组内GPU流的数量为其中指的是大于X的最小的整数。
3.2.2如果num_stream≥2,在CPU上执行GPU存储管理软件,根据流场变量存储使用方式分配GPU存储空间,如果GPU存储空间不足则转3.2.1,否则转3.3。如果num_stream<2,则转3.2.3。
3.2.3将部分全局流场变量的GPU存储使用方式由第一类改为第二类,即在分组多流中对这部分变量采用临时分配GPU存储,具体过程如下:
3.2.3.1判定是否存在以第一类方式使用GPU存储的全局流场变量,若有则选取一个该类型全局流场变量,将该全局流场变量的GPU存储使用方式改为第二类,转3.2.3.2;如果不存在,则无法再进行调整,提示“GPU存储空间不足”的错误信息,转第六步退出CFD软件。
3.2.3.2将GPU流的分组数量num_stream_grp初始化为1,每组流的数量num_stream初始化为block_num,转3.1。
3.3对于以第一类方式使用GPU存储的全局流场变量,将CPU上变量值拷贝到GPU上,执行第四步。
第四步,执行CFD时间步推进软件、GPU存储管理软件、分组多流管理软件,创建GPU上的多流,由GPU进行多区结构网格CFD应用的多流计算,具体过程如下:
4.1执行CFD时间步推进软件,初始化时间步循环的计数器变量n_step=1。
4.2执行GPU存储管理软件,为采用第二类和第三类方式使用GPU存储空间的全局、局部流场变量临时分配空间;
4.3执行分组多流管理软件,通过一个两层嵌套循环构建分组多流,外层循环针对分组,内层循环针对每组的多流;在外层循环内动态创建num_stream个GPU流,在内层循环由GPU进行多区结构网格CFD应用的多流计算,具体流程如下:
4.3.1初始化外层循环的计数器变量stream_grp_id=1。
4.3.2根据当前的分组多流配置,动态创建num_stream个GPU流。
4.3.3初始化内层循环的计数器变量stream-id=1。
4.3.4计算映射到第stream_grp_id个组的第stream_id个流的网格分区的编号nc=〔stream_grp_id-1〕*num_stream+stream_id,如果nc>block_num,则转4.4,否则转4.3.5。
4.3.5利用第stream-id个GPU流启动与第nc个区块相关的操作,包括:启动从CPU拷入该区块到GPU的操作,启动GPU内核代码执行该区块在GPU上的计算,启动从GPU拷出该区块到CPU的操作。
4.3.6GPU根据第stream_id个GPU流包含的操作执行第nc个网格分区在GPU上的计算以及在CPU与GPU间的拷入、拷出操作。
4.3.7计数器变量stream_id的值增加1,若stream_id<=num_stream,则转4.3.4,否则转4.3.8。
4.3.8对第stream_grp_id个组内的多GPU流的执行进行同步。
4.3.9销毁第stream_qrp_id个组内的多GPU流(具体销毁方法参见相应的GPU厂商的编程手册,例如英伟达公司的《CUDAAPIREFERENCEMANUAL》,version4.0,2011)。
4.3.10计数器变量stream_grp_id的值增加1,如果stream_grp_id<=num_stream_grp,则转4.3.2,否则转4.4。
4.4执行GPU存储管理软件,释放4.2临时分配、使用的GPU空间。
4·5执行CFD时间步推进软件,计数器变量n_step的值增加1,如果n_step<=Max_Step且不满足收敛条件,则转4.2;如果n_step>Max_Step或满足收敛条件,转第五步。
第五步,执行GPU存储管理软件,将GPU计算结果拷回CPU,释放所有GPU存储空间,结束多区结构网格CFD的分组多流GPU加速。
第六步,结束多区结构网格CFD软件的运行。
采用本发明可以达到以下技术效果:
1)基于第四步的GPU分组多流方式可更加高效地加速GPU上多个网格分区的CFD计算,有利于提高GPU硬件使用效率。传统的GPU加速采用单流实现,每次对一个网格分区进行处理,仅考虑了网格分区内的数据并行,如附图3(a)所示。分区1和分区2顺序由GPU进行处理,任意时刻只有一个分区的计算任务可以由GPU调度,当出现访存的时候,GPU计算资源处于阻塞状态。本发明允许GPU同时处理多个网格分区,多个流/网格分区之间任务序列的独立性允许GPU同时调度多个流/网格分区的执行,如附图3(b)所示,分区l的GPU流l在访存时,GPU可以零开销地切换到流2执行分区2的计算。显然花分区间实现多流能够提高GPU效率,加速多区网格CFD应用。
2)基于第四步的GPU分组多流方式可有效重叠不同网格区块的GPU计算以及CPU与GPU间通信,大幅隐藏CPU和GPU间PCI-E数据传输开销。如附图4(a)所示,单流GPU加速时,分区i从CPU拷贝到GPU后再执行计算,计算结束后再从GPU拷回CPU,接着GPU才能处理分区(i+1)的拷贝和计算。当前很多GPU具有独立的拷入引擎、计算引擎和拷出引擎,单流实现意味着任意时刻三者只有其一处于忙碌状态,另外两者则处于空闲状态,GPU的整体性能不高。在多GPU流处理多个分区的时候,如附图4(b)所示,第i个流在执行第i个分区的计算时,第i+1个流将第i+1个分区拷入GPU;类似地,第i十1个流在执行第i+1个分区的计算时,第i个流将第i个分区拷出GPU。可以看出,多流机制能够重叠多个分区的拷入、计算和拷出,隐藏CPU和GPU间数据传输开销。
3)利用第三步的GPU存储管理软件和分组多流管理软件,能够调整分组多流配置和流场变量在GPU上的存储使用方式,缓解GPU全局显存太小的限制,提高GPU在大规模多区结构网格CFD应用中的实用性。目前,GPU卡集成的显存大小仅为3GB到6GB且不可扩展,采用第一类方式使用GPU存储,尽管效率高,但支持的网格规模较小。分组结合第二类方式,能够将每次GPU计算所需的存储空间限定为该组内的部分分区,多流则有效隐藏了采用第二类方式所需的拷入、拷出开销,用户可通过分组多流参数调整GPU存储空间使用。对于包括block_num个分区的CFD应用,为便于分析设分组多流配置为block_num=num_stream_grp*num_stream,每个分区所有流场变量需要的存储空间均为M,临时空间为N,则单流实现所需的存储大小为block_num*M+N;在多流实现时,假设有M'的存储空间改为临时分配,则所需的存储空间大小为block_num*(M-M')+num_stream*M'+num_stream*N,为了支持多流,临时空间由N增加为num_stream*N。表1给出了12个区块以及M’=M/2和M'=M/4时各种分组多流配置下的存储空间需求,通常M远大于N。与表1对应的M=30N时的存储需求变化如附图5,可以看出在M'=M/2,分组数为6,每组内流数为2时,占用的GPU存储减少最多,约减少了42%,这意味着GPU可以计算更大网格规模的CFD。
表1不同M’以及分组多流配置下的存储空间需求
12=1*12 | 12=2*6 | 12=3*4 | 12=4*3 | 12=6*2 | |
M′=M/2 | 12M+N | 12*M/2+6*M/2+6N | 12*M/2+4*M/2+4N | 12*M/2+3*M/2+3N | 12*M/2+2*M/2+2N |
M′=M/4 | 12M+N | 12*3M/4+6*M/4+6N | 12*3M/4+4*M/4+4N | 12*3M/4+3*M/4+3N | 12*3M/4+2*M/4+2N |
4)简单易实现,通用性强。分组多流针对多个网格分区的任务级并行设计,概念简单,容易理解,与网格分区内的具体GPU并行算法关系不大,与具体的CFD离散格式、求解方法等无关,与底层的GPU硬件实现无关,不仅通用性强,且很容易由原有的单GPU流并行扩展实现。
综上所述,本发明提出了一种基于分组多流的GPU加速方法,通过流处理机制实现不同网格分区计算任务的加速,重叠GPU计算以及CPU和GPU间通信,隐藏PCI-E数据传输开销;根据CFD应用问题的存储需求和GPU全局显存大小,调整分组多流的参数和部分流场变量在GPU上的存储使用方式,缓解GPU全局显存容量较小的限制。
附图说明
图1是本发明的CPU和GPU软硬件平台和部署的多区结构网格CFD应用软件结构图。
图2是本发明的总流程图。
图3是本发明多流实现多区结构网格CFD加速与单流实现加速进行对比的示意图。
图4是本发明多流实现多区结构网格CFD加速与单流实现加速时的计算与通信重叠进行对比的示意图。
图5是本发明缓解GPU全局显存限制的示意图。
具体实施方式
图1是本发明CPU和GPU软硬件平台和部署的多区结构网格CFD应用软件结构图。CPU和GPU间通过PCI-E总线连接,CPU上安装有操作系统、编译器以及GPU驱动、GPU开发环境;在CPU上安装多区结构网格CFD应用软件,包括初始化软件、边界处理软件、时间步推进软件和流场解输出软件,同时安装GPU存储管理软件和分组多流管理软件。
图2是本发明的总流程图,主要包括以下六个步骤:
第一步,构建CPU和GPU软硬件平台,在CPU和GPU平台上部署多区结构网格CFD应用软件。
第二步,初始化分组多流参数,设置CFD流场变量的GPU存储使用方式,设置CFD的时间迭代步数和收敛条件。
第三步,执行GPU存储管理软件,根据第二步的设置为第一类变量预先分配GPU存储空间,并根据GPU存储空间使用情况调整流场变量的GPU存储使用方式。
第四步,执行CFD时间步推进软件、GPU存储管理软件、分组多流管理软件,创建GPU上的多流,由GPU进行多区结构网格CFD应用的多流计算。
第五步,执行GPU存储管理软件,将GPU计算结果拷回CPU,释放所有GPU存储空间,结束多区结构网格CFD的分组多流GPU加速。
第六步,结束多区结构网格CFD软件的运行。
图3是本发明多流实现多区结构网格CFD加速与单流实现加速进行对比的示意图。传统的GPU并行采用单流实现,每次对一个区块进行处理,仅考虑了网格分区内的数据并行,如附图3(a)所示,分区1和分区2顺序由GPU进行处理,任意时刻只有一个分区的计算任务可以由GPU调度,当出现访存的时候,GPU计算资源处于阻塞状态。本发明允许GPU同时处理多个网格分区,多个流/网格分区之间任务序列的独立性允许GPU同时调度多个流/网格分区的执行,如附图3(b)所示,分区l的GPU流l在访存时,GPU可以零开销地切换到流2执行分区2的计算。显然在分区间实现多流能够提高GPU效率,加速多区网格CFD应用。
图4是本发明多流实现多区结构网格CFD加速与单流实现加速时的计算与通信重叠进行对比的示意图。采用多流的多区计算能够重叠GPU计算和通信,大幅隐藏CPU和GPU间PCI-E数据传输开销。如附图4(a)所示,单流GPU并行时,分区i从CPU拷贝到GPU后再执行计算,计算结束后再从GPU拷回CPU,接着GPU才能处理分区(i+1)的拷贝和计算。当前很多GPU具有独立的拷入引擎、计算引擎和拷出引擎硬件,单流实现意味着任意时刻三者只有其一处于忙碌状态,另外两者则处于空闲状态,GPU的整体性能不高。在多GPU流处理多个分区的时候,如附图4(b)所示,第i个流在执行第i个分区的计算时,第i+1个流将第i+1个分区拷入GPU;类似地,第i+1个流在执行第i+1个分区的计算时,第i个流将第i个分区拷出GPU。可以看出,多流机制能够重叠多个分区的拷入、计算和拷出,大幅隐藏CPU和GPU间PCI-E数据传输开销。
图5是本发明缓解GPU全局显存限制的示意图。图中给出的是与表1对应的M=30N时的存储需求变化,可以看出在M'=M/2,分组数为6,每组内流数为2时,占用的GPU存储减少最多,约减少了42%,这意味着GPU可以计算更大网格规模的CFD。
Claims (1)
1.一种基于分组多流的GPU上多区结构网格CFD加速方法,其特征在于包括以下步骤:
第一步,构建CPU和GPU软硬件平台,在CPU和GPU平台上部署多区结构网格CFD应用软件,方法是:CPU作为主处理器,GPU作为加速器,CPU和GPU间通过PCI-E总线连接,CPU上安装有操作系统、编译器以及GPU驱动、GPU开发环境,要求GPU硬件体系结构实现及其编程开发环境支持流处理机制,在CPU上安装多区结构网格CFD应用软件,包括CFD求解流程涉及的初始化软件、边界处理软件、时间步推进软件、流场解输出软件;在CPU上安装GPU存储管理软件和分组多流管理软件,所述CFD是Computational Fluid Dynamics的缩写,即计算流体动力学;
第二步,初始化分组多流参数,设置CFD流场变量的GPU存储使用方式,设置CFD的时间迭代步数和收敛条件;记GPU上网格分区数为block_num,流的分组数量num_stream_grp,每组流的数量num_stream,时间迭代步数为Max_Step,block_num、num_stream_grp、num_stream、Max_Step均为正整数;流场变量在GPU上的存储使用方式包括三类:第一类是针对全局流场变量的,在GPU上的存储使用方式为预先分配GPU存储,计算过程中无需重新分配、释放;第二类仍然是针对全局流场变量的,但在GPU上的存储使用方式为临时分配GPU存储,计算过程中需要重新分配、释放,需要在CPU和GPU间拷入拷出;第三类是针对各CFD计算过程涉及的局部流场变量的,在GPU上的存储使用方式为临时分配、使用、释放GPU存储空间;设置方法如下:
2.1启动分组多流管理软件根据网格分区数初始化配置GPU流的分组,将num_stream_grp初始化为1,num_stream初始化为block_num;
2.2启动GPU存储管理软件将所有全局流场变量的GPU存储使用方式设置为第一类,局部流场变量的GPU存储使用方式设置为第三类;
2.3启动CFD时间步推进软件,设置CFD的时间迭代步数和收敛条件;
第三步,执行GPU存储管理软件,根据第二步的设置为第一类变量预先分配GPU存储空间,并根据GPU存储空间使用情况调整流场变量的GPU存储使用方式,具体流程如下:
3.1执行GPU存储管理软件,根据2.2设定的流场变量存储使用方式为第一类全局变量预先分配GPU存储空间,如果GPU存储空间不足则转3.2,否则转3.3;
3.2调整GPU存储使用方式和分组多流配置参数,方法是:
3.2.1执行分组多流管理软件,流的分组数量重新设置为num_stream_grp=num_stream_grp+1,相应地每组内GPU流的数量为其中指的是大于X的最小的整数;
3.2.2如果num_stream≥2,在CPU上执行GPU存储管理软件,根据流场变量存储使用方式分配GPU存储空间,如果GPU存储空间不足则转3.2.1,否则转3.3;如果num_stream<2,则转3.2.3;
3.2.3将部分全局流场变量的GPU存储使用方式由第一类改为第二类,即在分组多流中对这部分变量采用临时分配GPU存储,具体过程如下:
3.2.3.1判定是否存在以第一类方式使用GPU存储的全局流场变量,若有则选取一个该类型全局流场变量,将该全局流场变量的GPU存储使用方式改为第二类,转3.2.3.2;如果不存在,则无法再进行调整,提示“GPU存储空间不足”的错误信息,转第六步;
3.2.3.2将GPU流的分组数量num_stream_grp初始化为1,每组流的数量num_stream初始化为block_num,转3.1;
3.3对于以第一类方式使用GPU存储的全局流场变量,将CPU上变量值拷贝到GPU上,执行第四步;
第四步,执行CFD时间步推进软件、GPU存储管理软件、分组多流管理软件,创建GPU上的多流,由GPU进行多区结构网格CFD应用的多流计算,具体步骤如下:
4.1执行CFD时间步推进软件,初始化时间步循环的计数器变量n_step=1;
4.2执行GPU存储管理软件,为采用第二类和第三类方式使用GPU存储空间的全局、局部流场变量临时分配空间;
4.3执行分组多流管理软件,通过一个两层嵌套循环构建分组多流,外层循环针对分组,内层循环针对每组的多流;在外层循环内动态创建num_stream个GPU流,在内层循环由GPU进行多区结构网格CFD应用的多流计算,具体流程如下:
4.3.1初始化外层循环的计数器变量stream_grp_id=1;
4.3.2根据当前的分组多流配置,动态创建num_stream个GPU流;
4.3.3初始化内层循环的计数器变量stream_id=1;
4.3.4计算映射到第stream_grp_id个组的第stream_id个流的网格分区的编号nc=(stream_grp_id-1)*num_stream+stream_id,如果nc>block_num,则转4.4,否则转4.3.5;
4.3.5利用第stream_id个GPU流启动与第nc个区块相关的操作,包括:启动从CPU拷入该区块到GPU的操作,启动GPU内核代码执行该区块在GPU上的计算,启动从GPU拷出该区块到CPU的操作;
4.3.6GPU根据第stream_id个GPU流包含的操作执行第nc个网格分区在GPU上的计算以及在CPU与GPU间的拷入、拷出操作;
4.3.7计数器变量stream_id的值增加1,若stream_id<=num_stream,则转4.3.4,否则转4.3.8;
4.3.8对第stream_grp_id个组内的多GPU流的执行进行同步;
4.3.9销毁第stream_grp_id个组内的多GPU流;
4.3.10计数器变量stream_grp_id的值增加1,如果stream_grp_id<=num_stream_grp,则转4.3.2,否则转4.4;
4.4执行GPU存储管理软件,释放4.2临时分配、使用的GPU空间;
4.5执行CFD时间步推进软件,计数器变量n_step的值增加1,如果n_step<=Max_Step且不满足收敛条件,则转4.2;如果n_step>Max_Step或满足收敛条件,转第五步;
第五步,执行GPU存储管理软件,将GPU计算结果拷回CPU,释放所有GPU存储空间,结束多区结构网格CFD的分组多流GPU加速;
第六步,结束多区结构网格CFD软件的运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310189688.8A CN103226540B (zh) | 2013-05-21 | 2013-05-21 | 基于分组多流的gpu上多区结构网格cfd加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310189688.8A CN103226540B (zh) | 2013-05-21 | 2013-05-21 | 基于分组多流的gpu上多区结构网格cfd加速方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103226540A CN103226540A (zh) | 2013-07-31 |
CN103226540B true CN103226540B (zh) | 2015-08-19 |
Family
ID=48836994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310189688.8A Active CN103226540B (zh) | 2013-05-21 | 2013-05-21 | 基于分组多流的gpu上多区结构网格cfd加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103226540B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104573296B (zh) * | 2013-10-22 | 2017-09-22 | 北京临近空间飞行器系统工程研究所 | 一种面向相似网格的高超声速流场初始化方法 |
US9727942B2 (en) | 2013-10-29 | 2017-08-08 | International Business Machines Corporation | Selective utilization of graphics processing unit (GPU) based acceleration in database management |
CN104267939B (zh) * | 2014-09-17 | 2017-08-29 | 华为技术有限公司 | 一种业务处理的方法、装置及系统 |
CN104462829B (zh) * | 2014-12-11 | 2019-01-18 | 中国航天空气动力技术研究院 | 空间推进求解中的复杂多区网格的处理方法 |
CN106156786B (zh) * | 2015-04-19 | 2019-12-27 | 北京典赞科技有限公司 | 基于多gpu的随机森林训练方法 |
CN107292385A (zh) * | 2016-03-31 | 2017-10-24 | 阿里巴巴集团控股有限公司 | 一种类Alexnet网络的模型训练方法和装置 |
CN106529063A (zh) * | 2016-11-14 | 2017-03-22 | 宜兴八达流体技术有限公司 | 基于cfd技术的流体系统及其设计方法 |
CN107122243B (zh) * | 2017-04-12 | 2018-07-24 | 浙江远算云计算有限公司 | 用于cfd仿真计算的异构集群系统及计算cfd任务的方法 |
CN107832552B (zh) * | 2017-11-27 | 2020-11-06 | 西北工业大学 | 一种水下航行器回收非定常流场分块结构网格划分方法 |
CN109088776B (zh) * | 2018-09-12 | 2020-07-28 | 西安交通大学 | 一种基于超级计算机的并行cfd计算与通信重叠优化方法 |
CN109743453B (zh) * | 2018-12-29 | 2021-01-05 | 出门问问信息科技有限公司 | 一种分屏显示方法及装置 |
CN110516316B (zh) * | 2019-08-03 | 2022-03-15 | 电子科技大学 | 一种间断伽辽金法求解欧拉方程的gpu加速方法 |
CN112346869B (zh) * | 2020-11-10 | 2021-07-13 | 上海交通大学 | 自适应的面向大图的统一内存管理方法及系统 |
CN116228993B (zh) * | 2023-05-08 | 2023-08-25 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种网格边构建方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9237034B2 (en) * | 2008-10-21 | 2016-01-12 | Iii Holdings 1, Llc | Methods and systems for providing network access redundancy |
US8510422B2 (en) * | 2009-09-30 | 2013-08-13 | Dell Products L.P. | Systems and methods for extension of server management functions |
CN102323917B (zh) * | 2011-09-06 | 2013-05-15 | 中国人民解放军国防科学技术大学 | 一种基于共享内存实现多进程共享gpu的方法 |
-
2013
- 2013-05-21 CN CN201310189688.8A patent/CN103226540B/zh active Active
Non-Patent Citations (3)
Title |
---|
一个结构网格并行CFD程序的单机性能优化;车永刚等;《计算机科学》;20130331;第40卷(第3期);第116-120页 * |
基于GPU的非结构网格CFD求解器的设计与优化;宋慎义等;《科研信息化技术与应用》;20120120;第30-38页 * |
大规模并行计算机系统并行性能模拟技术研究;徐传福等;《计算机科学》;20090930;第36卷(第9期);第7-10页、第35页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103226540A (zh) | 2013-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103226540B (zh) | 基于分组多流的gpu上多区结构网格cfd加速方法 | |
Xu et al. | Collaborating CPU and GPU for large-scale high-order CFD simulations with complex grids on the TianHe-1A supercomputer | |
CN105487838B (zh) | 一种动态可重构处理器的任务级并行调度方法与系统 | |
CN106383695B (zh) | 基于fpga的聚类算法的加速系统及其设计方法 | |
Xiong et al. | Efficient parallel implementation of the lattice Boltzmann method on large clusters of graphic processing units | |
Wang et al. | SODA: Software defined FPGA based accelerators for big data | |
CN103279391A (zh) | 一种基于cpu与mic架构处理器协同计算的负载均衡优化方法 | |
CN103279445A (zh) | 运算任务的计算方法及超算系统 | |
CN103425533A (zh) | 用于管理嵌套执行流的方法和系统 | |
Caragea et al. | General-purpose vs. GPU: Comparison of many-cores on irregular workloads | |
CN111858066A (zh) | 气体动理论统一算法中的cpu+gpu异构并行优化方法 | |
Xue et al. | An improved framework of GPU computing for CFD applications on structured grids using OpenACC | |
Liu et al. | A GPU accelerated red-black SOR algorithm for computational fluid dynamics problems | |
Wang et al. | Efficient parallel implementation of large scale 3D structured grid CFD applications on the Tianhe-1A supercomputer | |
Huo et al. | Porting irregular reductions on heterogeneous CPU-GPU configurations | |
He et al. | A multiple-GPU based parallel independent coefficient reanalysis method and applications for vehicle design | |
Wang et al. | Accelerating ap3m-based computational astrophysics simulations with reconfigurable clusters | |
Zhang et al. | Gpu-based implementation of finite element method for elasticity using cuda | |
Zhu et al. | GPU acceleration of an iterative scheme for gas-kinetic model equations with memory reduction techniques | |
Wan et al. | Efficient inter-device task scheduling schemes for multi-device co-processing of data-parallel kernels on heterogeneous systems | |
Agullo et al. | Dynamically scheduled Cholesky factorization on multicore architectures with GPU accelerators. | |
Komatsu et al. | Parallel processing of the Building-Cube Method on a GPU platform | |
Lou et al. | Openacc-based gpu acceleration of ap-multigrid discontinuous galerkin method for compressible flows on 3d unstructured grids | |
Chandrashekhar et al. | Performance study of OpenMP and hybrid programming models on CPU–GPU cluster | |
Davis et al. | Paradigmatic shifts for exascale supercomputing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |