I'm trying to use parallelism in julia for a task with a structure that I 
think is quite pervasive. It looks like this:

# broadcast lists of functions f and g to all processes so they're 
available everywhere
# create shared arrays X,Y on all processes so they're available everywhere
for iteration=1:1000
@parallel for i=1:size(X)
X[i] = f[i](Y)
end
@parallel for j=1:size(Y)
Y[j] = g[j](X)
end
end

I'm having trouble making this work, and I'm not sure where to dig around 
to find a solution. Here are the difficulties I've encountered:

* @parallel doesn't allow me to create persistent variables on each 
process; ie, the following results in an error.

        s = Base.shmem_rand(12,3)
@parallel for i=1:nprocs() m,n = size(s) end
@parallel for i=1:nprocs() println(m) end

* @everywhere does allow me to create persistent variables on each process, 
but doesn't send any data at all, including the variables I need in order 
to define new variables. Eg the following is an error: s is a shared array, 
but the variable (ie pointer to) s is apparently not shared.
s = Base.shmem_rand(12,3)
@everywhere m,n = size(s)

Here are the kinds of questions I'd like to see protocode for:
* How can I broadcast a variable so that it is available and persistent on 
every process?
* How can I create a reference to the same shared array "s" that is 
accessible from every process? 
* How can I send a command to be performed in parallel, specifying which 
variables should be sent to the relevant processes and which should be 
looked up in the local namespace?

Note that everything I ask above is not specific to shared arrays; the same 
constructs would also be extremely useful in the distributed case.

----------------------

An interesting partial solution is the following:
funcs! = Function[x->x[:] = x+k for k=1:3]
d = drand(3,12)
let funcs! = funcs!
  @sync @parallel for k in 1:3
    funcs![myid()-1](localpart(d))
  end
end

Here, I'm not sure why the let statement is necessary to send funcs!, since 
d is sent automatically.

---------------------

Thanks!
Madeleine

Reply via email to