#include "mpi.h" /* dolacza plik naglowkowy potrzebny dla biblioteki MPI */ #include /* potrzebny dla funkcji 'fprintf()' */ #include int main(int argc, char **argv) { int i, myid, namelen, size; char computer_name[512]; /* nazwa komputera na ktorym */ struct {int max; int loc;} snd, rec; MPI_Status status; MPI_Init(&argc, &argv); /* inicjalizuje srodowisko MPI */ /* pobiera identyfikator biezacego procesu */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &size); /* Pobiera nazwe komputera na ktorym proces sie wykonuje */ MPI_Get_processor_name(computer_name, &namelen); srandom(time(NULL)*(myid+1)); snd.max = random()%100; snd.loc = myid; fprintf(stderr, "Proces %d na %s licytuje: %d\n", myid, computer_name, snd.max); //pierwsza redukcja okresli najwieksza wartosc MPI_Allreduce(&snd, &rec, 1, MPI_2INT, MPI_MAXLOC, MPI_COMM_WORLD); if (myid == rec.loc) { printf("Najwieksza wartosc %d w proc. %d\n", rec.max, rec.loc); snd.max=0; } //tutaj druga redukcja w celu okreslenia drugiej najwiekszej wartosci // MPI_Reduce(); if (myid == rec.loc) { printf("Zwyciezca to: %d wylicytowal za: %d\n", rec.loc, rec.max+1); } /* konczy dzialanie srodowiska MPI */ MPI_Finalize(); return 0; }