További jellemzők OpenMP

2.3 További funkciók OpenMP

Környezeti változók és kiegészítő funkciókat

A program megkezdése előtt a szálak számát végrehajtó párhuzamos régió lehet beállítani értékének meghatározásakor a környezeti változó OMP_NUM_THREADS. Az alapértelmezett érték a változó OMP_NUM_THREADS végrehajtásától függ. lehetőség van arra, hogy módosítsa a program meghívásával omp_set_num_threads () függvényt.

void omp_set_num_threads (int num)

Az alábbi példa bemutatja omp_set_num_threads () függvényt és num_threads opciót. Mielőtt az első párhuzamos régió függvényhívás omp_set_num_threads (2) az elemi szálak száma egyenlő lesz 2. De num_threads (3) opció vonatkozik az első párhuzamos régióban. ami azt jelzi, hogy ezen a területen kell végezni, három szál. Ezért az üzenet: „Párhuzamos 1. régióban” jelenik meg három szálat. A második párhuzamos régió num_threads lehetőség nem alkalmazható, azonban érvényes értéket beállítani funkció omp_set_num_threads (2). és az üzenet: „Párhuzamos terület 2” jelenik meg két szál.

Bizonyos esetekben a rendszer dinamikusan változtatni a szálak száma végrehajtásához használt párhuzamos régióban, például, hogy optimalizálják a rendszer erőforrásait. Ez lehetővé tette a teendő, ha OMP_DYNAMIC környezeti változó értéke true. A rendszerek a dinamikus változás a szálak számát nem határozza meg az alapértelmezett, egyébként az alapértelmezett érték: false. OMP_DYNAMIC változó segítségével állítható be omp_set_dynamic () függvény.

void omp_set_dynamic (int num)

Mivel a függvény értékét paraméter omp_set_dynamic () beállítása 0 vagy 1. Ha a rendszer nem változni a szálak számát, akkor a függvény hívás omp_set_dynamic () változó OMP_DYNAMIC nem változik. Ismerje meg az értékét OMP_DYNAMIC segítségével lehetséges omp_get_dynamic () függvényt.

int omp_get_dynamic (void)

A következő példa bemutatja a használatát omp_set_dynamic () és omp_get_dynamic (). Első nyomtatott érték, omp_get_dynamic () függvény kapott - ez jelzi, ha az értéke alapértelmezés OMP_DYNAMIC. Ezután omp_set_dynamic () függvény OMP_DYNAMIC változó értéke igaz. amely megerősíti a kiadását máskor értékek omp_get_dynamic () függvényt. Ezután keletkezik egy párhuzamos régióban, hajt végre egy előre meghatározott számú elemi szálat (128). Ezzel párhuzamosan régióban van nyomtatva a tényleges szálak számát lefuttatjuk. mester irányelv lehetővé teszi a nyomtatást csak folyamat-master. Azokban a rendszerekben egy dinamikusan változó szálak száma kibocsátott érték eltérhet egy adott (128).

# include
# include
int main (int argc. char * argv [])
<
printf ( "Érték OMP_DYNAMIC% d \ n." omp_get_dynamic ().);
omp_set_dynamic (1);
printf ( "Érték OMP_DYNAMIC% d \ n." omp_get_dynamic ().);
# Pragma OMP párhuzamos num_threads (128)
<
# Pragma OMP mester
<
printf ( "Parallel régió.% d szálak \ n".
omp_get_num_threads ());
>
>
>

omp_get_max_threads () függvény a szálak maximális száma használható a következő párhuzamos régióban.

int omp_get_max_threads (void)

omp_get_num_procs () függvény a processzorok számát felhasználók számára elérhető felhasználói program idején a hívást. Tartsuk szem előtt, hogy a rendelkezésre álló processzorok dinamikusan változik.

int omp_get_num_procs (void)

A párhuzamos területek egymásba lehet tolni; alapértelmezett beágyazott párhuzamos régió által végrehajtott menet. Ez vezérli változó beállításával OMP_NESTED környezetet. Változás változó értéke OMP_NESTED hívja omp_set_nested () függvényt.

void omp_set_nested (int beágyazott)

omp_set_nested () funkció lehetővé teszi vagy letiltja a beágyazott párhuzamosság. Mivel az érték a paraméter értéke 0 vagy 1. Ha beágyazott párhuzamosság engedélyezve van, minden egyes szál, amelyek megfelelnek a leírása a párhuzamos régió a végrehajtását, hogy létrehoz egy sor új szálak. Szült egy szál az új csoport lesz thread-mester. Ha a rendszer nem támogatja a beágyazott párhuzamosság, ez a funkció nem lesz hatással.

A következő példa bemutatja a használata beágyazott párhuzamos régiók és omp_set_nested () függvény. Hívjon omp_set_nested () függvény az első rész előtt lehetővé teszi a használatát beágyazott párhuzamos régiókban. Annak meghatározására, cérna száma hívások omp_get_thread_num () függvény az aktuális párhuzamos szakaszon. Mindegyik szál külső párhuzamos régióban új szálak, amelyek mindegyike kinyomtatja a számot a számát szült szálak. Következő hívás omp_set_nested () megtiltja a beágyazott párhuzamos régiókban. A második rész egy beágyazott párhuzamos régió nélkül végrehajtható a generációs új fonalak, hogy látható a kapott kibocsátás.

Ismerje meg az értékét OMP_NESTED segítségével lehetséges omp_get_nested () függvényt.

int omp_get_nested (void)

omp_in_parallel () függvény értéke 1, ha ez okozta az aktív terület a párhuzamos programot.

int omp_in_parallel (void)

A következő példában bemutatjuk a omp_in_parallel () függvény. Funkció mód változását mutatja a funkcionalitás attól függően, hogy hívják a soros vagy párhuzamos régióban. A sorrend a régió nyomtatandó „Soros régióban, és ezzel párhuzamosan -” Párhuzamos régióban. "

időmértékén

Visszaadja az eltelt idő másodpercben:

kettős omp_get_wtime (void);

Visszaadja időzítő pontossága, a korábban használt leírt funkció:

kettős omp_get_wtick (void);

Kapcsolódó cikkek