PR lab 2

Programowanie rozproszone

Laboratorium 2

Cel

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

Kody źródłowe

#include <stdio.h>

#include "mpi.h"

int main(int argc, char **argv)

{

int rank,ranksent,size,source,dest,tag,i,len, position;

char name[20];

char buff[1000];

float dim[12], w, w1, w2, w3;

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)

{

position = 0;

for(i=0; i<3; i++)

scanf("%f %f %f %f",&dim[i*4], &dim[i*4+1], &dim[i*4+2], &dim[i*4+3]);

}

MPI_Bcast(&dim, 12, MPI_FLOAT, 0, MPI_COMM_WORLD);

if(rank == 5)

{

MPI_Recv(&w,1,MPI_FLOAT,1,MPI_ANY_TAG,MPI_COMM_WORLD,&status);

MPI_Recv(&w1,1,MPI_FLOAT,2,MPI_ANY_TAG,MPI_COMM_WORLD,&status);

MPI_Recv(&w2,1,MPI_FLOAT,3,MPI_ANY_TAG,MPI_COMM_WORLD,&status);

MPI_Recv(&w3,1,MPI_FLOAT,4,MPI_ANY_TAG,MPI_COMM_WORLD,&status);

if(w==0)

{ fprintf(stdout,"Wyznacznik glowny == 0!\n");

}

else

{

w1=w1/w;

w2=w2/w;

w3=w3/w;

fprintf(stdout,"x = %f\ny = %f\nz = %f\n\n",w1, w2, w3);

}

}

else if(rank>=1 && rank <=4)

{

switch(rank)

{

case 1: w=dim[1]*dim[6]*dim[8]+dim[0]*dim[5]*dim[10]+dim[2]*dim[4]*dim[9]

-dim[0]*dim[6]*dim[9]-dim[1]*dim[4]*dim[10]-dim[2]*dim[5]*dim[8]; break;

case 2: w=dim[1]*dim[6]*dim[11]+dim[3]*dim[5]*dim[10]+dim[2]*dim[7]*dim[9]

-dim[3]*dim[6]*dim[9]-dim[1]*dim[7]*dim[10]-dim[2]*dim[5]*dim[11]; break;

case 3: w=dim[3]*dim[6]*dim[8]+dim[0]*dim[7]*dim[10]+dim[2]*dim[4]*dim[11]

-dim[0]*dim[6]*dim[11]-dim[3]*dim[4]*dim[10]-dim[2]*dim[7]*dim[8]; break;

case 4: w=dim[1]*dim[7]*dim[8]+dim[0]*dim[5]*dim[11]+dim[3]*dim[4]*dim[9]

-dim[0]*dim[7]*dim[9]-dim[1]*dim[4]*dim[11]-dim[3]*dim[5]*dim[8]; break;

}

MPI_Send(&w,1,MPI_FLOAT,5,0,MPI_COMM_WORLD);

}

}

MPI_Finalize();

return(0);

}

  1. Przykłady działania

[ifa114@pc143o PR]$ mpirun -np 6 -hostfile hostfile lab3

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

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

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

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

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

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

2 3 -4 -1

3 -2 1 5

-1 3 2 -4

x = 1.000000

y = -1.000000

z = -0.000000

[ifa114@pc143o PR]$ mpirun -np 6 -hostfile hostfile lab3

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

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

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

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

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

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

1 2 3 4

5 6 7 8

9 10 11 12

Wyznacznik glowny == 0!

[ifa114@pc143o PR]$ mpirun -np 6 -hostfile hostfile lab3

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

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

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

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

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

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

1.5 2.5 6.6 7.3

7.7 3.3 4.5 8.8

3.5 -1.7 5.3 6.4

x = 0.528918

y = 0.182391

z = 0.916764

Wnioski

MPI pozwala na szybkie i łatwe programowanie aplikacji rozproszonych. Interfejs MPI umożliwia szybkie i w miarę bezproblemowe przesyłanie tak pojedynczych zmiennych, jak i całych macierzy pomiędzy procesami (hostami) danej aplikacji. 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.


Wyszukiwarka

Podobne podstrony:
PR lab 3
PR lab 4
PR lab 1
PR LAB Cw4 Kinematyka prędkości i przyśpieszeń
PR lab 5
PR lab 3
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