background image

Programowanie równoległe i współbieżne 

Ćwiczenie:  

Ćwiczenie 9

 

Data oddania: 

23.5.2013 

Imię, Nazwisko: 

Dawid Misiniec

 

Ocena: 

Uwagi: 
 

 
 

1. 

Cel ćwiczenia 

 

Celem  ćwiczenia  było  wykonanie  programu,  który  tworzy  nowy  typ  zmiennych,  bazując  na 

istniejącym  juz  typie  double.  Nowy  typ  miał  zawierać  n  liczb  typu  double,  gdzie  n  określał  również 
wielkość tablicy a.

 

2. 

Przebieg ćwiczenia 

Poniżej przedstawiony jest kod źródłowy zawarty w utworzonym programie: 

 
int main( int argc, char *argv[] ) 

 
int rank; 
int size; 
int tag = 1; 
const int n=5; 
 
MPI_Init( 0, 0 ); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank);  
MPI_Comm_size(MPI_COMM_WORLD, &size);   
MPI_Datatype typ; 
MPI_Type_contiguous (n, MPI_DOUBLE, &typ); 
MPI_Type_commit(&typ); 
MPI_Status stat; 
double a[n]; 
if (rank == 0) 

    for(int i=0; i<n;i++) 
    { 
        a[i]=i; 
    } 
    cout << "proces o randze: " <<rank ; 
    for(int i=0; i<n; i++) cout<< " a["<<i<<"]="<<a[i]<<" "; 
    cout <<endl; 
    for(int i=1;i<size;i++) 
        MPI_Send(&a[i], 1, typ, i, tag, MPI_COMM_WORLD); 
}else{ 
    MPI_Recv(&a, 1, typ, 0, tag, MPI_COMM_WORLD,&stat); 
    cout << "proces o randze: " <<rank ; 
    for(int i=0; i<n; i++) cout<< " a["<<i<<"]="<<a[i]<<" "; 
    cout <<endl; 

MPI_Finalize(); 
return 0; 

background image

1)  Program po kolei deklaruje wszystkie zmienne (rank - numer aktualnego procesu, 

size - 

ilość wszystkich procesów, tag, n - stała odpowiadająca za wielkość 

tablicy/wektora a).  

2)  Rozpoczy

na działanie programu, jako programu wieloprocesowego.  

3)  Inicjuje 

komunikator, którym zapisuje ilość i rangę procesów do poszczególnych 

zmiennych.  

4) 

N

astępnie deklaruje nowy typ zmiennych o nazwie typ. 

 

5) 

Za 

pomocą funkcji MPI_Type_contiguous, ustala, że nowy typ zmiennych o nazwie 

typ, będzie przechowywał n zmiennych typu MPI_DOUBLE.

 

6) 

MPI_Type_commit powoduje zatwierdzenie nowego typu zmiennych o nazwie typ.

 

7) 

Następnie do zmiennej o nazwie stat, zapisywany jest status komunikatu 
(wysłany/odebrany).

 

8) 

Deklaracja tablicy/wektora typu double o n elementach.

 

9) 

Sprawdzenie warunku: jeśli proces, jest procesem 0ym, musi wypełnić tablicę a 
kolejnymi liczbami typu int od 0 do n-

1, a następnie wypisać tą tablicę.

 

10) 

Zerowy proces wysyła fragment tablicy a zmniejszonej o 1 do każdego kolejnego 
procesu.

 

11) 

Jeśli warunek z 9) nie jest spełniony (proces jest procesem innym niż 0wy), następuje 
odebranie przesyłanego komunikatu, oraz wypisanie tablicy, która została odebrana.

 

12) 

Finalizacja działa programu wieloprocesowego.

 

13) 

Program zwraca 0.

 

 

3.  Wnioski 

 

Możliwe jest stworzenie nowego typu zmiennych, bazując na istniejącym typie. 

 

Można wykonywać normalne operacje na typie pochodnym, tak samo jak na 
typie pierwotnym. 

 

Stworzenie nowego typu, który jest typem pochodnym do istniejącego, może 
skrócić ilość linijek kodu, oraz czas jego wykonywania.