2.4.1 for – konstrukce
Pro směrnice identifikuje iterativní konstrukce sdílení práce určuje počet iterací smyčky přidružené vykonán souběžně.Iterací o pro smyčky jsou distribuovány podprocesů, které již existují v týmu provádění paralelní konstrukce, které váže.Syntaxe pro konstrukci je následující:
#pragma omp for [clause[[,] clause] ... ] new-line
for-loop
Klauzule je jeden z následujících:
soukromé (seznamu proměnné)
firstprivate (seznamu proměnné)
lastprivate (seznamu proměnné)
reduction(operator : variable-list)
Objednáno
schedule(kind, chunk_size)
nowait
Pro směrnice uvádí omezení na strukturu odpovídající pro smyčky.Konkrétně odpovídající pro smyčky musí mít kanonický tvar:
for (init-expr;var logické op b; incr-expr)
init výraz
Jeden z následujících:var = lb
typ Integer var = lb
výraz incr
Jeden z následujících:++var
var ++
-- var
var --
var += incr
var -= incr
var = var + incr
var = incr + var
var = var - incr
var
Proměnná číslo se znaménkem.Pokud tato proměnná by jinak měla být sdílen, je implicitně bylo soukromé dobu trvání pro.Tato proměnná není třeba upravit v rámci těla pro prohlášení.Pokud není určen k proměnné lastprivate, jeho hodnota po smyčce je neurčitá.logické op
Jeden z následujících:<
< =
>
> =
lb, b, and incr
Smyčka výchozí celé výrazy.Neexistuje žádná synchronizace během hodnocení těchto výrazů.Proto všechny vyhodnocené vedlejší účinky výsledkům neurčité.
Všimněte si, že umožňuje kanonický tvar počtu iterací smyčky se vypočítává na vstupu do smyčky.Tento výpočet se provádí s hodnotami typu var, po nedílnou propagační akce.V zejména, pokud hodnota b - LB + incr nelze reprezentovat v tomto typu, výsledek je neurčitá.Dále, pokud logické op je < nebo < = pak incr výraz musí způsobit var zvýší při každém opakování smyčky.Pokud logické op je > nebo > = pak incr výraz musí způsobit var snížit v každé iteraci smyčky.
Plán klauzule určuje jak iterací pro smyčky jsou rozděleny mezi podprocesy týmu.Správnost programu nesmí záviset na podproces, který provede určitou iterace.Hodnota chunk_size, je-li zadán, musí být výraz pro výchozí celé smyčky, s kladnou hodnotu.Neexistuje žádná synchronizace během hodnocení tohoto výrazu.Proto všechny vyhodnocené vedlejší účinky výsledkům neurčité.Plán druhu může být jeden z následujících:
Tabulka 2-1 plán klauzule druhu hodnoty
static |
Při plánu (statické, chunk_size) je určena iterací jsou rozděleny do segmentů o velikosti určené chunk_size.Bloky dat jsou staticky přiřazeny podprocesy v týmu v kruhového z počtu podprocesů.Po č chunk_size je určena iterace prostor je rozdělen do bloků, se přibližně rovná velikosti jednoho bloku přiřazené každý podproces. |
dynamické |
Při plánu (dynamické, chunk_size) je určena iterací jsou rozděleny do segmentů, každý obsahuje řadu chunk_size iterací.Každý blok je přiřazen k podprocesu, který čeká na přiřazení.Podproces Spustí shluk iterací a čeká dokud žádné bloky přiřadit své další přiřazení.Všimněte si, že poslední bloku přiřazení může mít menší počet iterací.Po č chunk_size je určena výchozí hodnoty na 1. |
s průvodcem |
Při plánu (s asistencí, chunk_size) je určena bloky s klesající velikostí podprocesy jsou přiřazeny iterací.Po dokončení jeho přiřazené bloku iterací podproces dynamicky přiřazena jiného bloku, dokud žádný.Pro chunk_size 1, velikost každého bloku je přibližně číslo nepřiřazeného děleno počet podprocesů.Tyto velikosti snížit přibližně exponenciálně 1.Pro chunk_size s hodnotou k větší než 1, velikost zmenšit přibližně exponenciálně na k, až na to, že poslední může mít méně než k iterací.Po č chunk_size je určena výchozí hodnoty na 1. |
modul runtime |
Při schedule(runtime) je určena rozhodnutí týkající se plánování je odložena do modulu runtime.Plán druhu a velikost bloky dat lze zvolit v době spuštění nastavením proměnné prostředí OMP_SCHEDULE.Pokud tuto proměnnou prostředí není nastaven, je výsledný plánu definované implementací.Při schedule(runtime) je určena chunk_size nesmí být zadáno. |
V případě neexistence explicitně definovány plán klauzule, výchozí plán je definován provádění.
OpenMP kompatibilní program neměli spoléhat na konkrétní plán pro správné provedení.Program neměli spoléhat na plánu druhu vyhovující přesně popisu uvedeného výše, protože je možné mít varianty v implementacích stejný plán druhu napříč různými kompilátory.Popisy lze vybrat plán, který je vhodný pro zvláštní situaci.
Objednané klauzule musí být přítomen při objednané směrnic svázat pro konstrukci.
Implicitní bariéry je na konci pro konstrukce, pokud nowait je zadána klauzule.
Omezení pro směrnice jsou následující:
Pro smyčky musí být strukturované bloku a navíc jeho provádění musí nesmí být ukončena Konec prohlášení.
Hodnoty smyčky řídit výrazů pro smyčky přidružené pro směrnice musí být stejný pro všechny podprocesy v týmu.
Pro iterační proměnná smyčky musí mít typ znaménkem.
Pouze jedinou plán klauzule se může objevit na pro směrnice.
Pouze jedinou objednané klauzule se mohou objevit v pro směrnice.
Pouze jedinou nowait klauzule se mohou objevit v pro směrnice.
Je neurčený if nebo jak často jakékoli straně účinky v rámci chunk_size, lb, b, nebo incr výrazy dojít.
Hodnota chunk_size výraz musí být stejný pro všechny podprocesy v týmu.
Křížové odkazy:
soukromé, firstprivate, lastprivate, a snížení doložky, viz bod 2.7.2 na stránce 25.
OMP_SCHEDULE prostředí, proměnné, viz bod 4.1 na straně 48.
objednané konstrukci, viz část 2.6.6 na stránce 22.
Dodatek d, stránky 93, poskytuje další informace o použití klauzule plánu.