[发明专利]一种基于图形处理单元的影响最大化并行加速方法有效
申请号: | 201210248732.3 | 申请日: | 2012-07-18 |
公开(公告)号: | CN102819664B | 公开(公告)日: | 2015-02-18 |
发明(设计)人: | 李姗姗;廖湘科;刘晓东;吴庆波;戴华东;彭绍亮;王蕾;付松龄;鲁晓佩;郑思 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06T1/20 | 分类号: | G06T1/20 |
代理公司: | 国防科技大学专利服务中心 43202 | 代理人: | 郭敏 |
地址: | 410073 湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于图形处理单元的影响最大化并行加速方法,目的是提出一种新型基于GPU的影响最大化并行方法,利用GPU的并行计算能力加速算法执行、减少执行时间。其特征在于在每次蒙特卡洛模拟中,首先找到网络图中的强连通分量,将同一强连通分量中的所有节点合并为一个节点,其权重为该强连通分量中各节点权重之和;然后采用自底向上遍历的策略,并行计算各节点的影响值;利用GPU的并行计算能力,由各个GPU计算核心采用各自的线程对不同的节点并行计算影响值,得到K个最有影响的节点。本发明将图转化为有向无环图,可以显著减少影响值的计算量,同时通过最大程度地调度各节点在GPU的计算核心中并行计算,降低了整体运行时间。 | ||
搜索关键词: | 一种 基于 图形 处理 单元 影响 最大化 并行 加速 方法 | ||
【主权项】:
一种基于图形处理单元的影响最大化并行加速方法,包括以下步骤:第一步:初始化影响最大化节点集合S为空;第二步:设定当前蒙特卡洛模拟次数Num=0;第三步:采用蒙特卡洛模拟方法对图进行选边,得到图G′;其特征在于还包括以下步骤:第四步:采用Tarjan算法,基于深度优先搜索寻找图G′中所有的强连通分量SCCi,i取值从0到j‑1,j为图G′中的强连通分量的个数;第五步:根据图G′的各强连通分量SCCi,将图G′转变为有向无环图G*,方法是:5.1:初始化i=0;5.2:将强连通分量SCCi用新节点vn+i代替,其中n是图G′中的节点个数;5.3:i=i+1,如果i<j,转5.2;如果i≥j,执行第六步;第六步:从出度为0的节点开始,自底向上遍历有向无环图G*中所有节点,利用GPU不同线程计算所有节点的影响值,线程号为p的线程负责计算节点vp的影响值,其中0≤p≤n‑1,具体方法是:6.1:定义和初始化变量,方法是:6.1.1:使用布尔数组Visited[]记录各个节点是否已经被访问过,Visited[vp]等于true表示节点vp已经被访问,Visited[vp]等于false表示节点vp未被访问,将数组Visited[]全部初始化为false,表示所有节点均未被访问;6.1.2:使用整数数组Count[]记录各个节点已经被访问的子节点个数,其中0≤Count[vx]≤outdegree[vx],0≤x≤n‑1,outdegree[vx]是节点vx的出度;将数组Count[]全部初始化为0,表示均未被访问;6.1.3:使用整数数组Inf[]记录各个节点的影响值,其中0≤Inf[vx]≤n,0≤x≤n‑1,将数组Inf[]全部初始化为0;6.1.4:使用字符串数组Label[]记录各个节点的标签,标签Label[vx]标记了节点vx可能同其他节点发生重叠的位置,其中节点va及节点vb重叠于节点vc当且仅当从节点va和vb均存在至少一条路径可达节点vc,0≤a,b,c≤n‑1,将数组Label[]全部初始化为NULL;6.1.5:使用布尔变量Stop记录线程计算是否完成,Stop等于true表示该次模拟中所有节点影响值计算已经完成,Stop等于false表示未完成,Stop为全局变量,所有GPU线程均可以修改其内容,初始化Stop为false;6.2:如果停止标志Stop为false,转6.3;如果Stop为true,转第七步;6.3:GPU采用单指令流多数据流的执行方式,以多线程并行的方式计算节点的影响值;多线程并行的方式是指:GPU为每个节点分配一个线程计算影响值,GPU一次由y个线程并行计算y个节点的影响值,y为GPU中的流处理器数目,当GPU当前y个节点的影响值计算完成后,若还有节点影响值未计算,则GPU经过GPU线程调度以多线程并行的方式计算剩余节点的影响值,直至所有节点的影响值计算完毕,GPU的一个线程计算节点vp影响值的方法是:6.3.1:将停止标志Stop置为true;6.3.2:如果Visited[vp]等于false,执行6.3.3;否则说明节点vp已经被访问过,转6.2;6.3.3:如果Count[vp]等于节点vp的出度,则说明节点vp的所有子节点均已被访问,执行6.3.4计算节点vp的影响值;否则说明节点vp的子节点中仍有未处理的节点,则将停止标志Stop置为false,转6.2;6.3.4:计算节点vp的所有子节点影响值的总和Sum,其中out[vp]是节点vp所有子节点的集合;6.3.5:计算节点vp的标签Label(vp),节点vp的标签label(vp)等于节点vp的所有子节点对vp贡献的并集,即其中Con(vq)是子节点vq对节点vp的贡献,子节点vq对节点vp的贡献是指:如果子节点vq的入度大于1,则vq对节点vp的贡献为节点vq自身,即Con(vq)=vq;如果子节点vq的入度小于等于1,vq的贡献为节点vq的标签,即Con(vq)=Label(vq);6.3.6:计算节点vp所有子节点的集合out[vp]重叠的影响值Overlap(out[vp]),方法是:6.3.6.1:初始化Overlap(out[vp])为0,初始化重叠范围集合Range为out[vp];6.3.6.2:对于任意节点va∈Range,如果存在节点vb∈Range且vb≠va,并且从节点va存在路径可达节点vb,此时重叠发生在节点vb,故Overlap(out[vp])=Overlap(out[vp])+Inf[vb],同时将vb从Range中删除,即Range=Range‑vb;6.3.6.3:使用字符串数组Extra[]记录Range中的重叠项,将Extra[]初始化为空集使用字符串数组Filter[]记录Range中除去重叠项剩余的单一项,将Filter[]初始化为空集对于任意节点va∈range,对于任意元素u∈Label(va),如果元素u已经属于Filter,则元素u为重叠项,将u加入Extra中并将其影响值Inf[u]加入到Overlap(out[vp]),即Extra=Extra∪u,Overlap(out[vp])=Overlap(out[vp])+Inf[u];如果u不属于Filter,则将u加入到Filter数组中,即Filter=Filter∪u;6.3.6.4:由于Extra[]和Filter[]数组中的元素仍然可能存在重复,故最终节点vp所有子节点的重叠影响值Overlap(out[vp])需要加上两者重叠值之差,即Overlap(out|vp])=Overlap(out[vp])+(Overlap(Filter)‑Overlap(Extra));6.3.7:计算节点vp的影响值Inf[vp],Inf[vp]=sum+weight(vp)‑overlap(out[vp]),其中weight(vp)是节点vp的权重;TotalInf[vp]=TotalInf[vp]+Inf[vp],其中TotalInf[vp[是R次蒙特卡洛模拟节点vp的总影响值;R是总模拟次数,R为正整数;6.3.8:如果节点vp无父节点,则转6.3.9;否则,对于节点vp的任意父节点vs,将其已访问子节点个数Count[vs]加1,即Count[vs]=Count[vs]+1,并将停止标志Stop置为false;6.3.9:将节点vp标记为已经被访问,即Visited[vp]=true,转6.2;第七步:将蒙特卡洛模拟次数Num加1,判断Num是否小于R,如果Num<R,转第三步,否则执行第八步;第八步:对集合V‑S中所有节点,选择TotalOnf[]最大的节点v加入到集合S中;第九步:如果集合S的节点个数|S|<K,K为初始活跃节点集合中的节点个数,转第二步,否则说明已经选定K个最有影响的节点,结束。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201210248732.3/,转载请声明来源钻瓜专利网。