/* * socio.c * * Created on: 02.07.2013 * Author: djordje */ #include "mpi.h" #include #include #include int main(int argc, char *argv[]) { int brPorodica; int brClanova; int prihodPorodice; double prosekDrzave; int brUgrozenihPorodica; int brUgrozenihPorodicaGlobal; int izGodBudzeta; double mesecnoIzBudzeta; double mesecnoIzBudzetaLocal; int plata; int plataUkupnoLocal; int plataUkupno; int mesec, iPor, iClan; FILE *fPlate, *fUgrozeni; int id; //Process rank int np; //Num of processes double elapsed_time; MPI_Status status; srand(time(NULL)); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &id); MPI_Comm_size(MPI_COMM_WORLD, &np); if(id == 0) { elapsed_time = - MPI_Wtime(); printf("Unesite broj porodica u drzavi: \n"); scanf("%d", &brPorodica);. fPlate = fopen("Plate.dat", "wt"); fUgrozeni = fopen("Ugrozeni.dat", "wt"); izGodBudzeta = 0; } MPI_Barrier(MPI_COMM_WORLD); MPI_Bcast(&brPorodica, 1, MPI_INT, 0, MPI_COMM_WORLD); prosekDrzave = 25; srand(1 + id * time(NULL)); for(mesec = 0; mesec < 12; mesec++ ) { mesecnoIzBudzetaLocal = 0; plataUkupnoLocal = 0; for(iPor = id; i < brPorodica; iPor += id) { brClanova = ((int)rand()) % 10 + 1; prihodPorodice = 0; for(iClan = 0; iClan < brClanova; iClan++) { plata = ((int)rand()) % 1001; prihodPorodice += plata; } if(prihodPorodice < prosekDrzave / 2) { brUgrozenihPorodica++; mesecnoIzBudzetaLocal += (5*brClanova); } plataUkupnoLocal += prihodPorodice; } MPI_Reduce(&plataUkupnoLocal, &plataUkupno, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&mesecnoIzBudzetaLocal, &mesecnoIzBudzeta, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&brUgrozenihPorodica, &brUgrozenihPorodicaGlobal, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if(id == 0) { mesecnoIzBudzeta += (prosekDrzave / 2); fprintf(fPlate, "%d\t%.2f hiljada dinara\n", mesec, mesecnoIzBudzeta); fprintf(fUgrozeni, "%d\t%d ugrozenih\n", mesec, brUgrozenihPorodicaGlobal); prosekDrzave = plataUkupno / brPorodica; izGodBudzeta += mesecnoIzBudzeta; } MPI_Bcast(&prosekDrzave, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } if(id == 0) { fprintf(fPlate, "Drzava treba da izdvoji %d hiljada dinara na drzavnom nivou!\n", izGodBudzeta); fclose(fPlate); fclose(fUgrozeni); elapsed_time += MPI_Wtime(); printf("Potroseno vreme je %f\n", elapsed_time); } MPI_Finalize(); return 0; }