@spawnat(2,whos()) is useful to know what's defined in other processes 
(e.g. for process 2 in this case)

if you want to gather the return values, use a reducer function
e.g.
let a = rand()
  @parallel hcat for x in 1:3
    foo(a,x)
  end
end

trying to remember the other approach which I thought I got working rather 
than copying it over each run.

One other thing is that requiring a file after adding the processes should 
load it on all processes which is another approach to setting up the 
environment for each process




On Monday, September 15, 2014 3:51:43 PM UTC+1, John Drummond wrote:
>
> with parallel 
>
> addprocs(2)
> println("Number of processors", nprocs())
> @everywhere function foo(x,y)
>     println(myid()," ", x, " ", y)
>     return x + y
> end
> let a = rand()
>   @sync @parallel for x in 1:3
>     foo(a,x)
>   end
> end
>
> On Monday, September 15, 2014 3:14:50 PM UTC+1, xiong...@gmail.com wrote:
>>
>> "you could precreate A and then define it everywhere"
>> Could you please show me some code how to do it?
>>
>> On Monday, September 15, 2014 2:51:08 PM UTC+2, John Drummond wrote:
>>>
>>> Chris Strickland 
>>> <https://groups.google.com/forum/#!msg/julia-users/jlKoEtErRL4/0ZcB_hxyJlYJ>
>>>  
>>> lists one approach for the general problem
>>>
>>> you could precreate A and then define it everywhere, or send a copy over 
>>> as a parameter to whatever function you use in pmap, similar but not the 
>>> same as above
>>>
>>> Another approach which was useful to me was the @parallel for loops
>>> "Any variables used inside the parallel loop will be copied and 
>>> broadcast to each process." 
>>> <http://julia.readthedocs.org/en/latest/manual/parallel-computing/>
>>>
>>> and shared arrays 
>>> <http://julia.readthedocs.org/en/latest/manual/parallel-computing/#shared-arrays-experimental-unix-only-feature>
>>>  
>>> if using linux could be useful (I've not tried them).
>>>
>>>
>>>
>>> On Monday, September 15, 2014 10:52:33 AM UTC+1, xiong...@gmail.com 
>>> wrote:
>>>>
>>>> I want to transfer a variable to all parallel workers. However, if I do:
>>>>
>>>> A=rand()
>>>> pmap(x->A+x,1:3)
>>>>
>>>> Return error:
>>>> exception on 2: ERROR: A not defined
>>>>  in anonymous at none:1
>>>>  in anonymous at multi.jl:855
>>>>  in run_work_thunk at multi.jl:621
>>>>  in anonymous at task.jl:855
>>>> exception on 3: ERROR: A not defined
>>>>  in anonymous at none:1
>>>>  in anonymous at multi.jl:855
>>>>  in run_work_thunk at multi.jl:621
>>>>  in anonymous at task.jl:855
>>>> 2-element Array{Any,1}:
>>>>  UndefVarError(:A)
>>>>  UndefVarError(:A)
>>>>
>>>> The result of
>>>> @everywhere A=rand()
>>>> pmap(x->A+x,1:3)
>>>> is not what I want, since I hope A in all mashines are the same. 
>>>>
>>>> I know that pmap((x,y)->x+y,1:3,fill(A,3)) will be work, but I don't 
>>>> think it is smart since A is expand in memery unnessarily. Is there any 
>>>> simple way to just send a copy of A, or the reference of A, to all 
>>>> parallel 
>>>> mashines?
>>>>
>>>

Reply via email to