我可以在 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
块以及命令labSend
、labReceive
和labBroadcast
。
【讨论】:
太棒了!那么我可以这样做吗?:spmd for i = 1:4 if(labindex == i) %Instructions mentioned on original post end end end
我发现了如何做到这一点:spmd(4) %Instructions mentioned before end
我也使用了labSend
和labReceive
感谢您的帮助!【参考方案2】:
parfor
实例之间无法交换数据。这是使用parfor
的一部分,它拥有真正独立的个人任务。例如,无法保证其中有多少将同时运行。在某些计算机上,parfor
将只允许 1 个实例,在其他计算机上可能允许同时运行 4 个,还有一些则一次只能运行 2 个。
Matlab 作为一个整体并没有真正进行线程化,但它确实有一些结构允许类似线程的应用程序。然而,一般来说,它们非常复杂,而且没有真正的用处。
【讨论】:
以上是关于我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB R2014b 中的 MATLAB Coder 和 parfor