我想知道在执行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命令吗?这可以实现吗?如果是这样,我怎么能实现这个目标?谢谢!
答案 0 :(得分:5)
您不能在parfor
内执行此操作,其中迭代必须是独立的。相反,请查看spmd
块,以及命令labSend
,labReceive
和labBroadcast
。
答案 1 :(得分:2)
parfor
个实例之间无法交换数据。这是使用parfor
来完成独立任务的一部分,这些任务是真正独立的。例如,没有任何保证人可以同时运行多少人。在某些计算机上,parfor
只允许1个实例,而在其他计算机上它可以允许4个同时运行,还有一个只允许4个实例运行。
Matlab作为一个整体并没有真正做线程,但它确实有一些允许类似线程的应用程序的结构。但是,一般来说,它们非常复杂,并不是很有用。