2.3 paralelní konstrukce
Následující směrnice definuje paralelní regionu, což je oblast programu, který má být zpracována souběžně více podprocesů.Toto je základní koncept, který začíná paralelního spuštění.
#pragma omp parallel [clause[ [, ]clause] ...] new-line
structured-block
Klauzule je jeden z následujících:
Pokud (skalární výraz)
soukromé (seznamu proměnné)
firstprivate (seznamu proměnné)
default(Shared | none)
sdílené (seznamu proměnné)
copyin (seznamu proměnné)
reduction(operator: variable-list**)**
num_threads (výraz celé)
Pokud podproces narazí paralelní konstrukce, týmu podprocesů je vytvořen, pokud platí jedna z následujících případů:
Ne Pokud je přítomna klauzule.
-Li výraz vyhodnocen jako nenulová hodnota.
Tento podproces se stane hlavní podproces tým s podprocesem číslo 0, a oblasti paralelně provádět všechny podprocesy v týmu, včetně hlavního podprocesu.Pokud hodnota -li výraz je nula, je serializován regionu.
Chcete-li zjistit počet podprocesů, které jsou požadovány následující pravidla za objednávku.První pravidlo, jehož podmínka je splněna, budou použita:
Pokud num_threads je přítomna klauzule a pak výraz celočíselnou hodnotu počet podprocesů, které jsou požadovány.
Pokud omp_set_num_threads byla volána funkce knihovny, pak je hodnota argumentu v nedávno provedených volání počet podprocesů, které jsou požadovány.
Pokud proměnná prostředí OMP_NUM_THREADS je definována hodnota této proměnné prostředí je počet podprocesů, které jsou požadovány.
Pokud byla použita žádná z výše uvedených metod, počet podprocesů, které jsou požadovány je definované implementací.
Pokud num_threads je přítomna klauzule pak nahrazuje počet podprocesů, které požaduje omp_set_num_threads funkce knihovny nebo OMP_NUM_THREADS proměnné prostředí pouze pro paralelní oblast pro.Následné paralelní regionů nejsou ovlivněny ji.
Počet podprocesů, které vykonávají paralelní regionu závisí také, zda je povolena dynamická úprava počet podprocesů.Dynamické úpravy zakázána, bude proveden požadovaný počet podprocesů paralelní regionu.Pokud je povolena dynamická úprava požadovaný počet podprocesů je maximální počet podprocesů, které může provádět paralelní regionu.
Paralelní regionu je zjistil při dynamické úpravy počet podprocesů je zakázána a překračuje počet podprocesů, které jsou požadovány pro paralelní oblast běhu systému můžete zadat číslo, chování programu je definován provádění.Implementace může například přerušit provádění programu, nebo jej může serializovat paralelní regionu.
Omp_set_dynamic funkce knihovny a OMP_DYNAMIC povolení a zakázání dynamické úpravy počet podprocesů, které lze použít proměnné prostředí.
Počet fyzických procesorů skutečně hostování podprocesy v daném okamžiku je definované implementací.Po dobu trvání tohoto regionu paralelní zůstává konstantní počet podprocesů v týmu.Lze změnit buď výslovně uživatelem nebo automaticky spuštění systému z jednoho regionu paralelní do jiného.
Každý podproces jsou spouštěny příkazy obsažené v rámci dynamického rozsahu paralelní regionu a každý podproces může provést cestu příkazy se liší od jiných podprocesů.Směrnic zjistil mimo lexikální rozsah paralelní regionu se nazývají osamocené směrnic.
Předpokládané bariéry na konci paralelní oblast není k dispozici.Hlavní podproces tým pokračování provádění na konci paralelní regionu.
Pokud podproces v týmu paralelní oblasti provádění narazí na jiné paralelní konstrukce, vytvoří nový tým a stává se hlavní nového týmu.Ve výchozím nastavení jsou serializovat vnořené paralelní regionů.Proto standardně vnořené paralelní oblasti proveden tým se skládá z jednoho podprocesu.Výchozí chování může být změněno pomocí runtime knihovny funkce omp_set_nested nebo proměnnou prostředí OMP_NESTED.Počet vnořených oblasti paralelní spouštění podprocesů v týmu je však definované implementací.
Omezení paralelní směrnice jsou následující:
Nejvýše jeden Pokud na směrnice mohou být klauzule.
Není určena, zda kterékoli straně účinky uvnitř když výraz nebo num_threads výraz dojít.
A vyvoláním proveden uvnitř paralelní regionu musí způsobit spuštění obnovit v rámci dynamického rozsahu stejného bloku strukturovaných a musí být zachycena podprocesem došlo výjimce.
Pouze jedinou num_threads na směrnice mohou být klauzule.Num_threads výraz je vyhodnocen mimo kontext paralelní regionu a musí být kladné celé číslo.
Pořadí vyhodnocení -li a num_threads klauzule není určena.
Křížové odkazy:
soukromé, firstprivate, výchozí, sdíleného, copyin, a snížení doložky, viz bod 2.7.2 na stránce 25.
OMP_NUM_THREADS proměnnou prostředí bodu 4.2 na straně 48.
omp_set_dynamic funkce knihovny, viz části 3.1.7 na straně 39.
OMP_DYNAMIC prostředí, proměnné, viz oddíl 4.3 na stránce 49.
omp_set_nested fungovat, viz bodu 3.1.9 na stránce 40.
OMP_NESTED prostředí, proměnné, viz bodu 4.4 na stránce 49.
omp_set_num_threads funkce knihovny, viz bod 3.1.1 na stránce 36.