我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?

Posted

技术标签:

【中文标题】我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?【英文标题】:Can I send and receive data between workers while on a 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 命令吗?这是可以实现的吗?如果是这样,我怎么能做到这一点?谢谢!

【问题讨论】:

【参考方案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 作为一个整体并没有真正进行线程化,但它确实有一些结构允许类似线程的应用程序。然而,一般来说,它们非常复杂,而且没有真正的用处。

【讨论】:

以上是关于我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

高性能Matlab的并行计算之parfor

SPMD 与 Parfor

MATLAB R2014b 中的 MATLAB Coder 和 parfor

具有并行工具箱的 Matlab 独立应用程序(已部署应用程序中的 parfor 循环)

如何让MATLAB充分利用计算机资源进行计算

如何让两个嵌套的 Parfors 在 Matlab 中迭代两个巨大的数组?