1.一种蒙特卡洛逆向求解PageRank问题的加速方法,其特征在于,包括以下步骤:
S1:确定初始方向数,由初始方向数得到拟随机序列的方向数,然后计算得到拟随机数列;
S2:将PageRank迭代公式进行转换,得到新的迭代矩阵G和其对应的线性方程组系数矩阵A,计算矩阵特征值极值,根据特征值的分布得到松弛因子,利用该松弛因子对PageRank迭代公式进行松弛化处理,再利用S1中得到的拟随机数列,对松弛化后的PageRank迭代公式使用马尔科夫蒙特卡洛方法进行仿真,得到求解的目标分量xi的每条马尔科夫链仿真结果;
S3:对求解的目标分量xi的每条马尔科夫链仿真结果,首先申请分配GPU共享内存进行缓存,接着在GPU共享内存中对各个仿真结果进行归约并行求和,然后将汇总的结果除以仿真的链数,求得目标分量xi的期望值。
2.根据权利要求1所述的蒙特卡洛逆向求解PageRank问题的加速方法,其特征在于,所述步骤S1的具体过程如下:
S11:使用T个在二元有限域GF(2)上的本原多项式,其中第i维序列使用的本原多项式为:
Pi(x)=xr+t1,ixr-1+tr-1,ix+1,
其中r为Pi的度数,t1,i,t2,i,…,tr-1,i是取值为0或1的本原多项式的系数;
S12:选取初始方向数,对于一个度数为r的本原多项式Pi有r个初始方向数:v1,i,…,vr,i,其中mj,i为一个小于2j的正奇数;
S13:由初始方向数计算出方向数,公式如下:
S14:初始化序列起始值根据求得的方向数,以及
使用格雷码方法求得第i维的序列,公式如下:
3.根据权利要求2所述的蒙特卡洛逆向求解PageRank问题的加速方法,其特征在于,所述步骤S2中计算松弛因子并应用松弛法求解PageRank迭代公式的过程包括以下步骤:
S21:将PageRank迭代公式进行转化:
由公式得,
记为x=Gx+b,得到对应的线性方程组为Ax=b。其中相关参数说明如下:x是求解的PageRank值目标向量,α是阻尼系数,M是PageRank迭代矩阵,N是结点个数,E是元素全为1的矩阵,e是元素全为1的列向量,G为αM,b为
A=(I-G);
S22:计算矩阵特征值极值,其中
为A的对角矩阵的逆矩阵,得到特征值最大值λmax和特征值最小值λmin,根据求出的特征值极值算出松弛因子ω;
S23:应用松弛法求解PageRank迭代公式:
DωAx=Dωb,其中Dω为对角矩阵,对角线的元素为其中ai,j为矩阵A的元素,得到松弛化后的迭代矩阵Gω=I-DωA;
S24:使用步骤S1中得到的拟随机序列来模拟马尔科夫链,将模拟过程分配到GPU的多个线程束warp执行,线程束warp里面的每个线程执行一条马尔科夫链的随机游走,多个线程同时执行,各自求解目标分量的一个解,得到求解的目标分量xi的每条马尔科夫链仿真结果。
4.根据权利要求3所述的蒙特卡洛逆向求解PageRank问题的加速方法,其特征在于,所述步骤S3的具体过程如下:
S31:首先申请分配GPU共享内存,用于保存每个目标分量的一个仿真结果;
S32:将S2中计算得到的各个马尔科夫链随机游走的仿真结果存放在GPU的共享内存中,存放的位置为当前线程独有的线程id对应的共享内存数组下标;
S33:在GPU的共享内存对各个部分解进行reduce并行化求和:
首先在第一轮迭代中,根据GPU的线程块block数blockDimX将归约求解数据分为两个子集,子集大小为然后将线程id=i保存的值与线程id=i+size的值求和,结果保存到线程id=i的对应的共享内存上,接着在下一轮迭代中,将步长size减半,继续进行归约求和;
重复以上过程,直至步长为0时结束,并将最终结果sum除以马尔科夫链的数目求解期望值,即返回该期望值,并将求解结果由GPU内存复制回CPU内存。