Io ho questi 5 processi, ciascuno dei quali, per semplicità, ha un carattere, quello che vorrei ottenere è la stringa filane, contenente tutti i caratteri di ciascun processo, in ordine “ABCDE”.
Poichè il numero di processi è dispari, le iterazioni dovrebbero essere le seguenti:
iterazione 0:
// processi 3 e 4
MPI_Send(E, 3);
MPI_Recv(E, 4);
merge(D, E)
// processi 1 e 2
MPI_Send(C, 1)
MPI_Recv(C, 2);
merge(B, C)
iterazione 1:
// processi 1 e 3
MPI_Send(DE, 1);
MPI_Recv(DE, 3);
merge(BC, DE);
iterazione 2:
// processi 0 e 1
MPI_Send(BCDE, 0);
MPI_Recv(BCDE, 1);
merge(A, BCDE);
L'iterazione 0 è abbastanza facile, basta guardare se il numero di processi è divisibile per 2.
Ma dall'iterazione 1 in poi non so come calcolare:
- chi deve spedire a chi deve spedire;
- chi deve ricevere da chi deve ricevere.