You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@everywhere struct SS1
v::Vector{Float64}
m::Vector{Float64}
end
dSS=@DArray [SS1(rand(10),i*ones(10)) for i in 1:10]
dSS2=@DArray [SS1(rand(10^6),i*ones(10)) for i in 1:10];
@time dSS[2].m
@time dSS2[2].m;
0.004819 seconds (81 allocations: 4.094 KiB)
0.005085 seconds (210 allocations: 7.634 MiB)
As you see, the whole struct gets serialized (7 mb) and then v (small vector) can be accessed. Is there a way to implement this so that dS[2].v is sent without the whole struct.
Put in another way, is there a generic way to have dS[i].m mean something like getm(dS,i) where:
@everywhere function getm(dS,i)
indi=DistributedArrays.locate(dS,i)
pidi=procs(dS)[indi...]
lindi=i-dS.cuts[1][indi...]+1
@fetchfrom pidi dS[:L][lindi].m
end
Is this possible? Is it a reasonable feature to ask for :)?
Thanks!
The text was updated successfully, but these errors were encountered:
raminammour
changed the title
Serialization of distributed structs
Transfer of distributed structs when members are accessed
May 9, 2019
dSS[2].m gets lowered to getproperty(dSS[2], :m), where the first argument is necessarily fetched before evaluation. Perhaps there could be a macro that could evaluate an expression on the host and return the result? Eg. @fetchfromhost dSS[2].m that would wrap the expression in something like getm.
Hello,
Consider the following example:
As you see, the whole struct gets serialized (7 mb) and then
v
(small vector) can be accessed. Is there a way to implement this so thatdS[2].v
is sent without the wholestruct
.Put in another way, is there a generic way to have
dS[i].m
mean something likegetm(dS,i)
where:Is this possible? Is it a reasonable feature to ask for :)?
Thanks!
The text was updated successfully, but these errors were encountered: