【问题标题】:Saving the computed value in a worker within the same worker and task requesting between workers将计算值保存在同一工作人员内的工作人员中,并在工作人员之间进行任务请求
【发布时间】:2018-01-25 16:44:57
【问题描述】:

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

1- 如何使用自己的局部变量对工作人员执行计算?例如,让我们使用“sendto(2,x=pi)”在进程 2 上定义“x=pi”,现在如何在进程 2 上执行函数“sin(x)”并将结果放入变量“y”中也生活在进程 2 中? (注意当运行“@spawnat 2 y=sin(x)”时,变量“y”不会出现在进程2的范围内,可以通过运行“@spawnat 2 whos()”来访问)

2- 在第一个问题之后,是否有可能一个工作人员(比如 i)使用工作人员 j 自己的局部变量请求要在另一个工作人员(比如 j)上执行的函数,然后在工作人员 i 上获取结果?比如上面的例子,进程 3 如何请求进程 2 计算 x 位于进程 2 中的 sin(x) ,然后将结果发送到进程 3 中的变量 z ?

【问题讨论】:

    标签: parallel-processing julia distributed-computing


    【解决方案1】:

    根据 Keegan Lensink 在 Julia Channel 中的建议,这些工作可以如下完成:

    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 的模块 Main 中将 y 分配给 z

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

    @fetchfrom 3 z

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2012-06-19
      相关资源
      最近更新 更多