Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1



Podobne dokumenty
Elementy składowe: Przenośność oprogramowania Model SPMD Szczegółowe wersje (bindings) dla różnych języków programowania

Wprowadzenie do zrównoleglania aplikacji z wykorzystaniem standardu OpenMP

OpenMP. Programowanie aplikacji równoległych i rozproszonych. Wykład 2. Model programowania. Standard OpenMP. Dr inż. Tomasz Olas

Open MP wer Rafał Walkowiak Instytut Informatyki Politechniki Poznańskiej Wiosna

Przetwarzanie Równoległe i Rozproszone

Wprowadzenie do OpenMP

Open MP wer Rafał Walkowiak Instytut Informatyki Politechniki Poznańskiej Jesień 2014

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP.

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Open MP. Rafał Walkowiak Instytut Informatyki Politechniki Poznańskie Jesień 2011

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP.

Programowanie Rozproszone i Równoległe

OpenMP część praktyczna

Architektury systemów równoległych

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP ciąg dalszy.

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie współbieżne OpenMP wybrane wydajność. Rafał Skinderowicz

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wyklad 11 Języki programowania równoległego

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Jędrzej Ułasiewicz Programowanie aplikacji równoległych 1. OpenMP

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Tablice, funkcje - wprowadzenie

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

OpenMP Szkolenie dla uytkowniku

PARADYGMATY PROGRAMOWANIA Wykład 4

Klasy abstrakcyjne, interfejsy i polimorfizm

Tablice (jedno i wielowymiarowe), łańcuchy znaków

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

Równoległość i współbieżność

Równoległość i współbieżność

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie komputerowe. Zajęcia 2

Wykład 8: klasy cz. 4

Co nie powinno być umieszczane w plikach nagłówkowych:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Modele programowania równoległego. Pamięć współdzielona Rafał Walkowiak dla III roku Informatyki PP

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Podstawy programowania skrót z wykładów:

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

PMiK Programowanie Mikrokontrolera 8051

Szablony klas, zastosowanie szablonów w programach

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Język C - podstawowe informacje

#line #endif #ifndef #pragma

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wskaźniki. Programowanie Proceduralne 1

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Argumenty wywołania programu, operacje na plikach

Programowanie obiektowe

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wstęp do programowania

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Podstawy Programowania Obiektowego

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Algorytmy i Struktury Danych

Programowanie w elektronice: Podstawy C

Programowanie procesorów graficznych GPGPU

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

1 Podstawy c++ w pigułce.

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wskaźniki. Informatyka

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

Transkrypt:

Programowanie systemów z pamięcią wspólną specyfikacja OpenMP Krzysztof Banaś Obliczenia równoległe 1

OpenMP Przenośność oprogramowania Model SPMD Szczegółowe wersje (bindings) dla różnych języków programowania Elementy składowe: dyrektywy dla kompilatorów funkcje biblioteczne zmienne środowiskowe Krzysztof Banaś Obliczenia równoległe 2

OpenMP składnia dyrektyw format ( dla powiązania z językami C i C++ ): #pragma omp nazwa_dyrektywy lista_klauzul znak_nowej_linii najważniejszymi z dyrektyw są dyrektywy podziału pracu (work sharing constructs), występujące w obszarze równoległym i stosowane do rozdzielenia poleceń realizowanych przez poszczególne procesory najważniejsze klauzule określają sposób traktowania zmiennych przez wątki w obszarze równoległym każda dyrektywa posiada swój własny zestaw dopuszczalnych klauzul Krzysztof Banaś Obliczenia równoległe 3

OpenMP składnia dyrektyw parallel #pragma omp parallel lista_klauzul { /* obszar równoległy */ } lista_klauzul (pusta lub dowolna kombinacja poniższych): if( warunek ) num_threads ( liczba ) klauzule_zmiennych ( private, firstprivate, shared, reduction ) za chwilę inne Krzysztof Banaś Obliczenia równoległe 4

