parallel coding: how to solve linear system?
2 次查看(过去 30 天)
显示 更早的评论
Hi everyone! I need to solve a (very large) linear system in my code, so I'm trying to use a parallel session.
Basically my original local code does the following:
function U = myfun(U0,J0,nx,S0,Mbcs,Bbcs)
A = spdiags(funA(J0),0,nx,nx);
B = spdiags(funB(J0),0,nx,nx);
C = spdiags(funC(J0),0,nx,nx);
D = spdiags(funD(J0),0,nx,nx);
K = [A B; C D];
V = S0;
K([1,nx,nx+1,2*nx],:)=0;
V([1,nx,nx+1,2*nx])=0;
K = K + Mbcs;
V = V + Bbcs;
U = K\V;
The use of sparse array speeds up a lot the solver time. Now I tried to launch a parallel session:
parpool('local2');
And the code was modified as follows for distributing the matrices to the workers:
K = distributed(K);
V = distributed(V);
But at the end I get this error:
Error using \ (line 48)
Sparse input arguments are not supported.
Error in distributed/wrapRemoteCall>iInnerWrapper (line 83)
[varargout{:}] = fcnH( varargin{:} );
Error in spmd_feval_fcn>get_f/body (line 78)
[outCell{:}] = fcnH( inCell{:} );
Where is the error? I don't know much about parallel programming, but from the examples I found, it seems to me that I only need do distribute the matrix to the workers.
Thanks in advance for all your suggestions.
Pietro
0 个评论
采纳的回答
Edric Ellis
2015-3-19
Unfortunately, as the error message states, you cannot use the \ operator with sparse distributed arrays at this time.
4 个评论
Edric Ellis
2015-3-20
Unfortunately, the best options you have are either:
- Use sparse on your local machine
- Use dense distributed arrays on a cluster
- Solve a smaller problem
Note that distributed arrays on a single machine almost never offer any benefit since most linear algebra operations are already fairly efficiently multi-threaded by MATLAB, and using a multi-process approach cannot usually compete.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!