Salve,Apro questo topic per chiedere un consiglio riguardante il seguente frammento di codice mpi:In pratica il funzionamento del programmino è il seguente:Ho 4 processi che eseguono tutti quanti un ciclo iterativo, ad ogni iterazione ogni processo genera un numero random; successivamente tramite la funzione Allreduce trasferisco in broadcast l'id del processo che ha generato il valore minimo (tramite l'operazione MPI_MINLOC); infine, tramite la funzione Bcast, il processo che ha generato il valore minimo deve passare "qualcosa" a tutti gli altri processi..(in questo caso il vettore x).La cosa che non riesco a capire è il fatto che se termino prima degli altri un processo (es dopo 20 iterazioni), tutti gli altri processi finiscono in deadlock..codice:#include #include #include #include #define PROC_MASTER 0typedef struct double_int{ double val; int proc_id;}double_int;int main(int argc, char **argv){ int n_proc, proc_id; double *x = (double *)malloc(10*sizeof(double)); MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &n_proc); MPI_Comm_rank(MPI_COMM_WORLD, &proc_id); double_int num; double_int num_min; srand(time(NULL)); int i; for(i = 0; i < 1000; i++){ if(i == 20 && proc_id == 2){ MPI_Finalize(); exit(EXIT_SUCCESS); } if(proc_id == PROC_MASTER){ num.val = rand()/(double)RAND_MAX; num.proc_id = proc_id; } else if(proc_id == 1){ num.val = rand()/(double)RAND_MAX; num.proc_id = proc_id; } else if(proc_id == 2){ num.val = rand()/(double)RAND_MAX; num.proc_id = proc_id; } else if(proc_id == 3){ num.val = rand()/(double)RAND_MAX; num.proc_id = proc_id; } MPI_Allreduce(&num, &num_min, 1, MPI_DOUBLE_INT, MPI_MINLOC, MPI_COMM_WORLD); if(proc_id == PROC_MASTER){ printf("iter %d: ricevuto f = %f dal processo %d\n", i, num_min.val, num_min.proc_id); } MPI_Bcast(x, 10, MPI_DOUBLE, num_min.proc_id, MPI_COMM_WORLD); } MPI_Finalize(); exit(EXIT_SUCCESS);}