2

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 コマンドはありますか? これは達成可能ですか?もしそうなら、どうすればこれを達成できますか?ありがとう!

4

2 に答える 2

5

parfor反復が独立している必要がある内でこれを行うことはできません。代わりに、spmdブロック、コマンドlabSendlabReceiveおよび を見てくださいlabBroadcast

于 2012-12-11T07:03:49.883 に答える
2

parforインスタンス間でデータを交換することはできません。parforこれは、真に独立した個々のタスクを持つための の使用の一部です。たとえば、それらのうちのいくつが同時に実行されるかという保証はありません。一部のコンピューターでparforは、1 つのインスタンスのみが許可されます。他のコンピューターでは、同時に 4 つの実行が許可される場合があります。また、一度に 2 つのインスタンスしか実行できない場合もあります。

全体として、Matlab は実際にはスレッド化を行いませんが、スレッドのようなアプリケーションを可能にするいくつかの構造があります。ただし、一般に、それらは非常に複雑であり、あまり役に立ちません。

于 2012-12-11T01:56:15.140 に答える