研发埠
标题:
求matlab大牛系统性讲解下并行计算程序的写法,多谢
[打印本页]
作者:
欧来良
时间:
2014-5-31 13:21
标题:
求matlab大牛系统性讲解下并行计算程序的写法,多谢
最近被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指令我又不怎么会用,真正并行的只有消元那个过程,所以效率特别低下,求各位大神的经验。我所处理的线性方程组都是恰定的,而且都是非奇异矩阵。总之,本人纯粹的菜鸟,很多问题可能都很小白,还请大神们不吝赐教。
作者:
石光
时间:
2014-6-1 14:26
matlab里的矩阵运算都是用的lapack,尤其是非函数调用的那些个运算符,更是快速,想自己编写超越很难,尤其是矩阵规模还不大。如果只是矩阵方程的数目比较多,想并行加速的话,可以用parfor,示意如下:% 求解Ax = b.其中A和b都保存在cell数组里parfor k = 1:1000 x{k} = A{k}{k};end
作者:
任建敏
时间:
2014-6-1 14:44
同样的问题,,顶一个!!求高手来回答
作者:
欧来良
时间:
2014-6-1 19:55
多谢。这个解方程组的办法很有效,多谢多谢
欢迎光临 研发埠 (http://bbs.yanfabu.com/)
Powered by Discuz! X3.2