【问题标题】:Can I send and receive data between workers while on a parfor (MATLAB)?我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?
【发布时间】:2012-11-28 09:48:42
【问题描述】:

我想知道在执行 parfor 时是否可以在节点之间交换(发送和接收)数据。我想要完成的是这样的:

parfor i = 1:4

    %Perform a computation on each column of a 4x4 matrix on 4 different workers (each worker takes one column).

    %Make Worker #1 send its data to Worker #3, Worker #3 to Worker #1, Worker #2 ro Worker #4 and Worker #4 to Worker #2.

    %Make other computations on the data received from the other workers

end

我想在不离开 parfor 的情况下执行所有这些计算。我可以使用任何 MPI 命令吗?这是可以实现的吗?如果是这样,我怎么能做到这一点?谢谢!

【问题讨论】:

    标签: multithreading matlab parallel-processing mpi parallel-for


    【解决方案1】:

    您不能在 parfor 内执行此操作,其中迭代必须是独立的。相反,请查看spmd 块以及命令labSendlabReceivelabBroadcast

    【讨论】:

    • 太棒了!那么我可以这样做吗?:spmd for i = 1:4 if(labindex == i) %Instructions mentioned on original post end end end
    • 我发现了如何做到这一点:spmd(4) %Instructions mentioned before end 我也使用了labSendlabReceive 感谢您的帮助!
    【解决方案2】:

    parfor 实例之间无法交换数据。这是使用parfor 的一部分,它拥有真正独立的个人任务。例如,无法保证其中有多少将同时运行。在某些计算机上,parfor 将只允许 1 个实例,在其他计算机上可能允许同时运行 4 个,还有一些则一次只能运行 2 个。

    Matlab 作为一个整体并没有真正进行线程化,但它确实有一些结构允许类似线程的应用程序。然而,一般来说,它们非常复杂,而且没有真正的用处。

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      相关资源
      最近更新 更多