【问题标题】:Julia - Transferring data between workersJulia - 在工作人员之间传输数据
【发布时间】:2018-06-28 03:28:36
【问题描述】:

假设我们在 Julia 中定义了两个工人。我想知道是否可以将在工作人员 3 中计算的数据直接发送到工作人员 2,而无需在主进程中获取数据并将其发送给工作人员 2,然后?一般来说,使用 Julia 中现有的并行工具,即@spawn、fetch 等,是否有可能一个工作人员从不同工作人员那里获取数据(消息)并使用它们来为另一个工作人员计算消息?

注意:我知道有一个 MPI 包装器可能与这个问题更兼容,但是我仍然想知道这是否可以使用 Julia 中现有的并行工具来完成?换句话说,当他们说 Julia 中的消息传递是“片面的”时,是不是意味着在 worker 之间传输数据是不可行的?

【问题讨论】:

    标签: parallel-processing julia distributed-computing


    【解决方案1】:

    使用ParallelDataTransfer.jl,就可以了

    # Get an object from named x from Main module on process 2. Name it y
    y = @getfrom 2 x
    

    更多示例请参见自述文件。

    【讨论】:

    • 感谢您的回答。我开始使用提到的包,但是我仍然有一些问题: 1- 如何使用自己的局部变量对工作人员执行计算?例如,让我们使用“sendto(2,x=pi)”在进程 2 上定义“x=pi”,现在如何在进程 2 上执行函数“sin(x)”并将结果放入变量“y”中也存在于进程 2 中?
    • 使用spawnat 或其他并行调用。
    • 2- 在问题 1 之后,是否有可能一个工作人员(比如 i)请求在另一个工作人员(比如 j)上执行一个函数,使用工作人员 j 自己的局部变量,然后获取结果工人我?例如在上面的例子中,进程 3 如何请求进程 2 计算 "x" 位于进程 2 中的 "sin(x)",然后将结果发送到进程 3 中的变量 "z"?
    • 如果您想通过示例得到一个很好的解释,您会想问另一个问题。
    • 重点是使用“@spawnat 2 y=sin(x)”或“y=@spawnat 2 sin(x)”中的任何一个都不会将结果放入假定的变量“y”中生活在进程 2 中。这可以通过运行没有出现变量“y”的“@spawnat 2 whos()”来看到。
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多