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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

michio
michio am 2 Sep. 2016

0 Stimmen

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 Kommentare

Zac Drake
Zac Drake am 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 am 7 Sep. 2016
Good to hear that you do not get errors anymore!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Gefragt:

am 1 Sep. 2016

Kommentiert:

am 7 Sep. 2016

Community Treasure Hunt

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

Start Hunting!

Translated by