[发明专利]一种基于GPU的消除云方程并行求解过程中数据相关的方法有效
申请号: | 201110382028.2 | 申请日: | 2011-11-25 |
公开(公告)号: | CN102508820A | 公开(公告)日: | 2012-06-20 |
发明(设计)人: | 廖湘科;杨灿群;石志才;王锋;易会战;黄春;赵克佳;陈娟;吴强 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F17/11 | 分类号: | G06F17/11 |
代理公司: | 国防科技大学专利服务中心 43202 | 代理人: | 郭敏 |
地址: | 410073 湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于GPU的消除云方程并行求解过程中数据相关的方法,目的是提升数据的可重用性和访问效率。技术方案是利用SIMT的并行机制消除warp内线程之间的数据相关,将warp中32个线程所处理的网格构成一个warp块,并确定warp块的组织方式,根据共享内存的容量限制确定block和grid三维的维度,以warp块为基本单位把整个模拟区域以离散化,将全局任务划分成8个小组,在每个小组内避免warp块之间的数据相关,共启动8次kernel调用,每次完成整个模拟区域中1/8网格的电流密度的更新。采用本发明可确保在同一时刻不存在多个线程对同一网格的电流密度进行更新,消除了相邻网格之间的数据相关,实现了数据的可重用性和高效访问,提高了CUDA程序的运行速度。 | ||
搜索关键词: | 一种 基于 gpu 消除 方程 并行 求解 过程 数据 相关 方法 | ||
【主权项】:
一种基于GPU的消除云方程并行求解过程中数据相关的方法,其特征在于包括以下步骤:第一步、确定warp块三维维度的三维组[wx,wy,wz],即一个warp块在模拟区域中所选取的32个相邻网格的相互组织形式,其中wx、,wy、wz分别表示在三维模拟区域内的X、Y、Z三维上的所包含的网格数,其中wx×wy×wz=32;每个warp块所需数据为warp块影子区域中所有网格的电流密度值,其中影子区域包括warp块中所有网格以及包围在这一warp块外层的所有网格,总数为NC,NC=(wx+2)×(wy+2)×(wz+2);在满足上述两个等式并取得NC的最小值的条件下,求解得到wx×wy×wz=4×4×2的组织形式使得NC取得最小值6×6×4=144;此时一个warp块的处理申请大小为sm=144×8B的共享内存,其中144为一个warp块所涉及网格数的最小值,8B为一个double类型数据的大小;所述warp块是指一个warp所处理的32个网格组成一个小块;warp是指每32个连续的线程组成的线程束;第二步、根据warp块的维度设计,以warp块为基本单位将模拟区域离散化,方法是:将整个模拟区域中以warp块为基本单位,在三维上都以2为跨度分成共2×2×2=8组离散的子模拟区域,使得在同一子模拟区域内,任意两个warp块之间在任意维上都相距一个或多个warp块;第三步、根据第一步所确定的单个warp块对共享内存的需求量sm,以及CUDA对每个block在共享内存容量的限制来确定block维度[bx,by,bz],即确定block中在三维上分别能够触发多少个线程来并发处理相应的网格数,其中单个block中的总线程数Tb等于bx×by×bz,方法是:bx取32,即组成一个warp,处理对应的一个warp块;by则在共享内存容量限制的条件下选取每个block所能处理的warp块的数目的最大值maxw,若maxw大于1,则选取在模拟区域的Z维上进行扩展,即将模拟区域Z维上同一子模拟区域内的连续maxw个warp块组织到一个block中进行并行处理,否则不做扩展;bz选取默认值1;所述block为CUDA中的线程块,是由若干个线程组成的三维结构;第四步、根据第二步所划分的子模拟区域的规模以及第三步中确定的block中的总线程数Tb确定线程网格grid维度的设计[gx,gy,gz],即确定每次kernel调用中单个grid在三维上需要分别创建多少个block进行处理,其中单个grid中的block总数Bg等于gx×gy×gz,方法是:gy和gz都选取默认值1,采取一个线程处理一个网格的原则,将子模拟区域中的所有网格平均分配给所触发的线程,设当前子模拟区域内的总网格数为ncell,则每次kernel需调用的线程数Tk等于ncell,每个grid所需触发block的数目Bg为Tk/Tb,即gx等于Tk/Tb;所述grid为CUDA中的线程网格,是由若干个线程块block组成的三维结构;第五步、记k为当前启动kernel调用的序号,并初始化为0,启动第k次kernel调用,kernel调用时采用第三步和第四步中所确定的grid和block维度的设计,完成整个模拟区域中1/8网格的电流密度的更新;第六步、对于k号kernel调用的并行处理过程中的每个block,根据单个block中所需处理的warp块数即block第二维的维度by,以及单个warp块对共享内存的需求量sm,为每个block申请容量为by×sm的共享内存,将这些所申请的共享内存申明为敏感变量即volatile类型;第七步、对于k号kernel调用的并行处理过程中的每个block,将block中的by个warp块中以及这些warp块对应的影子区域中所有网格的电流密度值通过block中的所有 线程并行地从全局内存中拷贝到共享内存;第八步、每个线程依次完成各自网格中所有粒子在当前时间步内运动而对这个网格的影子区域所产生的电流密度贡献值的计算,并完成对影子区域中网格原电流密度值累加;整个kernel调用中每个线程的执行过程相同,单个线程更新电流密度值的过程如下:8.1获取网格中的所有粒子的数目和索引,记网格中粒子总数为np,记当前处理粒子的索引号为p,并初始化为0,0≤p≤np,索引号为p的粒子简称为p号粒子;8.2选取p号粒子进行处理,若粒子数np为零,则执行步骤8.6,否则执行8.3;8.3对于p号粒子,根据该粒子的当前运动状态以及粒子属性,根据通用的计算电流密度的方法,计算该粒子对所属网格影子区域内各个网格的电流密度贡献值;8.4依次从共享内存中读取p号粒子所属网格的影子区域内各个网格的当前电流密度值,将p号粒子产生的电流密度贡献值累加到相应网格的电流密度值,更新共享内存中相应网格中的电流密度数据;8.5p=p+1,若p小于等于np,则返回步骤8.3,否则执行步骤8.6;8.6block内所有线程同步,确定所有线程已将各自网格中所有粒子处理完成;第九步、将更新后的电流密度值从共享内存重新写回到全局内存;第十步、k=k+1,若k等于8,则执行第十一步,否则转第五步继续下一次内核调用;第十一步、结束。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201110382028.2/,转载请声明来源钻瓜专利网。