spmd - tag result of computation and send to only one worker while avoid deadlocking

조회 수: 1 (최근 30일)
I am creating an array within a spmd bloc, and would like to tag the array as 'c' . I don't care which worker gets that array, but only care that I am tagging the result of the subtraction as 'c'. So for that I am using labSend with the 'c' tag. Is there some paradigmatic way to send to another worker (not itself, so as to avoid deadlock).
for c=1:10
spmd(100) % use 100 procs
A=rand(100,c); % create array within spmd bloc
B=A - rand(100,c); % subtract something.
labSend(B,labindex+1,c) % send to
end %spmd
end %c
Currently I am sending to the next worker over, but this isn't always going to work for a lot of reasons. I've seen in the documentation for labSendReceive that the source and destination is done as,
spmd
A = 2*labindex;
destination = 1 + mod((labindex + 1) - 1, numlabs);
source = 1 + mod((labindex - 1) - 1, numlabs);
A = labSendReceive(source, destination, A)
end
Is this somewhat arbitrary to define destination and source using the mod function (and serves the purpose of avoiding deadlocking?)
  댓글 수: 1
Edric Ellis
Edric Ellis 2022년 10월 11일
The lab* communication functions all require that both sender and receiver agree when a message is to be sent. In particular, labSend will sometimes not complete until the corresponding call to labReceive has started (this is generally the case for larger messages). The purpose of labSendReceive is to allow cyclic communication patterns where each worker wishes to send and receive at the same time (in general, trying to use separate labSend and labReceive calls for this will result in deadlock). The example code using mod to choose source and destination is common, but by no means required. An alternative pattern is to replace source or destination with [] to indicate no message, like this:
spmd
A = 2 * labindex;
destination = labindex + 1;
if destination > numlabs
destination = [];
end
source = labindex - 1;
if source < 1
source = [];
end
A = labSendReceive(source, destination, A);
end

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by