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.