專利名稱:一種基于圖形處理單元的影響最大化并行加速方法
技術(shù)領(lǐng)域:
本發(fā)明涉及海量數(shù)據(jù)挖掘領(lǐng)域中社會(huì)網(wǎng)絡(luò)影響最大化問題的解決方法,尤其指針對(duì)大規(guī)模社會(huì)網(wǎng)絡(luò)的海量用戶挖掘,提出的一種基于圖形處理單元GPU的并行加速方法。
背景技術(shù):
Web2. O技術(shù)的快速發(fā)展推動(dòng)了社會(huì)媒體的蓬勃發(fā)展。各類社交網(wǎng)站不斷涌現(xiàn),例如國(guó)外的Facebook、Twitter以及國(guó)內(nèi)的人人網(wǎng)、新浪微博等網(wǎng)站用戶數(shù)量增長(zhǎng)十分迅速,當(dāng)前Facebook的活躍用戶已經(jīng)超過了 8. 5億。社交網(wǎng)站不僅是人們溝通和交流的橋梁,同時(shí)還成了信息傳播和擴(kuò)散的重要媒介。研究表明,68%的顧客會(huì)在購(gòu)買產(chǎn)品之前詢問其家人、朋友的意見。病毒式營(yíng)銷(Viral Marketing)正是利用了用戶之間口碑傳播的原理,進(jìn) 行品牌推廣等網(wǎng)絡(luò)傳銷方法。而且隨著社會(huì)網(wǎng)絡(luò)用戶的持續(xù)快速增長(zhǎng),病毒式營(yíng)銷已經(jīng)成為ー種十分高效的信息傳播方式。影響最大化問題是社會(huì)網(wǎng)絡(luò)分析中關(guān)于影響傳播的經(jīng)典問題。設(shè)想如下場(chǎng)景一家公司要進(jìn)行新產(chǎn)品推廣,其推廣策略是選擇K名顧客免費(fèi)試用新產(chǎn)品,之后利用這K名顧客對(duì)產(chǎn)品的宣傳推廣和影響傳播吸引更多的顧客購(gòu)買新產(chǎn)品,從而達(dá)到利益最優(yōu)的目的。影響最大化問題可以形式化描述為對(duì)于社會(huì)網(wǎng)絡(luò)圖G = (V,E,W),其中V = {v0,V1, , vn_J是節(jié)點(diǎn)集合,V中節(jié)點(diǎn)個(gè)數(shù)為η ;Ε是節(jié)點(diǎn)集合V中節(jié)點(diǎn)之間的有向邊集合,即E czV xV,^中有向邊的條數(shù)為m ;評(píng)是G中節(jié)點(diǎn)權(quán)重的集合,表征了各節(jié)點(diǎn)的影響カ(初始值設(shè)定為1,即僅能影響節(jié)點(diǎn)自身)。給定網(wǎng)絡(luò)圖G和初始活躍節(jié)點(diǎn)集合中的節(jié)點(diǎn)個(gè)數(shù)K,影響最大化問題是從節(jié)點(diǎn)集合V中選擇最佳的K個(gè)節(jié)點(diǎn)作為初始活躍節(jié)點(diǎn)集合S,通過影響傳遞,使得影響擴(kuò)散的最終范圍最大。影響最大化問題的核心在于如何定位網(wǎng)絡(luò)中最有影響カ的K名成員,即網(wǎng)絡(luò)中的意見領(lǐng)袖,從而通過病毒式營(yíng)銷使得最終被影響的用戶數(shù)目最大。影響最大化問題的研究不僅對(duì)市場(chǎng)營(yíng)銷有著十分重要的現(xiàn)實(shí)意義,同時(shí)還對(duì)輿情預(yù)警、疫情發(fā)現(xiàn)等方面有著十分重要的應(yīng)用。自從Pedro Domingos和Matt Richardson于 2001 年 ACM SIGKDD 會(huì)議公布的文章 Mining the network value ofcustomers 中提出影響最大化問題后,該問題受到了越來越多研究者的關(guān)注。David Kempe等人在2003年ACMSIGKDD 會(huì)議公布的文章 Maximizing tte Spread of Influence through a SocialNetwork中證明了影響最大化問題隸屬于NP-Hard問題,并且提出了ー種爬山貪心算法來獲得近似最優(yōu)解。雖然爬山貪心算法可以達(dá)到1-1 / e的最優(yōu)逼近(e是自然対數(shù)底),但是由于David Kempe采用多次的蒙特卡洛模擬(例如20000次)來計(jì)算各個(gè)節(jié)點(diǎn)的影響值,因此需要消耗大量時(shí)間,而且無(wú)法擴(kuò)展應(yīng)用到大規(guī)模的網(wǎng)絡(luò)中。很多研究人員都致力于設(shè)計(jì)新的方法來解決影響最大化的效率問題。爬山貪心算法中的核心問題在于需要多次蒙特卡洛模擬以計(jì)算所有節(jié)點(diǎn)的影響值。為了解決該問題,Jure Leskovec 等人在 ACM SIGKDD2007 中公布的文章 Cost-effective OutbreakDetection in Networks中根據(jù)影響擴(kuò)散函數(shù)的半模特性設(shè)計(jì)了新的優(yōu)化方法CELF,可以很大程度地降低蒙特卡洛模擬的計(jì)算量,從而減少了計(jì)算時(shí)間。之后,Wei Chen等人在ACMSIGKDD2009 中公布文章 Efficient Influence Maximization in Social Networks,文章中提出了目前最優(yōu)的貪心算法MixGreedy。該算法的改進(jìn)在于在每次蒙特卡洛模擬時(shí)為網(wǎng)絡(luò)中所有節(jié)點(diǎn)計(jì)算影響值,因而進(jìn)ー步降低了算法的復(fù)雜度。同時(shí)MixGreedy整合了 CELF算法,大大降低了算法執(zhí)行時(shí)間。然而由于影響最大化計(jì)算復(fù)雜度很高,即使目前最優(yōu)的MixGreedy算法在處理大規(guī)模社會(huì)網(wǎng)絡(luò)時(shí)仍然十分耗時(shí);例如從37154個(gè)社會(huì)網(wǎng)絡(luò)節(jié)點(diǎn)中選擇50個(gè)最有影響用戶就需要2個(gè)小時(shí)以上。因此,如何從大規(guī)模社會(huì)網(wǎng)絡(luò)海量用戶中快速挖掘最有影響用戶成為了亟待解決的問題。另一方面,圖形處理單元(Graphics Processing Unit, GPU)的多核多線程高帶寬的體系結(jié)構(gòu)使得GPU具有超強(qiáng)的并行計(jì)算能力,被廣泛應(yīng)用于通用計(jì)算中。許多圖論算法,例如寬度優(yōu)先捜索、最小生成樹等,都可以利用GPU的并行能力加速執(zhí)行。如何充分利用GPU的并行計(jì)算能力,挖掘影響最大化問題的并發(fā)執(zhí)行潛力,設(shè)計(jì)出基于GPU體系結(jié)構(gòu)的影響最大化并行加速方法是解決大規(guī)模社會(huì)網(wǎng)絡(luò)中影響最大化問題的可行方案。
綜上所述,影響最大化問題的效率問題是社會(huì)網(wǎng)絡(luò)分析中廣泛關(guān)注的問題,目前的計(jì)算方法無(wú)法在合理的時(shí)間內(nèi)準(zhǔn)確定位出最有影響カ用戶,并且具有很差的可擴(kuò)展性,無(wú)法適用于大規(guī)模社會(huì)網(wǎng)絡(luò)。因此,研究高效并且具有良好擴(kuò)展性的影響最大化解決方法是本領(lǐng)域技術(shù)人員極為關(guān)注的技術(shù)問題?,F(xiàn)有的影響最大化問題研究中沒有公開文獻(xiàn)涉及利用GPU的并行計(jì)算能力來減少運(yùn)行時(shí)間的方法。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是針對(duì)社會(huì)網(wǎng)絡(luò)中的影響最大化問題,提出ー種新型基于GPU的影響最大化并行方法,充分挖掘貪心算法中的可并行部分并利用GPU的并行計(jì)算能力,以達(dá)到加速算法執(zhí)行、減少執(zhí)行時(shí)間的目的。為了解決上述技術(shù)問題,本發(fā)明技術(shù)方案是在毎次蒙特卡洛模擬中,首先找到網(wǎng)絡(luò)圖中的強(qiáng)連通分量,由于同一個(gè)強(qiáng)連通分量中各個(gè)節(jié)點(diǎn)的影響值相同,故將同一強(qiáng)連通分量中的所有節(jié)點(diǎn)合并為ー個(gè)節(jié)點(diǎn),其權(quán)重為該強(qiáng)連通分量中各節(jié)點(diǎn)權(quán)重之和;然后采用自底向上遍歷的策略,并行計(jì)算各節(jié)點(diǎn)的影響值。利用GPU的并行計(jì)算能力,由各個(gè)GPU計(jì)算核心采用各自的線程對(duì)不同的節(jié)點(diǎn)并行計(jì)算影響值。通過最大程度地調(diào)度各節(jié)點(diǎn)在GPU的計(jì)算核心中并行計(jì)算,降低整體運(yùn)行時(shí)間。具體的技術(shù)方案是第一歩初始化影響最大化節(jié)點(diǎn)集合S為空。第二步設(shè)定當(dāng)前蒙特卡洛模擬次數(shù)Num = O。第三步米用Wei Chen 等人在ACM SIGKDD2009 公布的文章Efficient InfluenceMaximization in Social Networks中的蒙特卡洛模擬方法對(duì)圖進(jìn)行選邊,得到圖G'。弟四步尋■找圖G'中的強(qiáng)連通分量。在有向圖中,如果兩個(gè)節(jié)點(diǎn)Ve和Vf間既存在一條從Ve到Vf的有向路徑,同時(shí)又存在一條Ivf到Ve的有向路徑,則稱Ve和Vf強(qiáng)連通。如果有向圖中每?jī)蓚€(gè)節(jié)點(diǎn)都強(qiáng)連通,則該圖是ー個(gè)強(qiáng)連通圖。采用Robert Tarian等于1972年 SIAM Journal on Computing 雜志公布的又-早 Depth-first search and linear graphalgorithm中提出的Tar jan算法,基于深度優(yōu)先搜索尋■找圖G'中所有的強(qiáng)連通分量SCCi,i取值從O到j(luò)-1,j為圖G'中的強(qiáng)連通分量的個(gè)數(shù)。
第五歩根據(jù)圖G'的各強(qiáng)連通分量SCCi,將圖G'轉(zhuǎn)變?yōu)橛邢驘o(wú)環(huán)圖G%方法是5. I:初始化 i = O。5. 2 :將強(qiáng)連通分量SCCi用新節(jié)點(diǎn)vn+i代替,其中η是圖G'中的節(jié)點(diǎn)個(gè)數(shù)。具體方法是5. 2. I :對(duì)于強(qiáng)連通分量SCCi,新增節(jié)點(diǎn)vn+i。節(jié)點(diǎn)vn+i的入邊集合置為SCCi中所有節(jié)點(diǎn)入邊集合的并集,出邊集合為SCCi中所有節(jié)點(diǎn)出邊集合的并集,權(quán)重為該強(qiáng)連通分量中各節(jié)點(diǎn)權(quán)重之和。5. 2. 2 :將強(qiáng)連通分量SCCi中所有節(jié)點(diǎn)的入邊集合和出邊集合置空,權(quán)重置零。方法是 5. 2. 2. I :初始化整數(shù)變量I為O。5. 2. 2. 2 :對(duì)于強(qiáng)連通分量SCCi中節(jié)點(diǎn)V1,將節(jié)點(diǎn)V1的入邊集合和出邊集合置為空集0,權(quán)重置為O。5. 2. 2. 3 :1 = 1+1。如果Kni,其中Iii是強(qiáng)連通分量SCCi的節(jié)點(diǎn)個(gè)數(shù),則轉(zhuǎn)5. 2. 2. 2。如果 I 彡 ni;轉(zhuǎn) 5. 3。5. 3 i = i+lo如果i〈j,轉(zhuǎn)5. 2。如果i彡j,則說明所有強(qiáng)連通分量均已被新節(jié)點(diǎn)代替,此時(shí)圖G轉(zhuǎn)變?yōu)榱擞邢驘o(wú)環(huán)圖G%執(zhí)行第六歩。第六步從出度為O的節(jié)點(diǎn)開始,自底向上遍歷有向無(wú)環(huán)圖(T中所有節(jié)點(diǎn),利用GPU計(jì)算所有節(jié)點(diǎn)的影響值。具體方法是6. I :變量的定義和初始化。方法是6. I. I :使用布爾數(shù)組Visited口記錄各個(gè)節(jié)點(diǎn)是否已經(jīng)被訪問過,Visited[vp]等于true表示節(jié)點(diǎn)Vp已經(jīng)被訪問,Visited[vp]等于fajse表示節(jié)點(diǎn)Vp未被訪問,其中O彡P(guān)彡η-I。將數(shù)組Visited[]全部初始化為false,表示所有節(jié)點(diǎn)均未被訪問;6. I. 2 :使用整數(shù)數(shù)組Count []記錄各個(gè)節(jié)點(diǎn)已經(jīng)被訪問的子節(jié)點(diǎn)個(gè)數(shù),其中
O^ Count [vj く outdegree [vj , O ^ x ^ n_l, outdegree [vj 是節(jié)點(diǎn) vx 的出度。將數(shù)組Count []全部初始化為O,表示均未被訪問;6. I. 3 :使用整數(shù)數(shù)組Inf ロ記錄各個(gè)節(jié)點(diǎn)的影響值,其中O彡Inf [vj彡η,
O彡X彡η-1。將數(shù)組Inf []全部初始化為O ;6. 1.4 :使用字符串?dāng)?shù)組Label 口記錄各個(gè)節(jié)點(diǎn)的標(biāo)簽,標(biāo)簽Label [vj標(biāo)記了節(jié)點(diǎn)Vx可能同其他節(jié)點(diǎn)發(fā)生重疊的位置,其中節(jié)點(diǎn)Va及節(jié)點(diǎn)Vb重疊于節(jié)點(diǎn)V。當(dāng)且僅當(dāng)從節(jié)點(diǎn)Va和Vb均存在至少一條路徑可達(dá)節(jié)點(diǎn)V。, O彡a, b, c彡n-lo將數(shù)組Label []全部初始化為NULL。6. I. 5 :使用布爾變量Stop記錄線程計(jì)算是否完成,Stop等于true表示該次模擬中所有節(jié)點(diǎn)影響值計(jì)算已經(jīng)完成,Stop等于false表示未完成。Stop為全局變量,所有GPU線程均可以修改其內(nèi)容。初始化Stop為false。6. 2 :如果停止標(biāo)志Stop為false,說明此次模擬影響值計(jì)算仍未完成,貝U轉(zhuǎn)6. 3使用GPU多線程并行計(jì)算;如果Stop為true,則說明此次模擬中所有節(jié)點(diǎn)的影響值均已計(jì)算完畢,轉(zhuǎn)第七歩。6. 3 =GPU采用單指令流多數(shù)據(jù)流的執(zhí)行方式,以多線程并行的方式計(jì)算節(jié)點(diǎn)的影響值;多線程并行的方式是指GPU為每個(gè)節(jié)點(diǎn)分配一個(gè)線程計(jì)算影響值,GPU 一次由y個(gè)線程并行計(jì)算I個(gè)節(jié)點(diǎn)的影響值,y為GPU中的流處理器數(shù)目(因GPU型號(hào)不同而流處理器個(gè)數(shù)不同),當(dāng)GPU當(dāng)前y個(gè)節(jié)點(diǎn)的影響值計(jì)算完成后,若還有節(jié)點(diǎn)影響值未計(jì)算,則GPU經(jīng)過GPU線程調(diào)度以多線程并行的方式計(jì)算剩余節(jié)點(diǎn)的影響值,直至所有節(jié)點(diǎn)的影響值計(jì)算完畢,GPU采用單指令流多數(shù)據(jù)流的執(zhí)行方式,同一個(gè)流處理器單元中的所有流處理器共用同一取指部件,指令按順序發(fā)射,沒有分支預(yù)測(cè),即不同線程執(zhí)行同一條指令,但處理不同數(shù)據(jù),從而達(dá)到并行計(jì)算。GPU的一個(gè)線程計(jì)算節(jié)點(diǎn)Vp影響值的方法是6. 3. I :將停止標(biāo)志Stop置為true。6. 3. 2 :如果Visited[vp]等于false,執(zhí)行6. 3. 3 ;否則說明節(jié)點(diǎn)Vp已經(jīng)被訪問過,轉(zhuǎn) 6. 2。6. 3. 3 :如果Count[vp]等于節(jié)點(diǎn)Vp的出度,則說明節(jié)點(diǎn)Vp的所有子節(jié)點(diǎn)均已被訪問,執(zhí)行6. 3. 4計(jì)算節(jié)點(diǎn)Vp的影響值;否則說明節(jié)點(diǎn)Vp的子節(jié)點(diǎn)中仍有未處理的節(jié)點(diǎn),則將停止標(biāo)志Stop置為false,轉(zhuǎn)6. 2。
6. 3. 4 :計(jì)算節(jié)點(diǎn)Vp的所有子節(jié)點(diǎn)影響值的總和sum, sum = Σν^0Μ[νρ] inf[Vq],
其中out[vp]是節(jié)點(diǎn)Vp所有子節(jié)點(diǎn)的集合。6. 3. 5 :計(jì)算節(jié)點(diǎn)Vp的標(biāo)簽Label (Vp)。節(jié)點(diǎn)Vp的標(biāo)簽label (Vp)等于節(jié)點(diǎn)Vp的所
有子節(jié)點(diǎn)對(duì)vp貢獻(xiàn)的并集,S卩LfAeZ(Vp) = Ut,卜μ| ConOd,其中Con (V,)是子節(jié)點(diǎn)'對(duì)
節(jié)點(diǎn)Vp的貢獻(xiàn)。子節(jié)點(diǎn)VtJ對(duì)節(jié)點(diǎn)Vp的貢獻(xiàn)是指如果子節(jié)點(diǎn)VtJ的入度大于1,則重疊可能發(fā)生于Vtl,此時(shí)Vtl對(duì)節(jié)點(diǎn)Vp的貢獻(xiàn)為節(jié)點(diǎn)Vtl自身,即Con(Vq) = Vq ;如果子節(jié)點(diǎn)VtJ的入度小于等于I,重疊不可能發(fā)生于Vtl,此時(shí)Vtl的貢獻(xiàn)為節(jié)點(diǎn)Vtl的標(biāo)簽,即Con(Vq) = Label (Vq)。6. 3. 6 :計(jì)算節(jié)點(diǎn)Vp所有子節(jié)點(diǎn)的集合out[vp]重疊的影響值Overlap (out [vp]),方法是6. 3. 6. I :初始化 Overlap (out [vp])為 O,初始化重疊范圍集合 Range 為 out[vp]。6. 3. 6. 2 :對(duì)于任意節(jié)點(diǎn)va e Range,如果存在節(jié)點(diǎn)vb e Range且Vb尹va,并且從節(jié)點(diǎn)va存在路徑可達(dá)節(jié)點(diǎn)vb,此時(shí)重疊發(fā)生在節(jié)點(diǎn)vb,故Overlap (out [vp])=Overlap (out [vp]+Inf [vb],同時(shí)將 vb 從 Range 中刪除,即 Range = Range-Vfao6· 3· 6· 3 :使用字符串?dāng)?shù)組Extra口記錄Range中的重疊項(xiàng),將Extra口初始即Overlap (out [vp]) = Overlap (,out [vp]) + (Overlap (Filter) -Overlap (Extra))。6.3.7 計(jì)算節(jié)點(diǎn) vp 的影響值 Inf[vp],Inf[vp] =sum+weight (vp)-over lap (out [ vp]),其中 weight(vp)是節(jié)點(diǎn) vp 的權(quán)重。Totallnf[vp]=Totallnf [vp]+Inf [vp],其中TotalInf [vp]是R次蒙特卡洛模擬節(jié)點(diǎn)Vp的總影響值。R是總模擬次數(shù),一般設(shè)定為20000。6. 3. 8 :如果節(jié)點(diǎn)Vp無(wú)父節(jié)點(diǎn),則轉(zhuǎn)6. 3. 9 ;否則,對(duì)于節(jié)點(diǎn)Vp的任意父節(jié)點(diǎn)vs,將其已訪問子節(jié)點(diǎn)個(gè)數(shù)Count [VJ加I,即Count [VJ = Count[vs]+l,并將停止標(biāo)志Stop置為 false。6. 3. 9 :將節(jié)點(diǎn)Vp標(biāo)記為已經(jīng)被訪問,即Visited[vp] = true,轉(zhuǎn)6. 2 ;第七步將蒙特卡洛模擬次數(shù)Num加I。判斷Num是否小于R,如果Num〈R,轉(zhuǎn)第三步,否則執(zhí)行第八歩。第八步對(duì)集合V-S中所有節(jié)點(diǎn),選擇TotallnF[]最大的節(jié)點(diǎn)V加入到集合S中。
第九歩如果集合S的節(jié)點(diǎn)個(gè)數(shù)|S| < K,轉(zhuǎn)第二步,否則說明已經(jīng)選定K個(gè)最有影響的節(jié)點(diǎn),結(jié)束。與現(xiàn)有技術(shù)相比,采用本發(fā)明能達(dá)到以下有益效果I.本發(fā)明第四步計(jì)算圖中的強(qiáng)連通分量,由于強(qiáng)連通分量中所有節(jié)點(diǎn)的影響值完全相同,因此在第五步中將各強(qiáng)連通分量替換為單個(gè)節(jié)點(diǎn),從而將圖轉(zhuǎn)化為有向無(wú)環(huán)圖,可以顯著減少影響值的計(jì)算量。2.本發(fā)明第六步采用了自底向上的遍歷方法為各個(gè)節(jié)點(diǎn)計(jì)算影響值。由于父節(jié)點(diǎn)的影響值直接依賴于其所有子節(jié)點(diǎn)的影響值,因此通過方法可以僅用一次全圖遍歷即可得到所有節(jié)點(diǎn)的影響值,降低了雜度。3.本發(fā)明充分挖掘了原貪心算法的并行性和GPU的并行計(jì)算能力,尤其是為每ー個(gè)節(jié)點(diǎn)分配ー個(gè)GPU線程進(jìn)行計(jì)算。利用GPU線程之間的并行執(zhí)行,大幅度減少了程序的執(zhí)行時(shí)間,因而可以對(duì)更大規(guī)模的社會(huì)網(wǎng)絡(luò)進(jìn)行處理,具有良好的可擴(kuò)展性。
圖I是最優(yōu)的貪心算法MixGreedy流程圖;圖2是本發(fā)明總體流程圖。
具體實(shí)施例方式圖I是最優(yōu)的貪心算法MixGreedy流程圖。第一歩初始化節(jié)點(diǎn)集合S為空。第二步設(shè)定當(dāng)前蒙特卡洛模擬次數(shù)Num = O。第三歩采用蒙特卡洛模擬方法對(duì)圖進(jìn)行選邊,得到圖G'。第四步為各個(gè)節(jié)點(diǎn)進(jìn)行寬度優(yōu)先捜索,計(jì)算各節(jié)點(diǎn)的影響值。第五步將蒙特卡洛模擬次數(shù)Num加I。判斷Num是否小于R,如果Num < R,則轉(zhuǎn)第三步,否則執(zhí)行第六歩。第六步選擇集合V-S中TotallnF[]影響值最大的節(jié)點(diǎn)V加入到集合S中。第七歩如果集合S的節(jié)點(diǎn)個(gè)數(shù)|S| < K,則轉(zhuǎn)第二步,否則說明已經(jīng)選定K個(gè)最有影響的節(jié)點(diǎn),程序結(jié)束退出。圖2是本發(fā)明總體流程圖。第一歩初始化節(jié)點(diǎn)集合S為空。第二步設(shè)定當(dāng)前蒙特卡洛模擬次數(shù)Num = O。第三歩采用蒙特卡洛模擬方法對(duì)圖進(jìn)行選邊,得到圖G'。第四歩尋找圖G'中的強(qiáng)連通分量。第五歩根據(jù)各強(qiáng)連通分量將圖G'轉(zhuǎn)變?yōu)橛邢驘o(wú)環(huán)圖(T。第六步從出度為O的節(jié)點(diǎn)開始,自底向上遍歷有向無(wú)環(huán)圖(T中所有節(jié)點(diǎn),利用GPU不同線程并行計(jì)算所有節(jié)點(diǎn)的影響值第七步將蒙特卡洛模擬次數(shù)Num加I。判斷Num是否小于R,如果Num < R,則轉(zhuǎn)第三步,否則執(zhí)行第八歩。第八步選擇集合V-S中TotallnF[]影響值最大的節(jié)點(diǎn)V加入到集合S中。
第九歩如果集合S的節(jié)點(diǎn)個(gè)數(shù)Isl < K,則轉(zhuǎn)第二步,否則說明已經(jīng)選定K個(gè)最 有影響的節(jié)點(diǎn),程序結(jié)束退出。
權(quán)利要求
1.一種基于圖形處理單元的影響最大化并行加速方法,包括以下步驟 第一歩初始化影響最大化節(jié)點(diǎn)集合S為空; 第二步設(shè)定當(dāng)前蒙特卡洛模擬次數(shù)Num=O ; 第三步采用蒙特卡洛模擬方法對(duì)圖進(jìn)行選邊,得到圖G'; 其特征在于還包括以下步驟 第四歩采用Tarian算法,基于深度優(yōu)先搜索尋找圖G'中所有的強(qiáng)連通分量SCCi, i取值從O到j(luò)-l,i為圖G'中的強(qiáng)連通分量的個(gè)數(shù); 第五歩根據(jù)圖G'的各強(qiáng)連通分量SCCi,將圖G'轉(zhuǎn)變?yōu)橛邢驘o(wú)環(huán)圖G%方法是·5.I :初始化i=0 ; ·5.2 :將強(qiáng)連通分量SCCi用新節(jié)點(diǎn)vn+i代替,其中η是圖G'中的節(jié)點(diǎn)個(gè)數(shù); ·5.3 :i=i+l,如果i〈j,轉(zhuǎn)5. 2 ;如果i ( j,執(zhí)行第六步; 第六步從出度為O的節(jié)點(diǎn)開始,自底向上遍歷有向無(wú)環(huán)圖G*中所有節(jié)點(diǎn),利用GPU不同線程計(jì)算所有節(jié)點(diǎn)的影響值,線程號(hào)為P的線程負(fù)責(zé)計(jì)算節(jié)點(diǎn)Vp的影響值,其中O ^ P ^ n_l,具體方法是 ·6.I :定義和初始化變量,方法是 ·6. I. I :使用布爾數(shù)組Visited[]記錄各個(gè)節(jié)點(diǎn)是否已經(jīng)被訪問過,Visited[vp]等于true表示節(jié)點(diǎn)Vp已經(jīng)被訪問,Visited[vp]等于false表示節(jié)點(diǎn)Vp未被訪問,將數(shù)組Visited[]全部初始化為false,表示所有節(jié)點(diǎn)均未被訪問; ·6. 1.2:使用整數(shù)數(shù)組&)11社[]記錄各個(gè)節(jié)點(diǎn)已經(jīng)被訪問的子節(jié)點(diǎn)個(gè)數(shù),其中O ^ Count [vj く outdegree[vj ,O ^ x ^ n_l, outdegree[vj 是節(jié)點(diǎn) vx 的出度;將數(shù)組Count []全部初始化為O,表示均未被訪問; ·6. I. 3:使用整數(shù)數(shù)組Inf 口記錄各個(gè)節(jié)點(diǎn)的影響值,其中O彡,Inf[vJ ^n,O≤X≤n-1,將數(shù)組Inf []全部初始化為O ; ·6. 1.4 :使用字符串?dāng)?shù)組Label 口記錄各個(gè)節(jié)點(diǎn)的標(biāo)簽,標(biāo)簽Label [vj標(biāo)記了節(jié)點(diǎn)Vx可能同其他節(jié)點(diǎn)發(fā)生重疊的位置,其中節(jié)點(diǎn)Va及節(jié)點(diǎn)Vb重疊于節(jié)點(diǎn)V。當(dāng)且僅當(dāng)從節(jié)點(diǎn)Va和Vb均存在至少一條路徑可達(dá)節(jié)點(diǎn)V。,O彡a, b, c彡η-I,將數(shù)組Label []全部初始化為NULL ; ·6. I. 5 :使用布爾變量Stop記錄線程計(jì)算是否完成,Stop等于true表示該次模擬中所有節(jié)點(diǎn)影響值計(jì)算已經(jīng)完成,Stop等于false表示未完成,Stop為全局變量,所有GPU線程均可以修改其內(nèi)容,初始化Stop為false ; ·6. 2 :如果停止標(biāo)志Stop為false,轉(zhuǎn)6. 3 ;如果Stop為true,轉(zhuǎn)第七步; ·6. 3 =GPU采用單指令流多數(shù)據(jù)流的執(zhí)行方式,以多線程并行的方式計(jì)算節(jié)點(diǎn)的影響值;多線程并行的方式是指=GPU為每個(gè)節(jié)點(diǎn)分配一個(gè)線程計(jì)算影響值,GPU 一次由V個(gè)線程并行計(jì)算y個(gè)節(jié)點(diǎn)的影響值,y為GPU中的流處理器數(shù)目,當(dāng)GPU當(dāng)前y個(gè)節(jié)點(diǎn)的影響值計(jì)算完成后,若還有節(jié)點(diǎn)影響值未計(jì)算,則GPU經(jīng)過GPU線程調(diào)度以多線程并行的方式計(jì)算剩余節(jié)點(diǎn)的影響值,直至所有節(jié)點(diǎn)的影響值計(jì)算完畢,GPU的一個(gè)線程計(jì)算節(jié)點(diǎn)Vp影響值的方法是 ·6. 3. I :將停止標(biāo)志Stop置為true ; ·6. 3. 2 :如果Visited[vp]等于false,執(zhí)行6. 3. 3 ;否則說明節(jié)點(diǎn)Vp已經(jīng)被訪問過,轉(zhuǎn)·6. 2 ; ·6. 3. 3 :如果Count[vp]等于節(jié)點(diǎn)vp的出度,則說明節(jié)點(diǎn)Vp的所有子節(jié)點(diǎn)均己被訪問,執(zhí)行6. 3. 4計(jì)算節(jié)點(diǎn)Vp的影響值;否則說明節(jié)點(diǎn)Vp的子節(jié)點(diǎn)中仍有未處理的節(jié)點(diǎn),則將停止標(biāo)志Stop置為false,轉(zhuǎn)6. 2 ; ·6. 3. 4 :計(jì)算節(jié)點(diǎn)Vp的所有子節(jié)點(diǎn)影響值的總和sum, sum = Evqeout[vp] ^nf[vq],其中out [vp]是節(jié)點(diǎn)vp所有子節(jié)點(diǎn)的集合; ·6. 3. 5 :計(jì)算節(jié)點(diǎn)Vp的標(biāo)簽Label (Vp),節(jié)點(diǎn)Vp的標(biāo)簽label (Vp)等于節(jié)點(diǎn)Vp的所有子節(jié)點(diǎn)對(duì)vp貢獻(xiàn)的并集,叫MeZ(Vp) = Uvqeout[vp]Con(ろ),其中Con(V(i)是子節(jié)點(diǎn) '對(duì)節(jié)點(diǎn)Vp的貢獻(xiàn),子節(jié)點(diǎn)Vtl對(duì)節(jié)點(diǎn)Vp的貢獻(xiàn)是指如果子節(jié)點(diǎn)Vtl的入度大于1,則Vtl對(duì)節(jié)點(diǎn)Vp的貢獻(xiàn)為節(jié)點(diǎn)VtJ自身,即Con(Vq) = Vq ;如果子節(jié)點(diǎn)Vq的入度小于等于I,Vtl的貢獻(xiàn)為節(jié)點(diǎn)Vq的標(biāo)簽,即 Con(Vq) = Label(Vq);·6. 3.6 :計(jì)算節(jié)點(diǎn)Vp所有子節(jié)點(diǎn)的集合out [vp]重疊的影響值Overlap (out [vp]),方法是 ·6. 3. 6. I :初始化Overlap (out [vp])為O,初始化重疊范圍集合Range為out[vp]; ·6. 3. 6. 2 :對(duì)于任意節(jié)點(diǎn)va e Range,如果存在節(jié)點(diǎn)vb e Range且Vb尹va,并且從節(jié)點(diǎn)Va存在路徑可達(dá)節(jié)點(diǎn)vb,此時(shí)重疊發(fā)生在節(jié)點(diǎn)vb,故Overlap (out [vp])=Overlap (out [vp])+Inf [vb],同時(shí)將 vb 從 Range 中刪除,即 Range = Ranqe-Vb ; ·6.3. 6. 3 :使用字符串?dāng)?shù)組Extraロ記錄Range中的重疊項(xiàng),將Extraロ初始化為空集0;使用字符串?dāng)?shù)組Filter []記錄Range中除去重疊項(xiàng)剩余的單ー項(xiàng),將Filter[]初始化為空集0;對(duì)于任意節(jié)點(diǎn)va e range,對(duì)于任意元素u e Label (Va),如果元素u已經(jīng)屬于Filter,則元素u為重疊項(xiàng),將u加入Extra中并將其影響值Inf [u]加入到Overlap (out [vp]),即 Extra = Extra U u, Overlap (out [vp]) = Overlap (out [vp]) +Inf [u];如果 u 不屬于Filter,則將 u 加入到 Filter 數(shù)組中,即 Filter = Filter U u ; ··6.3. 6. 4 :由于Extra口和Filter口數(shù)組中的元素仍然可能存在重復(fù),故最終節(jié)點(diǎn)Vp所有子節(jié)點(diǎn)的重疊影響值Overlap(out[vp])需要加上兩者重疊值之差,即Overlap (out [vp])=Overlap (out [vp]) + (Overlap (Filter)-Overlap (Extra));·6. 3. 7 :計(jì)算節(jié)點(diǎn) vp 的影響值 Inf [vp], Inf [vp] =sum+weight (vp)-overlap (out [vp]),其中 weight(vp)是節(jié)點(diǎn) vp 的權(quán)重;Totallnf[vp] =Totallnf [vp]+Inf [vp],其中 TotalInf [vp]是R次蒙特卡洛模擬節(jié)點(diǎn)vp的總影響值;R是總模擬次數(shù),R為正整數(shù); ·6.3. 8 :如果節(jié)點(diǎn)Vp無(wú)父節(jié)點(diǎn),則轉(zhuǎn)6. 3. 8 ;否則,對(duì)于節(jié)點(diǎn)Vp的任意父節(jié)點(diǎn)Vs,將其已訪問子節(jié)點(diǎn)個(gè)數(shù)Count [vj加I,即Count [vs] =Count [vJ +1,并將停止標(biāo)志Stop置為Ialse ; ·6. 3. 9 :將節(jié)點(diǎn)Vp標(biāo)記為已經(jīng)被訪問,即Visited[vp] =true,轉(zhuǎn)6. 2 ; 第七步將蒙特卡洛模擬次數(shù)Num加I,判斷Num是否小于R,如果Num〈R,轉(zhuǎn)第三步,否則執(zhí)行第八步; 第八步對(duì)集合V— S中所有節(jié)點(diǎn),選擇Totallnf []最大的節(jié)點(diǎn)v加入到集合S中;第九步如果集合S的節(jié)點(diǎn)個(gè)數(shù)I S I〈K,轉(zhuǎn)第二歩,否則說明已經(jīng)選定K個(gè)最有影響的節(jié)點(diǎn),結(jié)束。
2.如權(quán)利要求I所述的ー種基于圖形處理單元的影響最大化并行加速方法,其特征在于所述第五步中將強(qiáng)連通分量SCCi用新節(jié)點(diǎn)vn+i代替的方法是 .5. 2. I :對(duì)于強(qiáng)連通分量SCCi,新增節(jié)點(diǎn)vn+i,節(jié)點(diǎn)vn+i的入邊集合置為SCCi中所有節(jié)點(diǎn)入邊集合的并集,出邊集合為SCCi中所有節(jié)點(diǎn)出邊集合的并集,權(quán)重為該強(qiáng)連通分量中各節(jié)點(diǎn)權(quán)重之和; .5. 2. 2 :將強(qiáng)連通分量SCCi中所有節(jié)點(diǎn)的入邊集合和出邊集合置空,權(quán)重置零,方法是 .5. 2. 2. I :初始化整數(shù)變量I為O ; .5. 2. 2. 2 :對(duì)于強(qiáng)連通分量SCCi中節(jié)點(diǎn)V1,將節(jié)點(diǎn)V1的入邊集合和出邊集合置為空集0,權(quán)重置為O ; . 5.2. 2. 3 1=1+1 ;如果Kni,其中Iii是強(qiáng)連通分量SCCi的節(jié)點(diǎn)個(gè)數(shù),則轉(zhuǎn)5. 2. 2. 2 ;如果I≥ni,結(jié)束。
3.如權(quán)利要求I所述的ー種基于圖形處理單元的影響最大化并行加速方法,其特征在于所述總模擬次數(shù)R為20000。
全文摘要
本發(fā)明公開了一種基于圖形處理單元的影響最大化并行加速方法,目的是提出一種新型基于GPU的影響最大化并行方法,利用GPU的并行計(jì)算能力加速算法執(zhí)行、減少執(zhí)行時(shí)間。其特征在于在每次蒙特卡洛模擬中,首先找到網(wǎng)絡(luò)圖中的強(qiáng)連通分量,將同一強(qiáng)連通分量中的所有節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),其權(quán)重為該強(qiáng)連通分量中各節(jié)點(diǎn)權(quán)重之和;然后采用自底向上遍歷的策略,并行計(jì)算各節(jié)點(diǎn)的影響值;利用GPU的并行計(jì)算能力,由各個(gè)GPU計(jì)算核心采用各自的線程對(duì)不同的節(jié)點(diǎn)并行計(jì)算影響值,得到K個(gè)最有影響的節(jié)點(diǎn)。本發(fā)明將圖轉(zhuǎn)化為有向無(wú)環(huán)圖,可以顯著減少影響值的計(jì)算量,同時(shí)通過最大程度地調(diào)度各節(jié)點(diǎn)在GPU的計(jì)算核心中并行計(jì)算,降低了整體運(yùn)行時(shí)間。
文檔編號(hào)G06F19/00GK102819664SQ20121024873
公開日2012年12月12日 申請(qǐng)日期2012年7月18日 優(yōu)先權(quán)日2012年7月18日
發(fā)明者李?yuàn)檴? 廖湘科, 劉曉東, 吳慶波, 戴華東, 彭紹亮, 王蕾, 付松齡, 魯曉佩, 鄭思 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)