07 OpenMP Dyrektywy funkcje zmienne ppt

background image

7.

7.

OpenMP

OpenMP

.

.

Dyrektywy, funkcje i zmienne

Dyrektywy, funkcje i zmienne

Lesław Sieniawski © 2010

background image

Dyrektywy

Dyrektywy

background image

Posta

Posta

ć

ć

dyrektyw kompilatora

dyrektyw kompilatora

#pragma omp nazwa_dyrektywy klauzula… ¶

omp

= słowo kluczowe OpenMP

= opcjonalne powtarzanie

= znak nowej linii

Dyrektywa

#pragma

przekazuje polecenia zale

ż

ne

od implementacji:

dyrektywa rozpoznana – wykonywana

nierozpoznana – ignorowana

background image

Posta

Posta

ć

ć

dyrektyw kompilatora (2)

dyrektyw kompilatora (2)

Po niektórych dyrektywach wyst

ę

puje blok

instrukcji (lub pojedyncza instrukcja)

Blok instrukcji

w j

ę

zyku C:

{

instrukcja1;

instrukcjaN;

}

Blok instrukcji w j

ę

zyku C+OpenMP mo

ż

e zawiera

ć

dodatkowo konstrukcje

OpenMP

.

<blok_instrukcji>

background image

Posta

Posta

ć

ć

dyrektyw kompilatora (3)

dyrektyw kompilatora (3)

Konstrukcja

(ang. construct):

#pragma omp

… ¶

{

instrukcja1;

instrukcjaN;

}

<konstrukcja>

background image

Klauzule wsp

Klauzule wsp

ó

ó

ł

ł

dzielenia danych

dzielenia danych

default (shared | none)

default(shared)

zmienne zadeklarowane

na wy

ż

szym poziomie s

ą

w bloku instrukcji

domy

ś

lnie dost

ę

pne jako zmienne

współdzielone

default(none)

nie działa domy

ś

lny sposób

dost

ę

pno

ś

ci zmiennych w bloku instrukcji

Dotyczy dyrektyw:

parallel

i

task

background image

Klauzule wsp

Klauzule wsp

ó

ó

ł

ł

dzielenia danych (2)

dzielenia danych (2)

shared(

lista

)

– deklaracja jednej lub wi

ę

kszej

liczby zmiennych jako współdzielonych przez w

ą

tki

Dotyczy dyrektyw:

parallel

i

task

reduction(operator:

lista

)

żą

danie

akumulacji warto

ś

ci okre

ś

lonej przez

operator

;

akumulacja zachodzi na prywatnych kopiach
zmiennych wskazanych na

liście.

Po wykonaniu

regionu zakumulowane warto

ś

ci s

ą

ł

ą

czone w

oryginalnych zmiennych. Zmienne musz

ą

by

ć

typu

skalarnego, zadeklarowane jako

shared

background image

Klauzula

Klauzula

reduction

reduction

Dozwolone operatory

0

alternatywa logiczna

||

1

koniunkcja logiczna

&&

0

alternatywa rozł

ą

czna

^

0

alternatywa bitowa

|

~0

koniunkcja bitowa

&

0

odejmowanie

-

1

mno

ż

enie

*

0

dodawanie

+

Warto

ść

pocz

ą

tkowa

Operacja

Operator

background image

Klauzule wsp

Klauzule wsp

ó

ó

ł

ł

dzielenia danych (3)

dzielenia danych (3)

private(

lista

)

- deklaruje zmienne jako

prywatne dla w

ą

tku, bez nadawania warto

ś

ci

pocz

ą

tkowych

firstprivate(

lista

)

- deklaruje zmienne

jako prywatne dla w

ą

tku i nadaje im warto

ś

ci

pocz

ą

tkowe oryginalnych zmiennych w chwili

wej

ś

cia do regionu

lastprivate(

lista

)

- deklaruje zmienne jako

prywatne dla w

ą

tku i w chwili wyj

ś

cia z

regionu kopiuje je do oryginalnych zmiennych

background image

Klauzule kopiowania danych

Klauzule kopiowania danych

copyin

(

lista

)

- kopiuje warto

ś

ci

zmiennych threadprivate w

ą

tku głównego

do zmiennych threadprivate wszystkich
w

ą

tków regionu

parallel

, przed

wej

ś

ciem do tego regionu

copyprivate

(

lista

)

- rozgłasza warto

ś

ci

zmiennych threadprivate danego w

ą

tku do

zmiennych threadprivate innych w

ą

tków

regionu

parallel

,

Dotyczy dyrektywy

single

background image

Klauzule podzia

Klauzule podzia

ł

ł

u p

