lab11 4 id 259093 Nieznany

background image

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

Ćwiczenie:

Ćwiczenie 11

Data oddania:

10.6.2013

Imię, Nazwisko:

Dawid Misiniec

Ocena:

Uwagi:


1.

Cel ćwiczenia:

Celem ćwiczenia było zapoznanie się z programem pisanym w środowisku

OpenMP

i porównanie jego działania z podobnym programem pisanym w środowisku

MPI.

2.

Przebieg ćwiczenia:

Przygo

towaną na potrzeby laboratorium aplikację musieliśmy przetestować,

ustawiając różną ilość wątków w kodzie źródłowym.


Listing 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;

}

background image



Wynikiem działania powyższego kodu było:

3. Wnioski

Wypisywane liczby nie były poukładane po kolei,

Z

darzały się powtórzenia wyświetlonych wartości,

Zmiana wykorzystywanej liczby wątków jest możliwa dzięki edycji
zmiennej

OMP_NUM_THREADS=liczba_watkow

Funkcja printf();

musiała zastąpić polecenie cout << i << " "; z powodu

błędów wyświetlania

Aby

móc pracować w środowisku OpenMP konieczne jest dołączenie

biblioteki <omp.h>

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

background image

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.

5. Proces a w

ątek

Wątek (ang. thread) – część programu wykonywana współbieżnie w obrębie
jednego procesu

; w jednym procesie może istnieć wiele wątków.

Różnica między zwykłym procesem a wątkiem polega na współdzieleniu

przez wszystkie wątki działające w danym procesie przestrzeni adresowej oraz
wszystkich innych struktur systemowych (np. listy otwartych plików, gniazd
itp.)

– z kolei procesy posiadają niezależne zasoby.

Ta cecha ma dwie ważne konsekwencje:

Wątki wymagają mniej zasobów do działania i też mniejszy jest czas
ich tworzenia.

Dzięki współdzieleniu przestrzeni adresowej (pamięci) wątki jednego
zadania mogą się między sobą komunikować w bardzo łatwy sposób,

background image

niewymagający pomocy ze strony systemu operacyjnego.
Przekazanie dowolnie dużej ilości danych wymaga przesłania jedynie
wskaźnika, zaś odczyt (a niekiedy zapis) danych o rozmiarze nie
większym od słowa maszynowego nie wymaga synchronizacji
(procesor gwarantuje

atomowość takiej operacji).

Wątki są udostępniane wprost przez system operacyjny MS Windows,

w systemach Linux, BSD

i innych dostępna jest biblioteka pthread, dająca

jednolity interfejs, ukrywający szczegóły implementacji. W językach
programowania

używających maszyn

wirtualnych (Python, Java

itp.)

dostępne również tzw. zielone wątki, które nie są obsługiwane przez system
operacyjny, ale samą maszynę wirtualną – to pozwala m.in. na realizację
współbieżności nawet wtedy, gdy docelowy system operacyjny nie udostępnia
wątków.


Wyszukiwarka

Podobne podstrony:
lab11 2 id 259088 Nieznany
lab11(1) 2 id 259112 Nieznany
Lab11 RapidPrototyping id 25910 Nieznany
lab11 RapidPrototyping EN id 25 Nieznany
Lab11 Sprawozdanie id 259109 Nieznany
Lab11 RapidPrototyping id 25910 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany
D11B7AOver0400 id 130434 Nieznany
analiza ryzyka bio id 61320 Nieznany

więcej podobnych podstron