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

 채택된 답변

Edric Ellis
Edric Ellis 2015년 3월 19일

0 개 추천

Unfortunately, as the error message states, you cannot use the \ operator with sparse distributed arrays at this time.

댓글 수: 4

So, which is the solution? Using dense arrays and allocating more memory? I'll try to use diag()! Thanks
John D'Errico
John D'Errico 2015년 3월 19일
Suppose you gain a 10-1 speedup by the use of sparse matrices. This would not be at all surprising. If you go back to dense matrices so that you can use a pool of workers to solve it, then you would need to use a pool with at least 10 workers to get the same speedup, and that just gets you to break-even.
Pietro Pollaci
Pietro Pollaci 2015년 3월 19일
편집: Pietro Pollaci 2015년 3월 19일
Then, the use of a pool is not (always) convenient, right? Let us assume, as you wrote, a 10:1 gain then, if I well understood, at least "11" workers are needed in the parallel session in order to get significant advantages. The questions are:
- is it always true?
- does it depend on the size of the problem?
- when does a parallel session beat a sparse-array approach?
Edric Ellis
Edric Ellis 2015년 3월 20일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Linear Algebra에 대해 자세히 알아보기

질문:

2015년 3월 19일

댓글:

2015년 3월 20일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by