PR lab 3

Programowanie rozproszone

Laboratorium 3

Cel

Celem laboratorium było udoskonalenie zdolności w obsłudze MPI i przesyłaniu za jego pomocą komunikatów

Kod źródłowy

#include <stdio.h>

#include <math.h>

#include "mpi.h"

int main(int argc, char **argv)

{

int rank,ranksent,size,source,dest,tag,i,len, pcs, max;

char name[20];

char buff[1000];

float res,total;

int zmienna;

len=20;

MPI_Status status;

MPI_Init(&argc,&argv); // inicjacja wartości

MPI_Comm_rank(MPI_COMM_WORLD,&rank); // ranga procesów od 0+

MPI_Comm_size(MPI_COMM_WORLD,&size); // liczba procesów

MPI_Get_processor_name(name,&len); // zwraca nazwe hosta na którym wykonywany jest dany proces

fprintf(stdout,"Aktywny proces %d - %s\n", rank, name);

tag=0;

dest=rank+1;

if(rank ==0)

{

scanf("%d", &pcs);

}

MPI_Bcast(&pcs, 1, MPI_INT, 0, MPI_COMM_WORLD);

if(rank != 0)

{

max = (int)floor(pcs / (size-2));

res=0;

if(rank==size-1)

{

i=max*(size-2);

max=pcs;

}

else

{

i=(rank-1)*max;

max*=rank;

}

fprintf(stdout,"%2d:\t%8d - %8d\n",rank,i,max);

while(i < max)

{

if(i%2==0)

res+=(float)1/(2*i+1);

else

res-=(float)1/(2*i+1);

i++;

}

MPI_Send(&res,1,MPI_FLOAT,0,0,MPI_COMM_WORLD);

}

else

{

total=0;

for(i=1;i<size;i++)

{

MPI_Recv(&res,1,MPI_FLOAT,i,MPI_ANY_TAG,MPI_COMM_WORLD,&status);

total+=res;

}

fprintf(stdout,"PI = %f\n",4*total);

}

MPI_Finalize();

return(0);

}

Przykłady działania

[ifa114@pc143o PR]$ mpirun -hostfile hostfile -np 7 lab4

Aktywny proces 0 - pc143b.uck.pk.edu.pl

Aktywny proces 1 - pc143c.uck.pk.edu.pl

Aktywny proces 4 - pc143b.uck.pk.edu.pl

Aktywny proces 6 - pc143o.uck.pk.edu.pl

Aktywny proces 2 - pc143o.uck.pk.edu.pl

Aktywny proces 3 - pc143p.uck.pk.edu.pl

Aktywny proces 5 - pc143c.uck.pk.edu.pl

1000000000

2: 200000000 - 400000000

6: 1000000000 - 1000000000

5: 800000000 - 1000000000

1: 0 - 200000000

3: 400000000 - 600000000

4: 600000000 - 800000000

PI = 3.141597

[ifa114@pc143o PR]$ mpirun -hostfile hostfile -np 7 lab4

Aktywny proces 0 - pc143b.uck.pk.edu.pl

Aktywny proces 4 - pc143b.uck.pk.edu.pl

Aktywny proces 3 - pc143p.uck.pk.edu.pl

Aktywny proces 6 - pc143o.uck.pk.edu.pl

Aktywny proces 2 - pc143o.uck.pk.edu.pl

Aktywny proces 1 - pc143c.uck.pk.edu.pl

Aktywny proces 5 - pc143c.uck.pk.edu.pl

6753

2: 1350 - 2700

6: 6750 - 6753

1: 0 - 1350

3: 2700 - 4050

5: 5400 - 6750

4: 4050 - 5400

PI = 3.141738

[ifa114@pc143o PR]$ mpirun -hostfile hostfile -np 7 lab4

Aktywny proces 2 - pc143o.uck.pk.edu.pl

Aktywny proces 1 - pc143c.uck.pk.edu.pl

Aktywny proces 0 - pc143b.uck.pk.edu.pl

Aktywny proces 4 - pc143b.uck.pk.edu.pl

Aktywny proces 6 - pc143o.uck.pk.edu.pl

Aktywny proces 5 - pc143c.uck.pk.edu.pl

Aktywny proces 3 - pc143p.uck.pk.edu.pl

123

2: 24 - 48

6: 120 - 123

5: 96 - 120

1: 0 - 24

3: 48 - 72

4: 72 - 96

PI = 3.149723

Wnioski

Stworzony program jak widać bazuje na doświadczeniach i wiedzy zdobytej podczas wcześniejszych laboratoriów. Powyższy program dodatkowo uświadamia nam jak bardzo przydatnym może być programowanie aplikacji czy całych systemów rozproszonych, gdyż zamiast obciążać pojedynczą maszynę, możemy rozbić zadania o większej złożoności obliczeniowej na większą liczbę maszyn. Postępowanie takie rekompensuje nieraz nawet użycie mniej wydajnych algorytmów, gdyż nasza aplikacja ma dostęp do zdecydowanie większej liczby zasobów. W programie tym dzielę liczbę wyliczanych elementów szeregu równo pomiędzy procesy z rangą > 0. Procesy te po wyliczeniu zwracają wyniki do procesu z rangą==0, który to sumuje wyniki cząstkowe i zwraca przybliżoną wartość liczby PI, której wartość w zależności od ilości elementów ciągu bardziej lub mniej pokrywa się z prawdziwą wartością liczby PI.


Wyszukiwarka

Podobne podstrony:
PR lab 4
PR lab 1
PR lab 2
PR LAB Cw4 Kinematyka prędkości i przyśpieszeń
PR lab 5
PR LAB Cw4 Kinematyka prędkości i przyśpieszeń
Pr 1st 1 1 m01 lab id 382178 Nieznany
gri2 lab cwiczenia z podstaw pr Nieznany
[PKC][LAB][Ostatnia laborka][Pr Nieznany
statyczna pr rozcia, Budownictwo pcz, referaty wytrzymka lab
Lab 1 wyznaczanie pr śr
Pr 1st 1 1 m12 lab
spis lab I sem 2010
PR CYW PR ROP WYKLAD 26
Stany nagle w położnictwie PR
Pr UE Zródła prawa (IV 2013)
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
PR CYW PR ROP WYKLAD 28

więcej podobnych podstron