当前位置 : 主页 > 手机开发 > 无线 >

for-loop – Julia:Parallel For循环,具有大数据移动

来源:互联网 收集:自由互联 发布时间:2021-06-10
我想运行并行for循环.我需要每个进程都能访问2个大字典,gene_dict和transcript_dict.这是我先试过的 @everywhere( function EM ... end )generefs = [ @spawnat i genes for i in 2:nprocs()]dict1refs = [ @spawnat i gene_d
我想运行并行for循环.我需要每个进程都能访问2个大字典,gene_dict和transcript_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会将我需要的三个数据结构移动到所有进程中.我的第一个想法是,这个移动需要一段时间,并行for循环尝试在数据传输完成之前运行.

数据由@spawnat移动,但它不绑定到与主节点上的名称同名的变量.而是将数据保存在工人的名为Base.PGRP的相当隐藏的Dict中.要访问这些值,您必须获取RemoteRefs,在您的情况下,它将是类似的

结果= @parallel(vcat)for i in 1:length(genes)  EM(fetch(genes [i]),fetch(gene_dict [i]),fetch(transcript_dict [i]))结束

网友评论