OpenMP lab1 opracowanie odpowiedz

Programowanie równoległe i rozproszone – opracowanie lab nr 1

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 architekturach, 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).

Kompilacja

Przykład kompilacji dla kompilatora Intel C++:

$ icc -openmp program.cpp -o program

Przykład kompilacji dla kompilatora GCC:

$ g++ -fopenmp program.cpp -o program

Uruchomienie programu dla czterech wątków:

$ env OMP_NUM_THREADS=4 ./program

Proces kompilacji OpenMP (https://iwomp.zih.tu-dresden.de/downloads/OpenMP-compilation.pdf – m.in. slajd 13):

Front End – odczytanie kodu źródłowego, sprawdzenie czy jest wolny od błędu, przygotowanie kodu pośredniego. (Czytanie i sprawdzanie dyrektyw OpenMP, czy dyrektywa jest w odpowiednim miejscu, czy pętla jest dozwolona, niektóre błędy mogą nie być uznane za błąd! Tworzy kod pośredni z adnotacjami OpenMP do dalszego obsłużenia).


Middle End – jak najlepsza analiza i optymalizacja kodu. (Tłumaczenie sekcji, pętli, dodawanie niejawnych barier, łączenie sąsiednich obszarów równoległych i barier [redundancja]).


Back End – przetłumaczenie konstrukcji OpenMP na wielowątkowy kod


Każdy wątek potrzebuje własnego stosu.


Konstrukcje związane ze współdzieleniem pracy:

Klauzule atrybutów współdzielenia danych

Klauzule synchronizacji

Klauzule planowania

  1. static – Tutaj, każdy z wątków posiada przypisane iteracje przed uruchomieniem iteracji pętli. Domyślnie, iteracje są dzielone po równo między wątki. Określenie całkowitej wartości dla parametru „chunk” spowoduje przydzielenie tej ilości następujących po sobie iteracji do konkretnego wątku. Jeżeli programista pominie parametr „chunk”, zbiór iteracji zostanie podzielony na podzbiory o wielkości (w przybliżeniu) równej liczba_iteracji/liczba_wątków, a każdy wątek otrzyma przynajmniej jeden podzbiór.

  2. dynamic – Tutaj, pewna ilość iteracji jest przypisywana do mniejszej ilości wątków. Gdy konkretny wątek skończy swoją iterację, pobiera następną z pozostałych wolnych iteracji. Ostatni podzbiór może mieć mniejszą wielkość niż ta określona przez parametr „chunk”. Parametr „chunk” definiuje ilość iteracji, które są przyporządkowywane do wątku za każdym razem. Gdy „chunk” nie jest określony, wówczas podzbiory są jednoelementowe.

  3. guided – Duży fragment następujących po sobie iteracji jest przypisywany do każdego wątku dynamicznie (jak powyżej). Rozmiar fragmentu zmniejsza się wykładniczo, wraz z każdą pomyślną alokacją, do minimalnego rozmiaru zdefiniowanego w parametrze „chunk”. Jeśli programista ustawi parametr „chunk” na 1, to rozmiar każdego zbioru jest opisany algorytmem: liczba_nieprzydzielonych_iteracji/liczba_wątków. Wartość ta zmierza do 1. Adekwatnie, jeśli „chunk” ustalony zostaje na m gdzie m>1, to rozmiar porcji ustalany jest podobnie jak wyżej, lecz nie może on stać się mniejszy od m. Wyjątkiem jest jedynie ostatnia porcja. Może ona być mniejsza od zadanej wielkości. Domyślny „chunk” (gdy nie jest ustalony) jest równy 1.

  4. auto – System samodzielnie określa podział zrównoleglenia zadania.

  5. runtime – Ta opcja zezwala na określanie na wykorzystywanie powyższych możliwości w trakcie działania programu. Przekazywanie jest powiązane ze zmienną środowiskową OMP_SCHEDULE:

$ export OMP_SCHEDULE="dynamic"
$ export OMP_SCHEDULE="guided,4"

Kontrola IF

Inicjalizacja

Redukcja

Inne

Zalety i wady

Zasady określania ilości wątków:

  1. ustalenie liczby wątków przy pomocy klauzuli num_threads, np.:

    #pragma omp parallel num_threads(2)

  2. wywołanie funkcji omp_set_num_threads, np.:

    omp_set_num_threads(4);
    
  3. ustalenie zmiennej środowiskowej OMP_NUM_THREADS, np.:

    $ set OMP_NUM_THREADS = 1;
    
  4. w pozostałych przypadkach liczba wątków jest ustalana przez implementację OpenMP w danym systemie – zazwyczaj liczba procesorów w komputerze,

  5. istnieje możliwość dynamicznego ustalania liczby wątków.

Zmienne środowiskowe:

OMP_DYNAMIC [TRUE/FALSE] – dynamiczne przydzielenie liczby wątków w równoległym obszarze

OMP_NESTED [TRUE/FALSE] – zagnieżdżona współbieżność

OMP_NUM_THREADS [INT] – maksymalna liczba wątków we współbieżnym obszarze

OMP_SCHEDULE [STATIC/DYNAMIC/GUIDED/RUNTIME [, chunk]] – tylko gdy ustawiona klauzula shedule(runtime), dla dyrektyw for lub parallel for, ustala sposób podziału iteracji pomiędzy wątki



Kiedy petla się nie zrównolegli?



Hyper-threading – implementacja wielowątkowości współbieżnej opracowana przez firmę Intel i stosowana w procesorach Atom, Core i3, Core i5, Core i7, Pentium 4.

Hyper-threading służy zwiększeniu wydajności obliczeń prowadzonych równolegle przez mikroprocesory. Dla każdego fizycznego rdzenia procesora system operacyjny przypisuje dwa procesory wirtualne, a następnie dzieli obciążenie obliczeniami między nimi, jeżeli jest to możliwe. Hyper-threading wymaga nie tylko wsparcia ze strony systemu operacyjnego, ale również oprogramowania zoptymalizowanego specjalnie dla obsługi tej technologii. Intel zaleca wyłączanie jej, jeżeli używany jest system operacyjny bez takiej optymalizacji.

OpenMP przydziela jeden wątek na rdzeń. Jeżeli HT jest włączony to w takim wypadku przydzielane są dwa wątki na jeden rdzeń. Trzeba pamiętać o tym, że naszym ograniczeniem jest pamięć dzielona (za https://www.msi.umn.edu/sites/default/files/OpenMP.tutorial_1.pdf – slajd 18).

PI metodą Monte Carlo















Pole kwadratu = 4r2

Pole koła = *r2

więc:





i dalej, mając pole koła i kwadratu można obliczyć:





Pola można otrzymać stosując metodę MC.

  1. Losuje się n punktów z opisanego na tym kole kwadratu - dla koła o R = 1 współrzędne wierzchołków (-1,-1), (-1,1), (1,1), (1,-1).

  2. Po wylosowaniu każdego z tych punktów trzeba sprawdzić, czy jego współrzędne spełniają powyższą nierówność (tj. czy punkt należy do koła).

Wynikiem losowania jest informacja, że z n wszystkich prób k było trafionych, zatem pole koła wynosi





więc PI = 4 * liczba trafionych / liczba_wszystkich

Inne metody:

1.









Wzór ten, odkryty przez Leibniza, otrzymuje się po rozwinięciu w szereg Maclaurina funkcji y = arctg x i podstawieniu x = 1 ( arctg 1 = /4 ).

2.

To także rozwinięcie w szereg Maclaurina, ale tym razem funkcji y = arcsin x  arcsin 1 = /2 ).

3.





Wzór odkryty przez Johna Wallisa

4.







To rozwinięcie, odkryte przez Eulera, otrzymuje się z teorii tzw. szeregów trygonometrycznych.









Pytania:

- co to openmp

- wady i zalety open mp

- co jest wydajniejsze zmienne prywatne czy współdzielone?

Prywatne. Chodzi o to, że nie tracimy czasu na synchronizację.

- różnice między first private oraz private

- kiedy pętla się nie z równolegli

- jak przebiega proces kompilacji Openmp

- w jaki sposób można wyznaczyć liczbę PI (nie chodzi tutaj o Monte Carlo)

- czy openMP zrównoległa na wątkach, czy procesach,

- jak określić na ilu watkach ma zrównoleglić

- jeśli nie określimy to na ilu się wykona

- co w przypadku gdy mamy hyper-threading


Wyszukiwarka

Podobne podstrony:
OpenMP lab1 opracowanie odpowiedz
finanse lokalne opracowane odpowiedzi, Różne Dokumenty, MARKETING EKONOMIA ZARZĄDZANIE
MPI lab4 opracowanie odpowiedz
PODSTAWY PRAWA, Prawo - test (opracowane odpowiedzi), 1
OPRACOWANE ODPOWIEDZI id 337615 Nieznany
CUDA lab2 opracowanie odpowiedz
Zbiór2 pytań wraz z opracowanymi odpowiedziami z przedmiot
opracowane odpowiedzi do zestawu 2
opracowane odpowiedzi na pytani Nieznany
finanse lokalne opracowane odpowiedzi--ściaga, Różne Dokumenty, MARKETING EKONOMIA ZARZĄDZANIE
prawo test opracowanie odpowiedzi 15, Agh kier. gig. rok 3 sem 6, podziemka podsadzka, sem VI, Prawo
Opracowane odpowiedzi część
opracowane odpowiedzi, MRiT-Mechanika i Budowa Maszyn, Fizyka
kolo opracowanie odpowiedzi
Egzamin Podstawy Projektowania 12 opracowane odpowiedzi
OPRACOWANE ODPOWIEDZI
opracowane odpowiedzi do zestawu 1

więcej podobnych podstron