Undefined function 'svd' for distributed matrix

1 view (last 30 days)
I want to calculate an SVD of a very large matrix and therefore I'm experimenting with SPMD and and svd's. I'm running this code:
D = rand(10000);
D = distributed(D);
tic()
spmd
svd(D);
end
toc()
and I get this error message:
Starting parallel pool (parpool) using the 'local' profile ... connected to 12 workers.
Analyzing and transferring files to the workers ...done.
Error using ParSVD (line 6)
Error detected on workers 2 6 9.
Error in run (line 96)
evalin('caller', [script ';']);
Caused by:
Error using ParSVD (line 6)
An UndefinedFunction error was thrown on the workers for 'svd'. This may
be because the file containing 'svd' is not accessible on the workers.
Specify the required files for this parallel pool using the command:
addAttachedFiles(pool, ...). See the documentation for parpool for more
details.
Undefined function 'svd' for input arguments of type 'char'.
Error using ParSVD (line 6)
An UndefinedFunction error was thrown on the workers for 'svd'. This may
be because the file containing 'svd' is not accessible on the workers.
Specify the required files for this parallel pool using the command:
addAttachedFiles(pool, ...). See the documentation for parpool for more
details.
Undefined function 'svd' for input arguments of type 'char'.
Error using ParSVD (line 6)
An UndefinedFunction error was thrown on the workers for 'svd'. This may
be because the file containing 'svd' is not accessible on the workers.
Specify the required files for this parallel pool using the command:
addAttachedFiles(pool, ...). See the documentation for parpool for more
details.
Undefined function 'svd' for input arguments of type 'char'.
I'm using R2015a 64-bit on a cluster.

Accepted Answer

Edric Ellis
Edric Ellis on 9 Oct 2015
Firstly, you should construct your distributed array directly on the workers to avoid building the large array at the client, like so:
D = rand(10000, 'distributed');
After this, your code should work correctly - I just tried pasting the following directly into the command window in R2015a:
D = rand(10000, 'distributed');
tic()
spmd
svd(D);
end
toc()
using 4 local workers, I got the result in 213 seconds.
It looks like you might be using the run function to run your script - there are sometimes problems using that with scripts containing spmd, so it might be worth avoiding that.
  2 Comments
Maximilian
Maximilian on 9 Oct 2015
Thanks a lot! I've tried
D = rand(10000, 'distributed');
but it gave me the same error as before. On my machine at home both versions work fine...
I don't have a GUI on the cluster, so I don't know of any other option to run a file.
Maximilian
Maximilian on 9 Oct 2015
Ok, I figured out what you meant by using run. If I don't use it, everything works perfectly!
Thank you very much!

Sign in to comment.

More Answers (0)

Categories

Find more on Parallel Computing Fundamentals in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!