首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia:在表达式中使用分布式数组

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

Stack Overflow用户
提问于 2015-03-10 16:46:07
回答 1查看 419关注 0票数 4

我正在尝试在不同的进程中产生和计算表达式。表达式包含分布式数组的局部部分,这似乎会产生问题。例如,

代码语言:javascript
复制
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))

不出所料,

代码语言:javascript
复制
Out [ ]: 15

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

代码语言:javascript
复制
# 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(),它在计算表达式时无法识别。我说的对吗?有没有办法绕过这个问题?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-11-15 01:55:19

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

看看这个:

代码语言:javascript
复制
addprocs(2)
foo = @spawnat 2 quote
  myid()
end
eval(fetch(foo)) # => 1

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

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28959341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档