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

时间:2012-12-10 22:10:09

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

我想知道在执行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命令吗?这可以实现吗?如果是这样,我怎么能实现这个目标?谢谢!

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

Matlab作为一个整体并没有真正做线程,但它确实有一些允许类似线程的应用程序的结构。但是,一般来说,它们非常复杂,并不是很有用。