u p

ę

ę

tli na fragmenty

tli na fragmenty

schedule(

typ [

,chunk])

gdzie

typ

przyjmuje warto

ś

ci:

static

– iteracje dzieli si

ę

na fragmenty długo

ś

ci

chunk

i statycznie przypisuje do w

ą

tków. Je

ś

li liczba

fragmentów przekracza liczb

ę

w

ą

tków, przypisanie

nast

ę

puje wg algorytmu Round-Robin

dynamic

- iteracje dzieli si

ę

na fragmenty długo

ś

ci

chunk

i statycznie przypisuje do w

ą

tków. Gdy w

ą

tek

wykona swój fragment, pobiera nast

ę

pny

auto

– przydziału fragmentów do w

ą

tków dokonuje

system operacyjny

chunk

– długo

ść

fragmentu; wyra

ż

enie całkowite

background image

Inne klauzule

Inne klauzule

num_threads(n)

- w regionie

równoległym dost

ę

pnych b

ę

dzie

n

w

ą

tków

nowait

– usuni

ę

cie domy

ś

lnej bariery na

ko

ń

cu bloku instrukcji

background image

Wyst

Wyst

ę

ę

powanie klauzul w dyrektywach

powanie klauzul w dyrektywach

[źródło: http://computing.llnl.gov/tutorials/openMP/]

background image

Konstrukcja

Konstrukcja

parallel

parallel

#pragma omp parallel klauzula… ¶

<blok_instrukcji>

Semantyka: konstrukcja tworzy grup

ę

w

ą

tków i rozpoczyna

region równoległy

Klauzule:

if(

wyrażenie skalarne

)

num_threads(

wyrażenie typu int

)

default(shared | none)

private(

lista

)

firstprivate(

lista

)

shared(

lista

)

copyin(

lista

)

reduction(

operator

:

lista

)

background image

Konstrukcja

Konstrukcja

parallel

parallel

(2)

(2)

Liczba w

ą

tków

w regionie równoległym zale

ż

y od:

Liczby procesorów

Klauzuli

if

:

if(0)

jeden w

ą

tek, inaczej – wiele

Klauzuli

num_threads(n)

: n = liczba w

ą

tków

Wywołania funkcji

omp_set_num_threads(n)

Warto

ś

ci zmiennej

ś

rodowiska

OMP_NUM_THREADS

Regiony równoległe mog

ą

by

ć

zagnie

ż

d

ż

one

background image

Konstrukcje podzia

Konstrukcje podzia

ł

ł

u zadania

u zadania

Kontrukcja podziału zadania

(ang. Work

Sharing Construct) przypisuje odpowiednie
fragmenty kodu do istniej

ą

cych ju

ż

w

ą

tków

Musi zawiera

ć

si

ę

w regionie

parallel

Nie tworzy nowych w

ą

tków

Wykorzystuje w

ą

tki regionu

parallel

Zawiera barier

ę

na ko

ń

cu

Pragma

for

Pragma

sections

Pragma

single

background image

Pragma

Pragma

for

for

#pragma omp for klauzula… ¶

<blok_instrukcji>

Semantyka: uruchamia równoległe wykonanie iteracji

zawartych w bloku

for

. Na ko

ń

cu bloku umieszczona

jest niejawnie bariera, chyba

ż

e podano klauzul

ę

nowait

Klauzule:

schedule(

typ [,

chunk

])

private(

lista

)

firstprivate(

lista

)

shared(

lista

)

copyin(

lista

)

reduction(

operator

:

lista

)

nowait

background image

Pragma

Pragma

for

for

(2)

(2)

U

ż

ycie:

Pragma

for

musi wyst

ą

pi

ć

wewn

ą

trz konstrukcji

#pragma parallel

W tre

ś

ci p

ę

tli

for

nie mo

ż

e wyst

ą

pi

ć

instrukcja

break

Zmienna steruj

ą

ca p

ę

tli musi by

ć

typu

int

Warto

ść

pocz

ą

tkowa zmiennej steruj

ą

cej p

ę

tli musi by

ć

typu

int

Warunek zako

ń

czenia p

ę

tli musi by

ć

operatorem relacji

ze zbioru

{ <, <=, >, >= }

Skok warto

ś

ci zmiennej steruj

ą

cej p

ę

tli musi by

ć

całkowity

chunk

– dodatnia liczba całkowita

background image

Pragma

Pragma

sections

sections

#pragma omp sections klauzula… ¶

{

#pragma omp section ¶

<blok_instrukcji>

#pragma omp section ¶

<blok_instrukcji>

}
Semantyka: wskazanie fragmentów kodu, które mog

ą

by

ć

wykonane przez odr

ę

bne w

ą

tki

U

ż

ycie: Pragma

sections

musi wyst

ą

pi

ć

wewn

ą

trz

konstrukcji

#pragma parallel

background image

Pragma

Pragma

sections

sections

(2)

(2)

Klauzule:

private(

lista

)

firstprivate(

lista

)

lastprivate(

lista

)

reduction(

operator

:

lista

)

nowait

R

eg

io

n

p

a

r

a

l

l

e

l

Pragma

parallel

Bariera

parallel

Bariera

sections

Pragma

sections

sekcje

master

master

[n

a

p

o

d

st

aw

ie

:

J.

U

ła

si

ew

ic

z…

]

background image

Kombinowane konstrukcje

Kombinowane konstrukcje

parallel

parallel

#pragma omp parallel for klauzula… ¶

<p

ę

tla_for>

#pragma omp parallel sections klauzula… ¶

{

#pragma omp section ¶

<blok_instrukcji>

#pragma omp section ¶

<blok_instrukcji>

}

Klauzule: z sumy zbiorów dot. pragmy

parallel

i odpowiednio pragmy

for

lub

sections

background image

Pragma

Pragma

single

single

#

pragma omp single klauzula… ¶

<blok_instrukcji>

Semantyka:

definiuje fragment kodu, który ma by

ć

wykonany przez

(tylko) jeden w

ą

tek grupy

Klauzule:

private(

lista

)

firstprivate(

lista

)

nowait

U

ż

ycie:

W bloku obj

ę

tym przez pragm

ę

parallel

Dla zapewnienia,

ż

e dany fragment kodu zostanie wykonany tylko

jeden raz (np. operacja we/wy)

background image

Pragma

Pragma

task

task

#pragma omp task klauzula… ¶

<blok_instrukcji>

Semantyka: Konstrukcja okre

ś

la jawne podzadanie; jego

ś

rodowisko danych tworzone jest na podstawie klauzul

dost

ę

pu do danych i zasad domy

ś

lnych

Klauzule:

if

(wyrażenie_skalarne

)

untied

default(shared | none)

private(lista)

firstprivate(lista)

shared(lista)

background image

Konstrukcje synchronizacyjne

Konstrukcje synchronizacyjne

Pragma

master

– wykonanie bloku instrukcji

tylko przez w

ą

tek główny

Pragma

critical

– wykonanie bloku instrukcji

z wykluczeniem równoczesno

ś

ci w

ą

tków (sekcja

krytyczna)

Pragma

ordered

– wykonanie bloku instrukcji

w okre

ś

lonej kolejno

ś

ci w

ą

tków

Pragma

atomic

– wykonanie bloku instrukcji jako

instrukcji atomowej

Pragma

barrier

– jawna deklaracja bariery

background image

Pragma

Pragma

master

master

#pragma omp master ¶

<blok_instrukcji>

Semantyka:

Konstrukcja wskazuje blok instrukcji do

wykonania przez w

ą

tek główny. Nie tworzy

implikowanych barier

U

ż

ycie:

W bloku obj

ę

tym przez pragm

ę

parallel

background image

Pragma

Pragma

critical

critical

#pragma omp critical [(

nazwa

)] ¶

