发明名称 基于分组多流的GPU上多区结构网格CFD加速方法
摘要 本发明公开了一种基于分组多流的GPU上多区结构网格CFD加速方法,目的是加速GPU上运行的多区结构网格CFD应用。技术方案是构建CPU和GPU软硬件平台,部署多区结构网格CFD应用软件;执行分组多流管理软件、时间步推进软件,设置分组多流参数、CFD时间迭代步数和收敛条件,执行GPU存储管理软件初始化GPU存储空间使用方式、预先分配GPU存储空间并根据需要进行调整;在时间步迭代内执行分组多流管理软件,由GPU完成多区结构网格CFD应用的多流计算。本发明可有效加速GPU上运行的多区结构网格CFD应用,重叠GPU上多个网格分区的计算以及CPU与GUP间通信,以隐藏CPU和GPU间数据传输开销,缓解GPU全局显存容量较小的限制,且本发明简单易实现,通用性强。
申请公布号 CN103226540B 申请公布日期 2015.08.19
申请号 CN201310189688.8 申请日期 2013.05.21
申请人 中国人民解放军国防科学技术大学 发明人 邓小刚;徐传福;张理论;车永刚;王勇献;姜屹;刘化勇;刘巍
分类号 G06F15/173(2006.01)I 主分类号 G06F15/173(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种基于分组多流的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流的数量为<img file="FDA0000698935070000021.GIF" wi="1028" he="78" />其中<img file="FDA0000698935070000022.GIF" wi="92" he="51" />指的是大于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&gt;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&lt;=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&lt;=num_stream_grp,则转4.3.2,否则转4.4;4.4执行GPU存储管理软件,释放4.2临时分配、使用的GPU空间;4.5执行CFD时间步推进软件,计数器变量n_step的值增加1,如果n_step&lt;=Max_Step且不满足收敛条件,则转4.2;如果n_step&gt;Max_Step或满足收敛条件,转第五步;第五步,执行GPU存储管理软件,将GPU计算结果拷回CPU,释放所有GPU存储空间,结束多区结构网格CFD的分组多流GPU加速;第六步,结束多区结构网格CFD软件的运行。
地址 410073 湖南省长沙市开福区德雅路109号