Error using arrayfun inside spmd function

I'm using spmd to run parallel instances of a function. Inside that function, I'm attempting to use arrayfun. When I run in serial, without spmd, it works fine but more slowly. When using the two features in combination I get this error:
Error detected on worker 3.
The class parallel.internal.types.Atomic has no Constant property or Static method name 'enumerate'.
Is this supported? I see on the linked page that spmd cannot contain par-for loops, but no mention of arrayfun. http://www.mathworks.com/help/distcomp/programming-tips_brukbnp-9.html#brukbnp-12

2 commentaires

michio
michio le 1 Sep 2016
Do you use arrayfun to run on GPU?
Zac Drake
Zac Drake le 1 Sep 2016
Yes, the data passed into arrayfun is on the GPU.

Connectez-vous pour commenter.

 Réponse acceptée

michio
michio le 2 Sep 2016
I believe use of arrayfun (GPU) within spmd itself is supported. Will the following script give an error on your environment?
fun = @(x,y)(x.*y);
spmd
%GPU run code from each worker
R1 = rand(labindex,5,'gpuArray');
R2 = rand(labindex,5,'gpuArray');
R = arrayfun(fun,R1,R2);
end
R
Could you share a sample script that allows us to reproduce the issue?

2 commentaires

Zac Drake
Zac Drake le 7 Sep 2016
Your sample code ran perfectly. I ran my code again and I'm no longer receiving the error. All I can think of is bad data in my workspace. Thank you for your help!
michio
michio le 7 Sep 2016
Good to hear that you do not get errors anymore!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by