Salve a tutti stavo facendo questo esercizio in C usando MPI, la traccia è la seguente:
La mia implementazione al momento è questa:
Non ho ancora inserito la logica della soglia ma ho dubbi più che altro sull'implementazione della logica ring, cioè il processo p-1 dovrebbe ritornare da capo inviando al processo 0.. come si potrebbe implementare? Grazie in anticipo
La mia implementazione al momento è questa:
C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "mpi.h"
#include <math.h>
int main(int argc, char* argv[]){
int p, rank, size;
int valore = 10;
int soglia = 20;
int conteggio;
MPI_Status status;
MPI_Request req;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
for(int i= 0; i<10; i++){
if(rank == 0){
MPI_Isend(&valore, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD, &req);
printf("rank 0 inviato valore\n");
MPI_Irecv(&valore, 1, MPI_INT, p-1, 0, MPI_COMM_WORLD, &req);
printf("rank 0 ricevuto valore\n");
valore = valore + rand()%100;
}else{
if(rank == p-1){
MPI_Isend(&valore, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &req);
printf("rank atteso %d reale %d inviato\n", p-1, rank);
MPI_Irecv(&valore, 1, MPI_INT, rank-1, 0, MPI_COMM_WORLD, &req);
printf("rank atteso %d reale %d ricevuto!\n", p-1, rank);
valore = valore + rand()%100;
}else{
MPI_Isend(&valore, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD, &req);
printf("rank %d inviato\n", rank);
MPI_Irecv(&valore, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, &req);
printf("rank %d inviato\n", rank);
valore = valore + rand()%100;
}
}
}
printf("Totale %d\n", conteggio);
}
Non ho ancora inserito la logica della soglia ma ho dubbi più che altro sull'implementazione della logica ring, cioè il processo p-1 dovrebbe ritornare da capo inviando al processo 0.. come si potrebbe implementare? Grazie in anticipo