 
Programowanie równoległe i współbieżne
Ćwiczenie:
Ćwiczenie 11
Data oddania:
10.6.2013
Imię, Nazwisko:
Aleksandra Kulecka
Ocena:
Uwagi: 
 
 
 
1.
Cel ćwiczenia:
Konfiguracja środowiska Microsoft Visual Studio do współpracy z biblioteką
OpenMP oraz implementacja, kompilacja i wykonanie
prostej aplikacji równoległej.
2.
Przebieg ćwiczenia:
Na podstawie przygotowanej w
cześniej aplikacji naszym zadaniem było jej
przetestowanie
dla różnej ilość wątków i procesów.
Poniżej przedstawiono kod źródłowy programu:
#include <iostream>
#include <omp.h> //biblioteka OpenMP
#include <stdio.h>
using namespace std;
int main()
{
int liczba = 0;
cout << "Podaj liczbe: ";
cin >> liczba;
cout << endl;
int thread_id;
if (liczba > 0)
{
#pragma omp parallel for
//dyrektywa preprocesora służąca do
//
zrównoleglenia wątków
for (int i = 0; i < liczba; i++)
{
printf(" %d", i);
}
cout << "\n";
}
return 0;
}
 
 
 
 
Wynikiem działania powyższego kodu było:
3. Wnioski
Wypisywane liczby nie były poszeregowane według żadnego schematu,
Wyświetlone wartości powtarzały się,
Aby wywołać program z określoną ilością wątków należy ustawić 
zmienną środowiskową
OMP_NUM_THREADS=liczba_watkow
Wykorzystanie funkcji cout << " "
<< i; dawało zły wynik wyświetlenia liczb,
fu
nkcja ta została zastąpiona poleceniem printf();
Wykorzystanie funkcji OpenMP wiąże się z dodaniem dodatkowej biblioteki 
do programu. 
4. OpenMP a MPI
OpenMP (ang. Open Multi-Processing)
– wieloplatformowy interfejs
programowania  aplikacji  (API)  umożliwiający  tworzenie  programów 
komputerowych dla systemów wieloprocesorowych z pamięcią dzieloną. Może 
być  wykorzystywany  w  językach  programowania  C,  C++  i  Fortran  na  wielu 
architekturac
h, m.in. Unix i Microsoft Windows. Składa się ze zbioru dyrektyw
kompilatora,  bibliotek  oraz  zmiennych  środowiskowych  mających  wpływ  na 
sposób wykonywania się programu. 
 
Dzięki temu, że standard OpenMP został uzgodniony przez głównych
producentów  sprzętu  i  oprogramowania  komputerowego,  charakteryzuje  się 
on  przenośnością,  skalowalnością,  elastycznością  i  prostotą  użycia.  Dlatego 
może być stosowany do tworzenia aplikacji równoległych dla różnych platform, 
od komputerów klasy PC po superkomputery. 
 
OpenMP można stosować do tworzenia aplikacji równoległych na
klastrach  komputerów  wieloprocesorowych.  W  tym  przypadku  zwykle  stosuje 
się rozwiązanie hybrydowe, w którym programy są  uruchamiane na klastrach 
komputerowych  pod  kontrolą  alternatywnego  interfejsu  MPI,  natomiast  do 
urównoleglenia  pracy  węzłów  klastrów  wykorzystuje  się  OpenMP. 
Alternatywny  sposób  polega  na  zastosowaniu  specjalnych  rozszerzeń 
OpenMP  dla  systemów  pozbawionych  pamięci  współdzielonej  (np.  Cluster 
OpenMP Intela). 
 
 
Message Passing Interface (MPI) (z ang. Interfejs Transmisji
Wiadomości)  –  protokół  komunikacyjny  będący  standardem  przesyłania 
komunikatów  pomiędzy  procesami  programów  równoległych  działających  na 
jednym  lub  więcej  komputerach.  Interfejs  ten  wraz  z  protokołem  oraz 
semantyką specyfikuje, jak jego elementy winny się zachowywać w dowolnej 
implementacji. Celami MPI są wysoka jakość, skalowalność oraz przenośność. 
MPI  jest  dominującym  modelem  wykorzystywanym  obecnie  w  klastrach 
komputerów  oraz  superkomputerach.  Pierwsza  wersja  standardu  ukazała  się 
w  maju  1994  r.  Standard  MPI  implementowany  jest  najczęściej  w  postaci 
bibliotek,  z  których  można  korzystać  w  programach  tworzonych  w  różnych 
językach programowania, np. C, C++, Ada, Fortran. 
 
OpenMP
jest otwartą biblioteką i jej użycie jest proste gdyż w większości
przypadków polega na dołączeniu biblioteki przez preambułe include. Program 
OpenMP wykonuje swoje zadania w oparciu 
o wątki, natomiast MPI robi to na
procesach i koniecznym jest
posługiwanie się zewnętrznym programem, aby
móc  wykonać  daną  aplikację.  W  przypadku  OpenMP  wystarczy  w  zmiennej 
środowiskowej OMP_NUM_THREADS ustawić ilość wywoływanych wątków.