最近被spmd指令搞得焦头烂额,比如大家看我的程序结构:[i,j,k,l]=ndgrid(1:n,1:n,1:n,1:n);spmd if(labindex==1) M1=int(JCC(i+j,k+l,x),x,0,1); end if(labindex==3) M3=int(JCC(i-j,k+l,x),x,0,1); end if(labindex==2) M2=int(JCC(i+j,k-l,x),x,0,1); end if(labindex==4) M4=int(JCC(i-j,k-l,x),x,0,1); endend0这是指令并行,每个线程负担大约1w个符号积分。不过总感觉效率略低下,从单线程到双线程,加速比很接近2,但双线程到4线程则提升很小,最终大概只达到了2.5的加速比。至于数据并行,我主要是需要做矩阵乘法和解稠密线性方程组,这些矩阵都并不是特别大(最多不过50*50的规模),感觉用distributed(A)之类的指令做,还不如直接乘来得快,更糟的是,我自己写的并行高斯列主元消去法的速度居然还不如左除法,简直是颜面扫地。关键是,选主元,交换这些过程都需要循环嵌套,parfor指令我又不怎么会用,真正并行的只有消元那个过程,所以效率特别低下,求各位大神的经验。我所处理的线性方程组都是恰定的,而且都是非奇异矩阵。总之,本人纯粹的菜鸟,很多问题可能都很小白,还请大神们不吝赐教。 |
|
|
|
|
共 3 个关于本帖的回复 最后回复于 2014-6-1 19:55