for-loop - Julia:具有大数据移动的并行 For 循环

标签 for-loop dictionary parallel-processing julia

我想运行一个并行的 for 循环。我需要我的每个进程都可以访问 2 个大字典 gene_dicttranscript_dict .这是我首先尝试的

@everywhere( function EM ... end )

generefs  = [ @spawnat i genes for i in 2:nprocs()]
dict1refs = [ @spawnat i gene_dict for i in 2:nprocs()]
dict2refs = [ @spawnat i transcript_dict for i in 2:nprocs()]

result = @parallel (vcat) for i in 1:length(genes)
  EM(genes[i], gene_dict, transcript_dict)
end

但我在所有进程(不仅仅是5)上都收到以下错误:
exception on 5: ERROR: genes not defined
 in anonymous at no file:1514
 in anonymous at multi.jl:1364
 in anonymous at multi.jl:820
 in run_work_thunk at multi.jl:593
 in run_work_thunk at multi.jl:602
 in anonymous at task.jl:6
UndefVarError(:genes)

我以为 @spawnat会将我需要的三个数据结构移动到所有进程中。我的第一个想法是这个 Action 可能需要一段时间,并且并行 for 循环会在数据传输完成之前尝试运行。

最佳答案

数据由 @spawnat 移动但它不绑定(bind)到与主节点上名称相同的变量。相反,数据保存在相当隐藏的 Dict 中。命名为 Base.PGRP在 worker 身上。要访问这些值,您必须 fetch RemoteRef s 在您的情况下将类似于
result = @parallel (vcat) for i in 1:length(genes) EM(fetch(genes[i]), fetch(gene_dict[i]), fetch(transcript_dict[i])) end

关于for-loop - Julia:具有大数据移动的并行 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659417/

相关文章:

C#字典,如何获取特定值

CPU周期的计算?

java:有哪些库可以管理/监控进程?

for-loop - for 循环中的多个绑定(bind)

Java 格式化以获取最后计数

每个函数中的 Javascript 新对象没有像我想象的那样工作

javascript - 将值从一个字典复制到javascript中的另一个字典

c++ - 在每次迭代后添加 for 循环的结果

javascript - 为什么 ES6 “get” 没有 “Set” 方法?

parallel-processing - 无状态系统和有状态系统之间有什么区别,它们如何影响并行性?