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

En savoir plus sur Parallel Computing dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by