<blok_instrukcji>

Semantyka: (sekcja krytyczna) konstrukcja kontroluje dost

ę

p

w

ą

tków do bloku instrukcji – w danej chwili mo

ż

e go wykonywa

ć

tylko jeden w

ą

tek. Inne w

ą

tki b

ę

d

ą

oczekiwa

ć

na wej

ś

cie do

sekcji krytycznej,
a

ż

do jej opuszczenia przez w

ą

tek wykonuj

ą

cy zawarte w niej

instrukcje

Nazwa

– opcjonalny identyfikator sekcji krytycznej; sekcje

krytyczne z t

ą

sam

ą

nazw

ą

s

ą

uto

ż

samiane

U

ż

ycie:

W bloku obj

ę

tym przez pragm

ę

parallel

Blok instrukcji nie mo

ż

e zawiera

ć

rozgał

ę

zie

ń

background image

Pragma

Pragma

ordered

ordered

#pragma omp ordered ¶

<blok_instrukcji>

Semantyka: polecenie wykonania bloku instrukcji

z zachowaniem kolejno

ś

ci iteracji – w

ą

tki b

ę

d

ą

wykonywane w kolejno

ś

ci, w jakiej zmienia si

ę

warto

ść

zmiennej steruj

ą

cej

U

ż

ycie: dotyczy bloku zawartego w konstrukcji

for

background image

Pragma

Pragma

atomic

atomic

