// mpiDeadlock #include "mpi.h" #include #include void main(int argc, char *argv[]) { int rank; int size; int* data; // Datenmenge aus Aufrufparameter: size = argc>1?atoi(argv[1]):100; fprintf(stdout, "Bestellte Groesse: %d\n", size); if (size < 2) exit(1); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); data = (int*) malloc(size*sizeof(int)); // Speicher reservieren memset(data, rank % 256, size*sizeof(int)); // daten fuellen // sende und empfange Daten vom Nachbarn // (Nachbar: letztes Bit des Rangs invertiert) fprintf(stdout, "Sende\n"); MPI_Send(data,size,MPI_INT, rank ^ 1, 0, MPI_COMM_WORLD); fprintf(stdout, "Empfange\n"); MPI_Recv(data,size,MPI_INT, rank ^ 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); fprintf(stdout, "Erhalten: %x\n", data[1]); free(data); MPI_Finalize(); }