У меня N
процессы MPI.Каждый процесс должен отправить некоторым другим процессам массивы данных (целые числа).Массивы для отправки имеют разные размеры.Все процессы знают / от кого отправлять / получать и сколько.
Например, существуют N=4
процессы MPI (P).
P0 sends: 2 ints to P1, 5 ints to P2, 6 ints to P3
P1 sends: 3 ints to P2, 4 ints to P3
P2 sends: nothing, only receives.
P3 sends: 3 ints to P1
Каков наилучший способорганизовать такой обмен данными?
Я думаю об этом:
Пусть C(S,D)
обозначает количество данных, которые будут отправлены из процесса S
в процесс D
.
On each process P:
1. For R = 0 ... N-1
{
if C(R,P) > 0
call MPI_Irecv( source = R, count = C(R,P), ... )
}
2. For R = 0 ... N-1
{
if C(P,R) > 0
call MPI_Send( destination = R, count = C(R,P), ... )
}
3. MPI_Waitall for requests created in Step 1.
Есть ли лучший подход?Этот обмен происходит только один раз во время выполнения.