Hi There,
I just want to confirm this is a desired behavior of map/pmap functions.
What I am noticing is that in case of using pmap functions need to return data 
(copy of input data),  whereas map works fine with referenced values. I'd love 
to have similiare behaviuor in pmap since  it is much lightweight especially 
when dealing with large datasets,  but the more I think about it, the more it 
makes sense to me that this is not going to happen due to the type of 
parallelism Julia supports at teh moment (massage passing).

Could please someone more competent verify if the code attached below is 
correct? What I was hoping for is to have a pmap working with the functions 
where data is passed around as a reference (no return statmentts). 
Unfortunately this is only true when using single threaded map() function.

I was wondering are there any alternatives at the moment? I know there is a 
Shareded array options but so far I did't have a chance to fully comprehended 
it. As far as I understand Distributed arrays will give me similar bottlneck as 
pmap where data has to be copied back into original container...?
Thanks, any feedback is much appreciated.

kuba

##################################################
addprocs(2)

@everywhere function testRef(elem)
   id = elem[1]
   d = elem[2]
   d[id]="___$id"
end


@everywhere function testCopy(elem)
   id = elem[1]
   d = elem[2]
   d[id]="___$id"
   return elem
end

ids = [[i,Dict()] for i=(1:3)]
pmap(testRef, ids)                     # pmap - Dictionary is empty
print("=== pmap ref:", ids)
map(testRef, ids)                      # map  - works as expected
print("=== map ref:", ids)
ids_copy = pmap(testCopy, ids)         # works - but creates a copy - slow
print("=== pmap copy:", ids_copy)


##################################################
Output:
=== pmap ref:1
 Dict{Any,Any}()
2 Dict{Any,Any}()
3 Dict{Any,Any}()
=== map ref:1
 {1=>"___1"}
2 {2=>"___2"}
3 {3=>"___3"}
=== pmap copy:1
{1=>"___1"}
2 {2=>"___2"}
3 {3=>"___3"}

Reply via email to