1.一種蒙特卡洛逆向求解PageRank問題的加速方法,其特征在于,包括以下步驟:
S1:確定初始方向數(shù),由初始方向數(shù)得到擬隨機(jī)序列的方向數(shù),然后計(jì)算得到擬隨機(jī)數(shù)列;
S2:將PageRank迭代公式進(jìn)行轉(zhuǎn)換,得到新的迭代矩陣G和其對(duì)應(yīng)的線性方程組系數(shù)矩陣A,計(jì)算矩陣特征值極值,根據(jù)特征值的分布得到松弛因子,利用該松弛因子對(duì)PageRank迭代公式進(jìn)行松弛化處理,再利用S1中得到的擬隨機(jī)數(shù)列,對(duì)松弛化后的PageRank迭代公式使用馬爾科夫蒙特卡洛方法進(jìn)行仿真,得到求解的目標(biāo)分量xi的每條馬爾科夫鏈仿真結(jié)果;
S3:對(duì)求解的目標(biāo)分量xi的每條馬爾科夫鏈仿真結(jié)果,首先申請(qǐng)分配GPU共享內(nèi)存進(jìn)行緩存,接著在GPU共享內(nèi)存中對(duì)各個(gè)仿真結(jié)果進(jìn)行歸約并行求和,然后將匯總的結(jié)果除以仿真的鏈數(shù),求得目標(biāo)分量xi的期望值。
2.根據(jù)權(quán)利要求1所述的蒙特卡洛逆向求解PageRank問題的加速方法,其特征在于,所述步驟S1的具體過程如下:
S11:使用T個(gè)在二元有限域GF(2)上的本原多項(xiàng)式,其中第i維序列使用的本原多項(xiàng)式為:
Pi(x)=xr+t1,ixr-1+tr-1,ix+1,
其中r為Pi的度數(shù),t1,i,t2,i,…,tr-1,i是取值為0或1的本原多項(xiàng)式的系數(shù);
S12:選取初始方向數(shù),對(duì)于一個(gè)度數(shù)為r的本原多項(xiàng)式Pi有r個(gè)初始方向數(shù):v1,i,…,vr,i,其中mj,i為一個(gè)小于2j的正奇數(shù);
S13:由初始方向數(shù)計(jì)算出方向數(shù),公式如下:
S14:初始化序列起始值根據(jù)求得的方向數(shù),以及使用格雷碼方法求得第i維的序列,公式如下:
3.根據(jù)權(quán)利要求2所述的蒙特卡洛逆向求解PageRank問題的加速方法,其特征在于,所述步驟S2中計(jì)算松弛因子并應(yīng)用松弛法求解PageRank迭代公式的過程包括以下步驟:
S21:將PageRank迭代公式進(jìn)行轉(zhuǎn)化:
由公式得,記為x=Gx+b,得到對(duì)應(yīng)的線性方程組為Ax=b。其中相關(guān)參數(shù)說明如下:x是求解的PageRank值目標(biāo)向量,α是阻尼系數(shù),M是PageRank迭代矩陣,N是結(jié)點(diǎn)個(gè)數(shù),E是元素全為1的矩陣,e是元素全為1的列向量,G為αM,b為A=(I-G);
S22:計(jì)算矩陣特征值極值,其中為A的對(duì)角矩陣的逆矩陣,得到特征值最大值λmax和特征值最小值λmin,根據(jù)求出的特征值極值算出松弛因子ω;
S23:應(yīng)用松弛法求解PageRank迭代公式:
DωAx=Dωb,其中Dω為對(duì)角矩陣,對(duì)角線的元素為其中ai,j為矩陣A的元素,得到松弛化后的迭代矩陣Gω=I-DωA;
S24:使用步驟S1中得到的擬隨機(jī)序列來模擬馬爾科夫鏈,將模擬過程分配到GPU的多個(gè)線程束warp執(zhí)行,線程束warp里面的每個(gè)線程執(zhí)行一條馬爾科夫鏈的隨機(jī)游走,多個(gè)線程同時(shí)執(zhí)行,各自求解目標(biāo)分量的一個(gè)解,得到求解的目標(biāo)分量xi的每條馬爾科夫鏈仿真結(jié)果。
4.根據(jù)權(quán)利要求3所述的蒙特卡洛逆向求解PageRank問題的加速方法,其特征在于,所述步驟S3的具體過程如下:
S31:首先申請(qǐng)分配GPU共享內(nèi)存,用于保存每個(gè)目標(biāo)分量的一個(gè)仿真結(jié)果;
S32:將S2中計(jì)算得到的各個(gè)馬爾科夫鏈隨機(jī)游走的仿真結(jié)果存放在GPU的共享內(nèi)存中,存放的位置為當(dāng)前線程獨(dú)有的線程id對(duì)應(yīng)的共享內(nèi)存數(shù)組下標(biāo);
S33:在GPU的共享內(nèi)存對(duì)各個(gè)部分解進(jìn)行reduce并行化求和:
首先在第一輪迭代中,根據(jù)GPU的線程塊block數(shù)blockDimX將歸約求解數(shù)據(jù)分為兩個(gè)子集,子集大小為然后將線程id=i保存的值與線程id=i+size的值求和,結(jié)果保存到線程id=i的對(duì)應(yīng)的共享內(nèi)存上,接著在下一輪迭代中,將步長(zhǎng)size減半,繼續(xù)進(jìn)行歸約求和;
重復(fù)以上過程,直至步長(zhǎng)為0時(shí)結(jié)束,并將最終結(jié)果sum除以馬爾科夫鏈的數(shù)目求解期望值,即返回該期望值,并將求解結(jié)果由GPU內(nèi)存復(fù)制回CPU內(nèi)存。