将计算值保存在同一工作者中的工作者和工作者之间请求的任务中

时间:2018-01-23 16:57:21

标签: parallel-processing julia distributed-computing

我已经开始使用ParallelDataTransfer.jl库(https://github.com/ChrisRackauckas/ParallelDataTransfer.jl),它基于Julia: How to copy data to another processor in Julia中给出的解决方案,并且我遇到了几个问题,列在了如下:

1-如何使用自己的局部变量对worker进行计算?例如,让我们定义" x = pi"在进程2中使用" sendto(2,x = pi)",现在如何执行函数" sin(x)"在过程2中,将结果放在变量" y"哪个也住在过程2? (注意,当运行" @spawnat 2 y = sin(x)时,变量" y"不会出现在进程2的范围内,可以通过运行&#34来访问; @spawnat 2 whos()")

2-在第一个问题之后,是否有可能工人(比如说i)使用工人j自己的局部变量请求在另一个工人(比如说j)上执行一个函数,然后获取结果工人我?例如,在上面的例子中,如何处理3请求进程2来计算" sin(x)"在哪里" x"生活在过程2中,然后将结果发送到变量" z"谁住在过程3?

1 个答案:

答案 0 :(得分:0)

根据Keegan Lensink在Julia频道的建议,这些工作可以按如下方式进行:

1-

在流程2上定义x

sendto(2, x = pi)

评估2上的表达式,并将结果存储在Main

@fetchfrom 2 eval(Main, :(y = sin(x)))

通过询问y来检查它是否有效

@fetchfrom 2 y

2-

流程3要求2评估y = sin(x),然后在3个模块中将y分配给z

@spawnat 3 eval(Main, :(z = eval(:(@fetchfrom 2 eval(Main, :(y = sin(x)))))))

@fetchfrom 3 z