OpenMP liczba wątków liczbę wątków można próbować określić jawnie poprzez: użycie klauzuli num_threads w dyrektywie parallel, np.: #pragma omp parallel num_threads(10) wywołanie procedury omp_set_num_threads, np.: omp_set_num_threads(10); ustalenie zmiennej środowiskowej OMP_NUM_THREADS,np.: $ set OMP_NUM_THREADS = 10 w pozostałych przypadkach liczba wątków jest ustalana przez implementację OpenMP w danym systemie istnieje możliwość dynamicznego ustalania liczby wątków (aby np. umożliwić działanie dla systemów, które nie dysponują liczbą określoną poprzez num_threads) Krzysztof Banaś Obliczenia równoległe 5

Narzut OpenMP Krzysztof Banaś Obliczenia równoległe 6

OpenMP funkcje biblioteczne funkcje związane ze środowiskiem wykonania: plik nagłówkowy: omp.h składnia funkcji set: void funkcja( int ); składnia pozostałych funkcji: int funkcja( void ) omp_set_num_threads ustalenie liczby wątków omp_get_num_threads pobranie liczby wątków omp_get_num_procs pobranie liczby procesorów omp_get_thread_num pobranie rangi konkretnego wątku (master 0) omp_in_parallel sprawdzenie wykonania równoległego omp_get_max_threads pobranie maksymalnej liczby wątków omp_set_dynamic, omp_get_dynamic dostosowywanie liczby wątków omp_set_nested, omp_get_nested umożliwianie zagnieżdzania Krzysztof Banaś Obliczenia równoległe 7

OpenMP funkcje biblioteczne funkcje obsługi zamków: typ zamka: omp_lock_t; argumentem funkcji jest zawsze omp_lock_t* omp_init_lock inicjowanie omp_destroy_lock niszczenie omp_set_lock zamykanie omp_test_lock próba zamykania bez blokowania omp_unset_lock otwieranie wersje dla zagnieżdżonych zamków funkcje pomiaru czasu: omp_get_wtime czas zegara omp_get_wtick rozdzielczość (dokładność) zegara Krzysztof Banaś Obliczenia równoległe 8

OpenMP makro preprocesora i zmienne środowiskowe #ifdef _OPENMP printf( Kompilator rozpoznaje dyrektywy OpenMP\n ); #endif Zmienne środowiskowe OMP_SCHEDULE określenie dla równoległych pętli z klauzulą schedule(runtime) OMP_NUM_THREADS liczba OMP_DYNAMIC TRUE/FALSE OMP_NESTED TRUE/FALSE Krzysztof Banaś Obliczenia równoległe 9

OpenMP przykład #include<omp.h> int main(){ #ifdef _OPENMP printf("kompilator rozpoznaje dyrektywy OpenMP\n"); #endif printf("maksymalna liczba watkow "); scanf("%d",&lwat); omp_set_num_threads(lwat); printf("aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num()); #pragma omp parallel { printf("aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num()); } Krzysztof Banaś Obliczenia równoległe 10

OpenMP traktowanie zmiennych klauzule współdzielenia zmiennych: shared zmienna wspólna wątków private zmienna lokalna wątków firstprivate zmienna lokalna wątków z kopiowaną wartością początkową lastprivate zmienna lokalna wątków z wartością końcową równą wartości jaka byłaby przy wykonaniu sekwencyjnym inne dyrektywa threadprivate (zasięg ważności deklaracji jest taki jak zasięg ważności deklarowanych nazw) #pragma omp threadprivate (lista_zmiennych) znak_nowej_linii Krzysztof Banaś Obliczenia równoległe 11

OpenMP traktowanie zmiennych zmienna jest wspólna (dostępna wszystkim wątkom) jeśli: istnieje przed wejściem do obszaru równoległego i nie występuje w dyrektywach i klauzulach czyniących ją prywatną została zdefiniowana wewnątrz obszaru równoległego jako zmienna statyczna zmienna jest prywatna (lokalna dla wątku) jeśli została zadeklarowana dyrektywą threadprivate została umieszczona w klauzuli private lub podobnej (firstprivate, lastprivate, reduction ) została zdefiniowana wewnątrz obszaru równoległego jako zmienna automatyczna jest zmienną sterującą równoległej pętli for Krzysztof Banaś Obliczenia równoległe 12