#pragma omp atomic ¶

<wyra

ż

enie>

Semantyka:

żą

danie aktualizacji pami

ę

ci w trybie

wył

ą

cznym (mini-sekcja krytyczna)

U

ż

ycie: obejmuje tylko jedn

ą

, najbi

ż

sz

ą

instrukcj

ę

background image

Pragma

Pragma

flush

flush

#pragma omp flush(

lista

) ¶

<wyra

ż

enie>

Semantyka: jawne polecenie uzyskania spójno

ś

ci

obrazu pami

ę

ci operacyjnej przez przepisanie do niej

warto

ś

ci zmiennych znajduj

ą

cych si

ę

w pami

ę

ciach

podr

ę

cznych (ang. cache) poszczególnych

procesorów

lista

– wykaz zmiennych, których dotyczy ta czynno

ść

(pozwala ograniczy

ć

ilo

ść

operacji aktualizacji)

background image

Pragma

Pragma

barrier

barrier

#pragma omp barrier ¶

Semantyka: jawne okre

ś

lenie bariery; ka

ż

dy z w

ą

tków

regionu równoległego b

ę

dzie oczekiwał, a

ż

wszystkie

w

ą

tki osi

ą

gn

ą

ten punkt synchronizacji

U

ż

ycie: konstrukcja nie obejmuje bloku instrukcji

background image

Inne.

Inne.

Pragma

Pragma

threadprivate

threadprivate

#pragma omp threadprivate(

lista

Semantyka: ustanowienie trwało

ś

ci zmiennych

wymienionych na

liście

.

Zmienne te b

ę

d

ą

zachowane przy kolejnych wej

ś

ciach do regionów

równoległych

U

ż

ycie: nie zawiera bloku instrukcji

background image

Funkcje

Funkcje

background image

Klasyfikacja funkcji

Klasyfikacja funkcji

OpenMP

OpenMP

Zarz

ą

dzanie

ś

rodowiskiem wykonawczym

ustawianie i badanie warto

ś

ci zmiennych

ś

rodowiska

Synchronizacja w

ą

tków

Tworzenie/usuwanie zamków,

Zamykanie/otwieranie zamków

Pomiar czasu wykonania oblicze

ń

Pobieranie czasu wzgl

ę

dnego

Badanie rozdzielczo

ś

ci (wirtualnego) zegara

maszynowego

background image

Funkcje zarz

Funkcje zarz

ą

ą

dzania

dzania

ś

ś

rodowiskiem wykonawczym

rodowiskiem wykonawczym

void omp_set_num_threads(int liczba_w

ą

tków)

Semantyka: odczytanie liczby w

ą

tków, które mog

ą

by

ć

wykorzystane w najbli

ż

szym regionie równoległym

int omp_get_num_threads(void)

Semantyka: odczytanie liczby w

ą

tków, które mog

ą

by

ć

wykorzystane w bie

żą

cym regionie równoległym

int omp_get_max_threads(void)

Semantyka: odczytana warto

ść

odpowiada zmiennej

ś

rodowiska OMP_NUM_THREADS

int omp_get_thread_num(void)

Semantyka: odczytanie numeru nadanego bie

żą

cemu

w

ą

tkowi

background image

Funkcje zarz

Funkcje zarz

ą

ą

dzania

dzania

ś

ś

rodowiskiem wykonawczym (2)

rodowiskiem wykonawczym (2)

int omp_get_num_procs(void)

Semantyka: odczytanie liczby zainstalowanych
procesorów

void omp_set_dynamic(int w

ą

tki_dynamiczne)

Semantyka: ustalanie czy w sekcji równoległej w

ą

tki maj

ą

by

ć

zarz

ą

dzane w sposób dynamiczny

U

ż

ycie: w

ą

tki_dynamiczne=0

niedozwolone,

w

ą

tki_dynamiczne=!0

dozwolone

int omp_get_dynamic(void)

Semantyka: odczytanie, czy dynamiczne ustalanie liczby
watków jest dozwolone
U

ż

ycie: zob.

omp_set_dynamic()

background image

Synchronizacja w

Synchronizacja w

ą

ą

tk

tk

ó

ó

w

w

void omp_init_lock(omp_lock_t

*lock)

Semantyka:

utworzenie (otwartego) zamka

;

void omp_set_lock omp_lock_t

*lock)

Semantyka: zamek otwarty

zamkni

ę

cie

zamka

przez bie

żą

cy w

ą

tek; zamek zamkni

ę

ty

blokada bie

żą

cego w

ą

tka

a

ż

do otwarcia

zamka

lock

– identyfikator zamka

background image

Synchronizacja w

