For loop 朱莉娅:大数据移动的并行For循环
我想运行并行for循环。我需要我的每个进程都能访问两个大型词典,For loop 朱莉娅:大数据移动的并行For循环,for-loop,dictionary,parallel-processing,julia,For Loop,Dictionary,Parallel Processing,Julia,我想运行并行for循环。我需要我的每个进程都能访问两个大型词典,gene\u dict和transcript\u 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 transcrip
gene\u dict
和transcript\u 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个进程上):
我认为
@spawnat
会将我需要的三个数据结构移动到所有进程中。我的第一个想法是,这个动作可能需要一段时间,并行for循环试图在数据传输完成之前运行 数据由@spawnat
移动,但它没有绑定到与主节点上的名称相同的变量。相反,数据保存在workers上相当隐藏的名为Base.PGRP
的Dict
中。要访问这些值,您必须fetch
RemoteRefs,在您的情况下,它类似于
结果=@parallel(vcat)表示1中的i:长度(基因)
EM(fetch(基因[i]),fetch(基因[i]),fetch(转录本[i]))
结束
当我在互动julia会话中工作时,您的解决方案非常有效。但当我试图从控制台调用我的julia脚本时,我仍然得到了我提到的错误。你知道为什么会这样吗?我不明白为什么会有不同。如果从一个交互式julia会话运行脚本时使用include(“stript.jl”)
,会发生什么情况?你能给出一个可复制的小例子吗?我已经在github的julia issues中发布了一些dropbox共享代码:警告vcat速度非常慢。改用类似sharedarray的东西。
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)