我很困惑如何从不同的工作人员声明程序的哪些部分是可访问的。在我的程序中相对较低的级别,我有一个for循环,我想并行化。
module module_name
[...]
addprocs(3)
totalsum = @parallel (+) for i in 1:large_number
tmp_sum = 0
for j in 1:num
... # calls f1 f2
end
tmp_sum # not sure how to 'return' the result, the examples have a conveniantly placed calculation at the end
end
rmprocs([2 3 4])
[...]
end
据我了解,我必须将@everywhere
装饰者放在f1
和f2
的前方。但该计划在很久以前就失败了,其他工作人员抱怨UndefVarError: module_name not defined
,我不知道如何解决这个问题。
我觉得我错过了设置并行处理所需的东西。正如我所理解的那样,除了编写实际的@parallel
部分之外,还需要添加proc,然后将@everywhere
装饰器添加到循环内使用的那些函数中。那是真的吗?
我知道pmap
更适合我在这里所做的事情,但我想让更简单的选项先工作(我需要传递几个参数pmap
函数)。< / p>