Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az OpenMP API-ban használt függvényekre mutató hivatkozásokat tartalmaz.
Az OpenMP standard Visual C++ implementációja az alábbi függvényeket és adattípusokat tartalmazza.
Környezeti végrehajtás esetén:
| Funkció | Description |
|---|---|
| omp_set_num_threads (szálak számának beállítása) | Beállítja a következő párhuzamos régiókban lévő szálak számát, kivéve, ha egy num_threads záradék felülírja. |
| omp_get_num_threads | A párhuzamos régióban lévő szálak számát adja vissza. |
| omp_get_max_threads | Olyan egész számot ad vissza, amely egyenlő vagy nagyobb, mint azoknak a szálaknak a száma, amelyek akkor lennének elérhetők, ha a kód ezen pontján num_threads nélküli párhuzamos régiót határoznának meg. |
| omp_get_thread_num | A szálcsoporton belül végrehajtó szál számát adja vissza. |
| omp_get_num_procs | A függvény meghívásakor elérhető processzorok számát adja vissza. |
| omp_in_parallel | A nemzero értéket adja vissza, ha egy párhuzamos régióból hívjuk meg. |
| omp_set_dynamic | Azt jelzi, hogy a közelgő párhuzamos régiókban elérhető szálak száma a futási idő alapján módosítható. |
| omp_get_dynamic | Olyan értéket ad vissza, amely jelzi, hogy a közelgő párhuzamos régiókban elérhető szálak száma módosítható-e a futási idő alapján. |
| omp_set_nested | Engedélyezi a beágyazott párhuzamosságot. |
| omp_get_nested | Olyan értéket ad vissza, amely jelzi, hogy engedélyezve van-e a beágyazott párhuzamosság. |
Zárolás esetén:
| Funkció | Description |
|---|---|
| omp_init_lock | Inicializál egy egyszerű zárolást. |
| omp_init_nest_lock | Inicializál egy zárolást. |
| omp_destroy_lock | Felold egy zárat. |
| omp_destroy_nest_lock | Nem inicializál egy beágyazott zárolást. |
| omp_set_lock | Megakadályozza a szál végrehajtását, amíg nem elérhető egy zár. |
| omp_set_nest_lock | Blokkolja a szálvégrehajtást, amíg egy zárolás el nem érhető. |
| omp_unset_lock | Feloldja a zárolást. |
| omp_unset_nest_lock | Felold egy beágyazható zárolást. |
| omp_test_lock | Megpróbálja beállítani a zárolást, de nem blokkolja a szál végrehajtását. |
| omp_test_nest_lock | Beágyazott zárolást próbál beállítani, de nem blokkolja a szál végrehajtását. |
| Adattípus | Description |
|---|---|
omp_lock_t |
A zárolás állapotát tartalmazó típus, függetlenül attól, hogy a zárolás elérhető-e, vagy egy szál rendelkezik-e zárolással. |
omp_nest_lock_t |
A zárolással kapcsolatos alábbi információk egyikét tartalmazó típus: a zárolás elérhetősége, a zárolást birtokló szál identitása, és a beágyazási szám értéke. |
Időzítési rutinok esetén:
| Funkció | Description |
|---|---|
| omp_get_wtime | Egy értéket ad vissza másodpercben az idő egy bizonyos pontból való eltelte után. |
| omp_get_wtick | A processzor órajelei közötti másodpercek számát adja vissza. |
omp_destroy_lock
Nem inicializál egy zárat.
void omp_destroy_lock(
omp_lock_t *lock
);
Paraméterek
zár
Egy omp_lock_t típusú változó, amelyet omp_init_lock segítségével inicializáltak.
Megjegyzések
További információ: 3.2.2 omp_destroy_lock és omp_destroy_nest_lock függvények.
Example
Lásd az omp_init_lock példáját a omp_destroy_lock használatáról.
omp_destroy_nest_lock
Nem inicializál egy beágyazott zárolást.
void omp_destroy_nest_lock(
omp_nest_lock_t *lock
);
Paraméterek
zár
Egy omp_nest_lock_t típusú változó, amelyet az omp_init_nest_lock-kal inicializáltak.
Megjegyzések
További információ: 3.2.2 omp_destroy_lock és omp_destroy_nest_lock függvények.
Example
A omp_init_nest_lock példaként szolgál a omp_destroy_nest_lock használatára.
omp_get_dynamic
Olyan értéket ad vissza, amely jelzi, hogy a közelgő párhuzamos régiókban elérhető szálak száma módosítható-e a futási idő alapján.
int omp_get_dynamic();
Visszaadott érték
A nemero érték azt jelenti, hogy a szálak dinamikusan lesznek igazítva.
Megjegyzések
A szálak dinamikus beállítása omp_set_dynamic és OMP_DYNAMIC van megadva.
További információ: 3.1.7 omp_set_dynamic függvény.
Example
Nézze meg a omp_set_dynamic példát omp_get_dynamic használatáról.
omp_get_max_threads
Olyan egész számot ad vissza, amely egyenlő vagy nagyobb, mint azoknak a szálaknak a száma, amelyek akkor lennének elérhetők, ha a kód ezen pontján num_threads nélküli párhuzamos régiót határoznának meg.
int omp_get_max_threads( )
Megjegyzések
További információ: 3.1.3 omp_get_max_threads függvény.
Example
// omp_get_max_threads.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main( )
{
omp_set_num_threads(8);
printf_s("%d\n", omp_get_max_threads( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_get_max_threads( ));
}
printf_s("%d\n", omp_get_max_threads( ));
#pragma omp parallel num_threads(3)
#pragma omp master
{
printf_s("%d\n", omp_get_max_threads( ));
}
printf_s("%d\n", omp_get_max_threads( ));
}
8
8
8
8
8
omp_get_nested
Olyan értéket ad vissza, amely jelzi, hogy engedélyezve van-e a beágyazott párhuzamosság.
int omp_get_nested( );
Visszaadott érték
A nemero érték azt jelenti, hogy a beágyazott párhuzamosság engedélyezve van.
Megjegyzések
A beágyazott párhuzamosság a omp_set_nested és az OMP_NESTED segítségével kerül megadásra.
További információ: 3.1.10 omp_get_nested függvény.
Example
Lásd a omp_set_nested, példaként a omp_get_nested használatára.
omp_get_num_procs
A függvény meghívásakor elérhető processzorok számát adja vissza.
int omp_get_num_procs();
Megjegyzések
További információ: 3.1.5 omp_get_num_procs függvény.
Example
// omp_get_num_procs.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main( )
{
printf_s("%d\n", omp_get_num_procs( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_get_num_procs( ));
}
}
// Expect the following output when the example is run on a two-processor machine:
2
2
omp_get_num_threads
A párhuzamos régióban lévő szálak számát adja vissza.
int omp_get_num_threads( );
Megjegyzések
További információ: 3.1.2 omp_get_num_threads függvény.
Example
// omp_get_num_threads.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main()
{
omp_set_num_threads(4);
printf_s("%d\n", omp_get_num_threads( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_get_num_threads( ));
}
printf_s("%d\n", omp_get_num_threads( ));
#pragma omp parallel num_threads(3)
#pragma omp master
{
printf_s("%d\n", omp_get_num_threads( ));
}
printf_s("%d\n", omp_get_num_threads( ));
}
1
4
1
3
1
omp_get_thread_num
A szálcsoporton belül végrehajtó szál számát adja vissza.
int omp_get_thread_num( );
Megjegyzések
További információ: 3.1.4 omp_get_thread_num függvény.
Example
Lásd a párhuzamos példát omp_get_thread_num használatára.
omp_get_wtick
A processzor órajelei közötti másodpercek számát adja vissza.
double omp_get_wtick( );
Megjegyzések
További információ: 3.3.2 omp_get_wtick függvény.
Example
Lásd az omp_get_wtime-et példaként a omp_get_wtick használatára.
omp_get_wtime
Egy értéket ad vissza másodpercben az idő egy bizonyos pontból való eltelte után.
double omp_get_wtime( );
Visszaadott érték
Egy tetszőleges, de konzisztens pontból eltelt idő másodpercében megadott értéket ad vissza.
Megjegyzések
Ez a pont továbbra is konzisztens marad a program végrehajtása során, így a közelgő összehasonlítások lehetségesek lesznek.
További információ: 3.3.1 omp_get_wtime függvény.
Example
// omp_get_wtime.cpp
// compile with: /openmp
#include "omp.h"
#include <stdio.h>
#include <windows.h>
int main() {
double start = omp_get_wtime( );
Sleep(1000);
double end = omp_get_wtime( );
double wtick = omp_get_wtick( );
printf_s("start = %.16g\nend = %.16g\ndiff = %.16g\n",
start, end, end - start);
printf_s("wtick = %.16g\n1/wtick = %.16g\n",
wtick, 1.0 / wtick);
}
start = 594255.3671159324
end = 594256.3664474116
diff = 0.9993314791936427
wtick = 2.793651148400146e-007
1/wtick = 3579545
omp_in_parallel
A nemzero értéket adja vissza, ha egy párhuzamos régióból hívjuk meg.
int omp_in_parallel( );
Megjegyzések
További információ: 3.1.6 omp_in_parallel függvény.
Example
// omp_in_parallel.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main( )
{
omp_set_num_threads(4);
printf_s("%d\n", omp_in_parallel( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_in_parallel( ));
}
}
0
1
omp_init_lock
Inicializál egy egyszerű zárolást.
void omp_init_lock(
omp_lock_t *lock
);
Paraméterek
zár
Típusváltozó omp_lock_t.
Megjegyzések
További információ: 3.2.1 omp_init_lock és omp_init_nest_lock függvények.
Example
// omp_init_lock.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
omp_lock_t my_lock;
int main() {
omp_init_lock(&my_lock);
#pragma omp parallel num_threads(4)
{
int tid = omp_get_thread_num( );
int i, j;
for (i = 0; i < 5; ++i) {
omp_set_lock(&my_lock);
printf_s("Thread %d - starting locked region\n", tid);
printf_s("Thread %d - ending locked region\n", tid);
omp_unset_lock(&my_lock);
}
}
omp_destroy_lock(&my_lock);
}
Thread 0 - starting locked region
Thread 0 - ending locked region
Thread 0 - starting locked region
Thread 0 - ending locked region
Thread 0 - starting locked region
Thread 0 - ending locked region
Thread 0 - starting locked region
Thread 0 - ending locked region
Thread 0 - starting locked region
Thread 0 - ending locked region
Thread 1 - starting locked region
Thread 1 - ending locked region
Thread 1 - starting locked region
Thread 1 - ending locked region
Thread 1 - starting locked region
Thread 1 - ending locked region
Thread 1 - starting locked region
Thread 1 - ending locked region
Thread 1 - starting locked region
Thread 1 - ending locked region
Thread 2 - starting locked region
Thread 2 - ending locked region
Thread 2 - starting locked region
Thread 2 - ending locked region
Thread 2 - starting locked region
Thread 2 - ending locked region
Thread 2 - starting locked region
Thread 2 - ending locked region
Thread 2 - starting locked region
Thread 2 - ending locked region
Thread 3 - starting locked region
Thread 3 - ending locked region
Thread 3 - starting locked region
Thread 3 - ending locked region
Thread 3 - starting locked region
Thread 3 - ending locked region
Thread 3 - starting locked region
Thread 3 - ending locked region
Thread 3 - starting locked region
Thread 3 - ending locked region
omp_init_nest_lock
Inicializál egy zárolást.
void omp_init_nest_lock(
omp_nest_lock_t *lock
);
Paraméterek
zár
Típusváltozó omp_nest_lock_t.
Megjegyzések
A kezdeti beágyazási szám nulla.
További információ: 3.2.1 omp_init_lock és omp_init_nest_lock függvények.
Example
// omp_init_nest_lock.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
omp_nest_lock_t my_lock;
void Test() {
int tid = omp_get_thread_num( );
omp_set_nest_lock(&my_lock);
printf_s("Thread %d - starting nested locked region\n", tid);
printf_s("Thread %d - ending nested locked region\n", tid);
omp_unset_nest_lock(&my_lock);
}
int main() {
omp_init_nest_lock(&my_lock);
#pragma omp parallel num_threads(4)
{
int i, j;
for (i = 0; i < 5; ++i) {
omp_set_nest_lock(&my_lock);
if (i % 3)
Test();
omp_unset_nest_lock(&my_lock);
}
}
omp_destroy_nest_lock(&my_lock);
}
Thread 0 - starting nested locked region
Thread 0 - ending nested locked region
Thread 0 - starting nested locked region
Thread 0 - ending nested locked region
Thread 3 - starting nested locked region
Thread 3 - ending nested locked region
Thread 3 - starting nested locked region
Thread 3 - ending nested locked region
Thread 3 - starting nested locked region
Thread 3 - ending nested locked region
Thread 2 - starting nested locked region
Thread 2 - ending nested locked region
Thread 2 - starting nested locked region
Thread 2 - ending nested locked region
Thread 2 - starting nested locked region
Thread 2 - ending nested locked region
Thread 1 - starting nested locked region
Thread 1 - ending nested locked region
Thread 1 - starting nested locked region
Thread 1 - ending nested locked region
Thread 1 - starting nested locked region
Thread 1 - ending nested locked region
Thread 0 - starting nested locked region
Thread 0 - ending nested locked region
omp_set_dynamic
Azt jelzi, hogy a közelgő párhuzamos régiókban elérhető szálak száma a futási idő alapján módosítható.
void omp_set_dynamic(
int val
);
Paraméterek
val
Egy érték, amely azt jelzi, hogy a futtatókörnyezet által módosítható-e a közelgő párhuzamos régiókban elérhető szálak száma. Nonzero esetén a futtatókörnyezet módosíthatja a szálak számát, ha nulla, akkor a futtatókörnyezet nem módosítja dinamikusan a szálak számát.
Megjegyzések
A szálak száma soha nem lépi túl a omp_set_num_threads vagy OMP_NUM_THREADS által beállított értéket.
A omp_get_dynamic használatával jelenítse meg a omp_set_dynamic aktuális beállítását.
A beállítás omp_set_dynamic felülírja a OMP_DYNAMIC környezeti változó beállításait.
További információ: 3.1.7 omp_set_dynamic függvény.
Example
// omp_set_dynamic.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main()
{
omp_set_dynamic(9);
omp_set_num_threads(4);
printf_s("%d\n", omp_get_dynamic( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_get_dynamic( ));
}
}
1
1
omp_set_lock
Blokkolja a szálvégrehajtást, amíg egy zárolás el nem érhető.
void omp_set_lock(
omp_lock_t *lock
);
Paraméterek
zár
Egy omp_lock_t típusú változó, amelyet omp_init_lock segítségével inicializáltak.
Megjegyzések
További információ: 3.2.3 omp_set_lock és omp_set_nest_lock függvények.
Példák
Lásd az omp_init_lock példáját a omp_set_lock használatáról.
omp_set_nest_lock
Blokkolja a szálvégrehajtást, amíg egy zárolás el nem érhető.
void omp_set_nest_lock(
omp_nest_lock_t *lock
);
Paraméterek
zár
Egy omp_nest_lock_t típusú változó, amelyet az omp_init_nest_lock-kal inicializáltak.
Megjegyzések
További információ: 3.2.3 omp_set_lock és omp_set_nest_lock függvények.
Példák
A omp_init_nest_lock példaként szolgál a omp_set_nest_lock használatára.
omp_set_nested
Engedélyezi a beágyazott párhuzamosságot.
void omp_set_nested(
int val
);
Paraméterek
val
A nemero értékek lehetővé teszik a beágyazott párhuzamosságot, míg a nulla letiltja a beágyazott párhuzamosságot.
Megjegyzések
Az OMP beágyazott párhuzamossága bekapcsolható a omp_set_nested környezeti változó beállításával.
A beállítás omp_set_nested felülírja a OMP_NESTED környezeti változó beállításait.
A környezeti változó engedélyezése megszakíthatja az egyébként működő programokat, mivel a szálak száma exponenciálisan nő párhuzamos régiók beágyazásakor. Ha például egy függvény hatszor ismétlődik a 4-re beállított OMP-szálak számával, 4096 -ot (4-et 6) igényel. Az I/O-kötött alkalmazások kivételével az alkalmazások teljesítménye általában csökken, ha több szál van, mint a processzorok.
omp_get_nested használja, hogy megjelenítse omp_set_nested aktuális beállítását.
További információ: 3.1.9 omp_set_nested függvény.
Example
// omp_set_nested.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
int main( )
{
omp_set_nested(1);
omp_set_num_threads(4);
printf_s("%d\n", omp_get_nested( ));
#pragma omp parallel
#pragma omp master
{
printf_s("%d\n", omp_get_nested( ));
}
}
1
1
omp_set_num_threads
Beállítja a következő párhuzamos régiókban lévő szálak számát, kivéve, ha egy num_threads záradék felülírja.
void omp_set_num_threads(
int num_threads
);
Paraméterek
num_threads
A párhuzamos régióban lévő szálak száma.
Megjegyzések
További információ: 3.1.1 omp_set_num_threads függvény.
Example
Példa a omp_get_num_threads használatára omp_set_num_threads.
omp_test_lock
Megpróbálja beállítani a zárolást, de nem blokkolja a szál végrehajtását.
int omp_test_lock(
omp_lock_t *lock
);
Paraméterek
zár
Egy omp_lock_t típusú változó, amelyet omp_init_lock segítségével inicializáltak.
Megjegyzések
További információ: 3.2.5 omp_test_lock és omp_test_nest_lock függvények.
Example
// omp_test_lock.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
omp_lock_t simple_lock;
int main() {
omp_init_lock(&simple_lock);
#pragma omp parallel num_threads(4)
{
int tid = omp_get_thread_num();
while (!omp_test_lock(&simple_lock))
printf_s("Thread %d - failed to acquire simple_lock\n",
tid);
printf_s("Thread %d - acquired simple_lock\n", tid);
printf_s("Thread %d - released simple_lock\n", tid);
omp_unset_lock(&simple_lock);
}
omp_destroy_lock(&simple_lock);
}
Thread 1 - acquired simple_lock
Thread 1 - released simple_lock
Thread 0 - failed to acquire simple_lock
Thread 3 - failed to acquire simple_lock
Thread 0 - failed to acquire simple_lock
Thread 3 - failed to acquire simple_lock
Thread 2 - acquired simple_lock
Thread 0 - failed to acquire simple_lock
Thread 3 - failed to acquire simple_lock
Thread 0 - failed to acquire simple_lock
Thread 3 - failed to acquire simple_lock
Thread 2 - released simple_lock
Thread 0 - failed to acquire simple_lock
Thread 3 - failed to acquire simple_lock
Thread 0 - acquired simple_lock
Thread 3 - failed to acquire simple_lock
Thread 0 - released simple_lock
Thread 3 - failed to acquire simple_lock
Thread 3 - acquired simple_lock
Thread 3 - released simple_lock
omp_test_nest_lock
Beágyazott zárolást próbál beállítani, de nem blokkolja a szál végrehajtását.
int omp_test_nest_lock(
omp_nest_lock_t *lock
);
Paraméterek
zár
Egy omp_nest_lock_t típusú változó, amelyet az omp_init_nest_lock-kal inicializáltak.
Megjegyzések
További információ: 3.2.5 omp_test_lock és omp_test_nest_lock függvények.
Example
// omp_test_nest_lock.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
omp_nest_lock_t nestable_lock;
int main() {
omp_init_nest_lock(&nestable_lock);
#pragma omp parallel num_threads(4)
{
int tid = omp_get_thread_num();
while (!omp_test_nest_lock(&nestable_lock))
printf_s("Thread %d - failed to acquire nestable_lock\n",
tid);
printf_s("Thread %d - acquired nestable_lock\n", tid);
if (omp_test_nest_lock(&nestable_lock)) {
printf_s("Thread %d - acquired nestable_lock again\n",
tid);
printf_s("Thread %d - released nestable_lock\n",
tid);
omp_unset_nest_lock(&nestable_lock);
}
printf_s("Thread %d - released nestable_lock\n", tid);
omp_unset_nest_lock(&nestable_lock);
}
omp_destroy_nest_lock(&nestable_lock);
}
Thread 1 - acquired nestable_lock
Thread 0 - failed to acquire nestable_lock
Thread 1 - acquired nestable_lock again
Thread 0 - failed to acquire nestable_lock
Thread 1 - released nestable_lock
Thread 0 - failed to acquire nestable_lock
Thread 1 - released nestable_lock
Thread 0 - failed to acquire nestable_lock
Thread 3 - acquired nestable_lock
Thread 0 - failed to acquire nestable_lock
Thread 3 - acquired nestable_lock again
Thread 0 - failed to acquire nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 3 - released nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 3 - released nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 0 - acquired nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 0 - acquired nestable_lock again
Thread 2 - failed to acquire nestable_lock
Thread 0 - released nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 0 - released nestable_lock
Thread 2 - failed to acquire nestable_lock
Thread 2 - acquired nestable_lock
Thread 2 - acquired nestable_lock again
Thread 2 - released nestable_lock
Thread 2 - released nestable_lock
omp_unset_lock
Feloldja a zárolást.
void omp_unset_lock(
omp_lock_t *lock
);
Paraméterek
zár
A omp_lock_t típusú változó, amelyet omp_init_lock-kal inicializáltak, és amely a szál tulajdonában van, valamint a függvényben történik a végrehajtása.
Megjegyzések
További információ: 3.2.4 omp_unset_lock és omp_unset_nest_lock függvények.
Example
Lásd az omp_init_lock példáját a omp_unset_lock használatáról.
omp_unset_nest_lock
Felold egy beágyazható zárolást.
void omp_unset_nest_lock(
omp_nest_lock_t *lock
);
Paraméterek
zár
A omp_nest_lock_t típusú változó, amelyet omp_init_nest_lock-kel inicializáltak, a szál tulajdonában van és a függvényben hajtódik végre.
Megjegyzések
További információ: 3.2.4 omp_unset_lock és omp_unset_nest_lock függvények.
Example
A omp_init_nest_lock példaként szolgál a omp_unset_nest_lock használatára.