gpt4 book ai didi

arrays - Julia:在表达式中使用分布式数组

转载 作者:行者123 更新时间:2023-12-02 11:44:58 25 4
gpt4 key购买 nike

我正在尝试在不同的进程中生成和评估表达式。这些表达式包含分布式数组的本地部分,这似乎会产生问题。例如,

addprocs(2)
x = [i for i = 1:10]
foo = @spawnat 2 quote
out = x[1]
for i = 2:5
out += x[i]
end
out
end
eval(fetch(foo))

正如预期的那样,

Out [ ]: 15

但是,如果我尝试用分布式数组 dx 替换向量 x 并仅在表达式中使用本地 block ,则会收到以下错误。

# Construct a distributed array dx = [1,2,3,4,5,6,7,8,9,10] # 
dx = DArray(I->[i for i in I[1]], (10, ))
dfoo = @spawnat 2 quote
out = localpart(dx)[1]
for i = 2:5
out += localpart(dx)[i]
end
out
end
eval(fetch(dfoo))


Out []: ERROR: BoundsError()
while loading In[9], in expression starting on line 9

in getindex at array.jl:246
in anonymous at In[9]:2

我感觉问题是 localpart() 在计算表达式时无法识别。我对吗?有办法解决这个问题吗?

谢谢

最佳答案

这里是在 2 处生成的 quote 函数,而不是计算本身。这就像对 spawnat 宏的误用。

看看这个:

addprocs(2)
foo = @spawnat 2 quote
myid()
end
eval(fetch(foo)) # => 1

并计算分布式数组的总和:(与@spawnat无关)

# Construct a distributed array dx = [1,2,3,4,5,6,7,8,9,10] # 
dx = DArray(I->[i for i in I[1]], (10, ))
dfoo = @spawnat 2 quote
sum(localpart(dx))
end
eval(fetch(dfoo))==sum(localpart(dx)) # => true

关于arrays - Julia:在表达式中使用分布式数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28959341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com