本發(fā)明涉及并行計算領(lǐng)域,更具體地,涉及一種蒙特卡洛逆向求解PageRank問題的加速方法。
背景技術(shù):
隨著社會的進步,互聯(lián)網(wǎng)中產(chǎn)生的網(wǎng)頁數(shù)量呈現(xiàn)了爆炸式增長。PageRank作為搜索引擎的核心算法,它能有效地根據(jù)網(wǎng)頁之間的鏈接關(guān)系,對搜索結(jié)果按重要性進行合理的排序。因此,在大量的網(wǎng)頁中,PageRank在大規(guī)模數(shù)據(jù)處理中如何高效、魯棒地求解顯得尤為重要。此外,在很多的PageRank應(yīng)用場景中,通常只有很少的頁面需要被計算,例如在社交網(wǎng)絡(luò)中檢測高影響力的節(jié)點,在TrustRank方法中用于選擇高質(zhì)量的“種子”頁面等等,如何針對這些場景對原始PageRank算法進行改良也是一個重點和難點。
目前馬爾科夫蒙特卡洛求解PageRank的值主要有以下兩種方法:
(1)通過模擬網(wǎng)頁前向瀏覽跳轉(zhuǎn),使用馬爾科夫蒙特卡洛方法來計算PageRank值。該方法與傳統(tǒng)的確定性的Power方法相比,一是經(jīng)過一輪迭代后可以近似獲得相對重要的網(wǎng)頁的估計,二是可以根據(jù)網(wǎng)頁間結(jié)構(gòu)的改變做出持續(xù)地PageRank值更新。然而自然的web圖有著很多高入度的頂點,傳統(tǒng)的PageRank方法在計算這些頂點的PageRank開銷較大,Ziv Bar-Yossef等人指出在逆向的web圖上計算PageRank值比原始的web圖更為高效;
(2)模擬目標網(wǎng)頁向外擴散,對轉(zhuǎn)置后的圖使用馬爾科夫蒙特卡洛方法來逆向計算。該方法的優(yōu)點就是可以只計算一個網(wǎng)頁的PageRank值,而不需要計算所有網(wǎng)頁的PageRank值。另外一個優(yōu)點是在GPU上實現(xiàn)了并行化計算。然而該方法在效率性能方面有以下不足:(a)使用的偽隨機序列在每個分量的求解時需要重新生成,需要一定量的開銷。(b)直接利用GPU的全局內(nèi)存,而沒有使用GPU的共享內(nèi)存作為緩存,計算速度不佳。
基于現(xiàn)有方法出現(xiàn)的問題,面對互聯(lián)網(wǎng)數(shù)據(jù)急速增長的趨勢,應(yīng)該從提高馬爾科夫蒙特卡洛求解PageRank的效率出發(fā),加速處理大規(guī)模數(shù)據(jù)。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種提高效率的蒙特卡洛逆向求解PageRank問題的加速方法。
為了達到上述技術(shù)效果,本發(fā)明的技術(shù)方案如下:
一種蒙特卡洛逆向求解PageRank問題的加速方法,包括以下步驟:
S1:確定初始方向數(shù),由初始方向數(shù)得到擬隨機序列的方向數(shù),然后計算得到擬隨機數(shù)列;
S2:將PageRank迭代公式進行轉(zhuǎn)換,得到新的迭代矩陣G和其對應(yīng)的線性方程組系數(shù)矩陣A,計算矩陣A特征值極值,根據(jù)特征值的分布得到松弛因子,利用該松弛因子對PageRank迭代公式進行松弛化處理,再利用S1中得到的擬隨機數(shù)列,對松弛化后的PageRank迭代公式使用馬爾科夫蒙特卡洛方法進行仿真,得到求解的目標分量xi的每條馬爾科夫鏈仿真結(jié)果;
S3:對求解的目標分量xi的每條馬爾科夫鏈仿真結(jié)果,首先申請分配GPU共享內(nèi)存進行緩存,接著在GPU共享內(nèi)存中對各個仿真結(jié)果進行歸約并行求和,然后將匯總的結(jié)果除以仿真的鏈數(shù),求得目標分量xi的期望值。
進一步地,所述步驟S1的具體過程如下:
S11:使用T個在二元有限域GF(2)上的本原多項式,其中第i維序列使用的本原多項式為:
Pi(x)=xr+t1,ixr-1+tr-1,ix+1,
其中r為Pi的度數(shù),t1,i,t2,i,…,tr-1,i是取值為0或1的本原多項式的系數(shù);
S12:選取初始方向數(shù),對于一個度數(shù)為r的本原多項式Pi有r個初始方向數(shù):v1,i,…,vr,i,其中mj,i為一個小于2j的正奇數(shù);
S13:由初始方向數(shù)計算出方向數(shù),公式如下:
S14:初始化序列起始值根據(jù)求得的方向數(shù),以及使用格雷碼方法求得第i維的序列,公式如下:
進一步地,所述步驟S2中計算松弛因子并應(yīng)用松弛法求解PageRank迭代公式的過程包括以下步驟:
S21:將PageRank迭代公式進行轉(zhuǎn)化:
由公式得,記為x=Gx+b,得到對應(yīng)的線性方程組為Ax=b。其中相關(guān)參數(shù)說明如下:x是求解的PageRank值目標向量,α是阻尼系數(shù),M是PageRank迭代矩陣,N是結(jié)點個數(shù),E是元素全為1的矩陣,e是元素全為1的列向量,G為αM,b為A=(I-G);
S22:計算矩陣A特征值極值,其中為A的對角矩陣的逆矩陣,得到特征值最大值λmax和特征值最小值λmin,根據(jù)求出的特征值極值算出松弛因子ω;
S23:應(yīng)用松弛法求解PageRank迭代公式:
DωAx=Dωb,其中Dω為對角矩陣,對角線的元素為其中ai,j為矩陣A的元素,得到松弛化后的迭代矩陣Gω=I-DωA;
S24:使用步驟S1中得到的擬隨機序列來模擬馬爾科夫鏈,將模擬過程分配到GPU的多個線程束warp執(zhí)行,線程束warp里面的每個線程執(zhí)行一條馬爾科夫鏈的隨機游走,多個線程同時執(zhí)行,各自求解目標分量的一個解,得到求解的目標分量xi的每條馬爾科夫鏈仿真結(jié)果。
進一步地,所述步驟S3的具體過程如下:
S31:首先申請分配GPU共享內(nèi)存,用于保存每個目標分量的一個仿真結(jié)果;
S32:將S2中計算得到的各個馬爾科夫鏈隨機游走的仿真結(jié)果存放在GPU的共享內(nèi)存中,存放的位置為當前線程獨有的線程id對應(yīng)的共享內(nèi)存數(shù)組下標;
S33:在GPU的共享內(nèi)存對各個部分解進行reduce并行化求和:
首先在第一輪迭代中,根據(jù)GPU的線程塊block數(shù)blockDimX將歸約求解數(shù)據(jù)分為兩個子集,子集大小為然后將線程id=i保存的值與線程id=i+size的值求和,結(jié)果保存到線程id=i的對應(yīng)的共享內(nèi)存上,接著在下一輪迭代中,將步長size減半,繼續(xù)進行歸約求和;
重復(fù)以上過程,直至步長為0時結(jié)束,并將最終結(jié)果sum除以馬爾科夫鏈的數(shù)目求解期望值,即返回該期望值,并將求解結(jié)果由GPU內(nèi)存復(fù)制回CPU內(nèi)存。
與現(xiàn)有技術(shù)相比,本發(fā)明技術(shù)方案的有益效果是:
本發(fā)明使用擬隨機序列代替?zhèn)坞S機序列進行PageRank仿真求解,擬隨機序列一次生成后,可以用于每個分量的求解過程中,而使用偽隨機序列則需要在每個分量的求解過程中重新生成,另外,擬隨機序列可以在GPU上高效并行的生成,在隨機序列的生成上可以節(jié)約不少時間;引入松弛法進行求解,通過將目標函數(shù)進行轉(zhuǎn)換,并進行松弛化,減少迭代矩陣的譜半徑來加快收斂速度;充分利用GPU的共享內(nèi)存作為緩存,并在累積匯總每個馬爾科夫鏈計算的結(jié)果時進行高效地reduce并行化操作,無需多次訪問讀取速度較慢的全局內(nèi)存,從而提高效率。
附圖說明
圖1為本發(fā)明基于馬爾科夫蒙特卡洛逆向蒙特卡洛逆向求解PageRank問題的加速方法的流程示意圖;
圖2為本發(fā)明生成擬隨機序列的任務(wù)分配示意圖;
圖3為本發(fā)明使用GPU求解PageRank分量結(jié)果的線程分配示意圖;
圖4為本發(fā)明對每個仿真結(jié)果進行并行化reduce求和示意圖。
具體實施方式
附圖僅用于示例性說明,不能理解為對本專利的限制;
為了更好說明本實施例,附圖某些部件會有省略、放大或縮小,并不代表實際產(chǎn)品的尺寸;
對于本領(lǐng)域技術(shù)人員來說,附圖中某些公知結(jié)構(gòu)及其說明可能省略是可以理解的。
下面結(jié)合附圖和實施例對本發(fā)明的技術(shù)方案做進一步的說明。
實施例1
如圖1所示,本發(fā)明先讀取輸入的圖數(shù)據(jù),然后預(yù)生成擬隨機序列,接著使用松弛法對轉(zhuǎn)換后的PageRank迭代公式進行預(yù)處理,并在GPU進行馬爾科夫蒙特卡洛多線程并行化仿真。最后在共享內(nèi)存上對目標分量xi的每個仿真結(jié)果進行并行化reduce求和。
本發(fā)明一種蒙特卡洛逆向求解PageRank問題的加速方法的實現(xiàn)步驟如下:
1.首先對輸入的圖數(shù)據(jù)進行預(yù)處理。具體步驟如下:讀取圖文件,將數(shù)據(jù)保存到鄰接矩陣數(shù)組中,統(tǒng)計各個頂點的出度和入度。過濾篩選出懸停結(jié)點,將懸停結(jié)點為所在行元素置為1。根據(jù)頂點的出度值將鄰接矩陣表示為所有元素非負且列和為1的馬爾科夫迭代矩陣。
2.然后在GPU上生成擬隨機序列。首先選取初始方向數(shù)v1,i,…,vr,i,由初始方向數(shù)應(yīng)用以下公式到擬隨機序列的方向數(shù),由于在擬隨機序列生成過程中,方向數(shù)需要頻繁的訪問,因此在實現(xiàn)過程中將其存儲在共享內(nèi)存中加快計算。如圖2所示,對于擬隨機序列的每一個維度,用一個block對應(yīng)生成。對于第i個序列,提前生成序列前M個數(shù),然后不斷迭代生成接下來的數(shù)。
3.重新表示PageRank迭代公式并計算松弛因子。對于轉(zhuǎn)化后的PageRank迭代公式,求解矩陣A的特征值極值,根據(jù)特征值極值的分布,得到松弛因子ω。
4.根據(jù)松弛因子ω以及矩陣A的對角元素計算出對角矩陣Dω,將松弛法應(yīng)用到PageRank迭代公式,得到迭代矩陣Gω;
5.模擬馬爾科夫鏈隨機游走。使用生成的擬隨機序列來模擬馬爾科夫鏈,將模擬過程分配到GPU的多個warp執(zhí)行,warp里面的每個線程執(zhí)行一條馬爾科夫鏈的隨機游走,多個線程同時執(zhí)行,各自求解目標分量的一個解,具體線程分配示意圖如圖3所示。
6.如圖4所示,在共享內(nèi)存對馬爾科夫鏈模擬結(jié)果進行并行化求和。首先根據(jù)預(yù)先設(shè)定的馬爾科夫鏈的數(shù)目,申請分配GPU共享內(nèi)存的大小。在所有線程仿真結(jié)束后,將每一個線程id對應(yīng)的求解結(jié)果保存在共享內(nèi)存中。然后求解的目標分量的各個部分解進行reduce并行化求和。具體步驟如下:
a.首先在第一輪迭代中,根據(jù)GPU的block數(shù)blockDimX將reduce求解數(shù)據(jù)分為兩個子集,子集大小為
b.然后將線程id=i保存的值與線程id=i+size的值求和,結(jié)果保存到線程id=i的對應(yīng)的共享內(nèi)存上。
c.將步長size減半,判斷步長size的大小。如果步長大于0,則跳到步驟b繼續(xù)進行reduce求和。如果步長等于0,則結(jié)束reduce迭代。
d.將最終結(jié)果sum除以馬爾科夫鏈的數(shù)目求解期望值,即
e.返回該期望值,并將求解結(jié)果由GPU內(nèi)存復(fù)制回CPU內(nèi)存。
上述實施例為本發(fā)明較佳的實施方式,但本發(fā)明的實施方式并不受上述實施例的限制,其他的任何未背離本發(fā)明的精神實質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護范圍之內(nèi)。
相同或相似的標號對應(yīng)相同或相似的部件;
附圖中描述位置關(guān)系的用于僅用于示例性說明,不能理解為對本專利的限制;
顯然,本發(fā)明的上述實施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明權(quán)利要求的保護范圍之內(nèi)。