Synchronizacja w

ą

ą

tk

tk

ó

ó

w (2)

w (2)

void omp_unset_lock(omp_lock_t *lock)

Semantyka:

otwarcie zamka

; w

ą

tek zablokowa-

ny przez ten zamek zostanie wznowiony

void omp_destroy_lock(omp_lock_t *lock)

Semantyka:

usuni

ę

cie zamka

lock

– identyfikator zamka

background image

Pomiar czasu wykonania oblicze

Pomiar czasu wykonania oblicze

ń

ń

double omp_get_wtime(void)

Semantyka: odczytanie liczby sekund, jakie
upłyn

ę

ły od ustalonej chwili w (dawnej) przeszło

ś

ci

U

ż

ycie: obl. ró

ż

nicy warto

ś

ci pobranych PO i

PRZED wykonaniem badanego fragmentu programu

double omp_get_wtick(void)

Semantyka: odczytanie liczby sekund upływaj

ą

cych

pomi

ę

dzy kolejnymi przerwaniami zegarowymi

Uwaga: Nie zawsze podaje sensowne warto

ś

ci (!)

background image

Zmienne

Zmienne

background image

Zmienne

Zmienne

ś

ś

rodowiska

rodowiska

OMP_SCHEDULE typ [,chunk]

Semantyka: ustala sposób szeregowania w

ą

tków

i wielko

ść

fragmentu p

ę

tli (zob. klauzula

schedule

)

OMP_NUM_THREADS liczba_w

ą

tków

Semantyka: ustala liczb

ę

w

ą

tków dost

ę

pnych w

regionach równoległych

OMP_DYNAMIC dynamic

Semantyka: kontroluje dynamiczne ustalanie liczby
w

ą

tków dost

ę

pnych w regionach równoległych;

dynamic

=

true

lub

false

(zob. funkcja

omp_set_dynamic()

)

background image

Zmienne

Zmienne

ś

ś

rodowiska (2)

rodowiska (2)

OMP_NESTED nested

Semantyka: kontroluje mo

ż

liwo

ść

zagł

ę

biania

regionów równoległych; nested =

true

lub

false

(zob. funkcja

omp_set_nested()

)

OMP_STACKSIZE wielko

ść

_stosu

Semantyka: okre

ś

la pojemno

ść

stosu w

ą

tków;

wielko

ść

_stosu (nieujemna liczba całkowita)

mo

ż

e by

ć

uzupełniona liter

ą

B, K, M lub G

oznaczaj

ą

c

ą

mno

ż

nik (domy

ś

lnie K)

background image

Zmienne

Zmienne

ś

ś

rodowiska (3)

rodowiska (3)

OMP_WAIT_POLICY policy

Semantyka: ustala sposób zachowania czekaj

ą

cych

w

ą

tków;

policy = active

czekanie aktywne

(z wykorzystaniem CPU),

policy = passive

czekanie bez wykorzystania CPU

OMP_MAX_ACTIVE_LEVELS liczba_regionów

Semantyka: ustala maksymaln

ą

liczb

ę

aktywnych

zagnie

ż

dzonych regionów równoległych

OMP_THREAD_LIMIT limit_liczby_w

ą

tków

Semantyka: ustala maksymaln

ą

liczb

ę

w

ą

tków

uczestnicz

ą

cych w wykonaniu programu OpenMP


Wyszukiwarka

Podobne podstrony:
09 Rozdział 07 Więcej o całce funkcji dwóch zmiennych
07 funkcje zmiennej rzeczywistej 3 2 granica funkcji
07 Rozdział 06 Wiadomości podstawowe z teorii funkcji zmiennej rzeczywistej
07 Rozdział 06 Wiadomości podstawowe z teorii funkcji zmiennej rzeczywistej
07 Modyfikacje struktury enzymówid 7062 ppt
6 funkcje zmiennej zespolonej, holomorficzność
06 funkcje zmiennej rzeczywistej 3 1 funkcje elementarne
2 Funkcje zmiennej zespolonej
funkcje przywodcze ppt
07 Liczby Pierwsze algorytmyid 6722 ppt
07 operacje na danychid 7063 ppt
07 Parcie gruntu newid 6767 ppt
19 OT Misje i funkcjeid 18327 ppt
05 Wyklad 5. Rozkład funkcji zmiennej losowej i dwuwymiarowe zmienn e losowe
6. funkcje zmiennej zespolonej, holomorficzność
cw4 charakterystyki i funkcje zmiennych losowych
Microsoft Word W15 funkcje 2 zmiennych i ekstrema
Funkcje zmiennej zespolonej id Nieznany

więcej podobnych podstron