# parallel coding: how to solve linear system?

5 views (last 30 days)
Pietro Pollaci on 19 Mar 2015
Commented: Edric Ellis on 20 Mar 2015
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.
Pietro

Edric Ellis on 19 Mar 2015
Unfortunately, as the error message states, you cannot use the \ operator with sparse distributed arrays at this time.
Edric Ellis on 20 Mar 2015
Unfortunately, the best options you have are either:
1. Use sparse on your local machine
2. Use dense distributed arrays on a cluster
3. 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.