欧来良 发表于 2014-5-31 13:21:50

求matlab大牛系统性讲解下并行计算程序的写法,多谢

最近被spmd指令搞得焦头烂额,比如大家看我的程序结构:=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指令我又不怎么会用,真正并行的只有消元那个过程,所以效率特别低下,求各位大神的经验。我所处理的线性方程组都是恰定的,而且都是非奇异矩阵。总之,本人纯粹的菜鸟,很多问题可能都很小白,还请大神们不吝赐教。

石光 发表于 2014-6-1 14:26:12

matlab里的矩阵运算都是用的lapack,尤其是非函数调用的那些个运算符,更是快速,想自己编写超越很难,尤其是矩阵规模还不大。如果只是矩阵方程的数目比较多,想并行加速的话,可以用parfor,示意如下:% 求解Ax = b.其中A和b都保存在cell数组里parfor k = 1:1000    x{k} = A{k}{k};end

任建敏 发表于 2014-6-1 14:44:15

同样的问题,,顶一个!!求高手来回答

欧来良 发表于 2014-6-1 19:55:33

多谢。这个解方程组的办法很有效,多谢多谢
页: [1]
查看完整版本: 求matlab大牛系统性讲解下并行计算程序的写法,多谢