The "@parallel for" works only with ranges  - only data that is in the for
body is copied. We should print a better error message though.

I cannot think of a way to have a distributed randperm that does not
involve copying other than using a SharedArray.

If it is not an issue copying only the specific parts of the distribution,
a DArray can also serve your purpose.

n=1000
x = randperm(n); y = randperm(n)

d=distribute(map(t->t, zip(x,y)))
# Only the specific localparts are copied to each of the workers
participating in the darray...


@sync begin
    for p in procs(d)
        @async begin
            remotecall_fetch(p,
                D -> begin
                    for t in localpart(D)
                        println(t)
                        # do any work on the localpart of the DArray
                    end
                end,
                d)
        end
    end
end









On Sun, Jan 26, 2014 at 11:54 PM, Madeleine Udell <[email protected]
> wrote:

> @parallel breaks when paralleling a loop over a Zip. Is there a workaround
> that allows me not to explicitly form the sequence I'm iterating over? I'd
> like to avoid copying (unnecessarily) the data from the sequences I'm
> zipping up.
>
> n = 1000
> x = randperm(n); y = randperm(n)
> @parallel for t in zip(x,y)
>     x,y = t
>     println(x,y)
> end
>
> exception on 1: ERROR: no method
> getindex(Zip2{Array{Int64,1},Array{Int64,1}}, Range1{Int64})
>  in anonymous at no file:1467
>  in anonymous at multi.jl:1278
>  in run_work_thunk at multi.jl:575
>  in run_work_thunk at multi.jl:584
>  in anonymous at task.jl:88
>

Reply via email to