Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Bevat koppelingen naar functies die worden gebruikt in de OpenMP-API.
De Visual C++-implementatie van de OpenMP-standaard bevat de volgende functies en gegevenstypen.
Voor de uitvoering van de omgeving:
| Functie | Description |
|---|---|
| omp_set_num_threads | Stelt het aantal threads in voor aankomende parallelle gebieden, tenzij dit wordt overschreven door een num_threads-clausule. |
| omp_get_num_threads | Retourneert het aantal threads in de parallelle regio. |
| omp_get_max_threads | Retourneert een geheel getal dat gelijk is aan of groter is dan het aantal threads dat beschikbaar zou zijn als een parallelle regio zonder num_threads op dat punt in de code is gedefinieerd. |
| omp_get_thread_num | Retourneert het threadnummer van de thread die actief is in zijn threadteam. |
| omp_get_num_procs | Retourneert het aantal processors dat beschikbaar is wanneer de functie wordt aangeroepen. |
| omp_in_parallel | Retourneert niet-nul indien aangeroepen vanuit een parallelle regio. |
| omp_set_dynamic | Geeft aan dat het aantal threads dat beschikbaar is in toekomstige parallelle regio's, kan worden aangepast door de runtime. |
| omp_get_dynamic | Retourneert een waarde die aangeeft of het aantal threads dat beschikbaar is in toekomstige parallelle regio's, kan worden aangepast door de runtime. |
| omp_set_nested | Hiermee schakelt u geneste parallelle uitvoering in. |
| omp_get_nested | Retourneert een waarde die aangeeft of geneste parallelisme is ingeschakeld. |
Voor vergrendeling:
| Functie | Description |
|---|---|
| omp_init_lock | Initialiseert een eenvoudige vergrendeling. |
| omp_init_nest_lock | Initialiseert een vergrendeling. |
| omp_destroy_lock | Maakt een vergrendeling ongedaan. |
| omp_destroy_nest_lock | Maakt de initialisatie van een nestbare vergrendeling ongedaan. |
| omp_set_lock | Hiermee blokkeert u de uitvoering van threads totdat er een vergrendeling beschikbaar is. |
| omp_set_nest_lock | Hiermee blokkeert u de uitvoering van threads totdat er een vergrendeling beschikbaar is. |
| omp_unset_lock | Hiermee wordt een vergrendeling vrijgegeven. |
| omp_unset_nest_lock | Ontgrendelt een nestbare vergrendeling. |
| omp_test_lock | Hiermee wordt geprobeerd een vergrendeling in te stellen, maar wordt de uitvoering van threads niet geblokkeerd. |
| omp_test_nest_lock | Probeert een nestbare vergrendeling te zetten, maar blokkeert de uitvoering van de thread niet. |
| Gegevenstype | Description |
|---|---|
omp_lock_t |
Een type dat de status van een vergrendeling bevat, ongeacht of de vergrendeling beschikbaar is of dat een thread eigenaar is van een vergrendeling. |
omp_nest_lock_t |
Een type dat een van de volgende stukjes informatie over een vergrendeling bevat: of de vergrendeling beschikbaar is, de identiteit van de thread die de vergrendeling bezit, en het nestaantal van de vergrendeling. |
Voor tijdsroutines:
| Functie | Description |
|---|---|
| omp_get_wtime | Retourneert een waarde in seconden van de tijd die vanaf een bepaald punt is verstreken. |
| omp_get_wtick | Retourneert het aantal seconden tussen de klokklokken van de processor. |
omp_destroy_lock
Maakt een vergrendeling ongedaan.
void omp_destroy_lock(
omp_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_lock_t dat is geïnitialiseerd met omp_init_lock.
Opmerkingen
Zie 3.2.2 omp_destroy_lock en omp_destroy_nest_lock functies voor meer informatie.
Example
Zie omp_init_lock voor een voorbeeld van het gebruik omp_destroy_lock.
omp_destroy_nest_lock
Maakt de initialisatie van een nestbare vergrendeling ongedaan.
void omp_destroy_nest_lock(
omp_nest_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_nest_lock_t dat met omp_init_nest_lock is geïnitialiseerd.
Opmerkingen
Zie 3.2.2 omp_destroy_lock en omp_destroy_nest_lock functies voor meer informatie.
Example
Zie omp_init_nest_lock voor een voorbeeld van het gebruik omp_destroy_nest_lock.
omp_get_dynamic
Retourneert een waarde die aangeeft of het aantal threads dat beschikbaar is in toekomstige parallelle regio's, kan worden aangepast door de runtime.
int omp_get_dynamic();
Retourwaarde
Een niet-nulwaarde betekent dat threads dynamisch worden aangepast.
Opmerkingen
Dynamische aanpassing van threads wordt opgegeven met omp_set_dynamic en OMP_DYNAMIC.
Zie 3.1.7 omp_set_dynamic functie voor meer informatie.
Example
Zie omp_set_dynamic voor een voorbeeld van het gebruik omp_get_dynamic.
omp_get_max_threads
Retourneert een geheel getal dat gelijk is aan of groter is dan het aantal threads dat beschikbaar zou zijn als een parallelle regio zonder num_threads op dat punt in de code is gedefinieerd.
int omp_get_max_threads( )
Opmerkingen
Zie 3.1.3 omp_get_max_threads functie voor meer informatie.
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
Retourneert een waarde die aangeeft of geneste parallelisme is ingeschakeld.
int omp_get_nested( );
Retourwaarde
Een waarde die niet nul is, betekent dat geneste parallellisme is ingeschakeld.
Opmerkingen
Geneste parallelle uitvoering wordt opgegeven met omp_set_nested en OMP_NESTED.
Zie 3.1.10 omp_get_nested functie voor meer informatie.
Example
Zie omp_set_nested voor een voorbeeld van het gebruik omp_get_nested.
omp_get_num_procs
Retourneert het aantal processors dat beschikbaar is wanneer de functie wordt aangeroepen.
int omp_get_num_procs();
Opmerkingen
Zie 3.1.5 omp_get_num_procs functie voor meer informatie.
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 (geeft het aantal threads terug)
Retourneert het aantal threads in de parallelle regio.
int omp_get_num_threads( );
Opmerkingen
Zie 3.1.2 omp_get_num_threads functie voor meer informatie.
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
Retourneert het threadnummer van de thread die actief is in zijn threadteam.
int omp_get_thread_num( );
Opmerkingen
Zie 3.1.4 omp_get_thread_num functie voor meer informatie.
Example
Zie parallel voor een voorbeeld van het gebruik omp_get_thread_num.
omp_get_wtick
Retourneert het aantal seconden tussen de klokklokken van de processor.
double omp_get_wtick( );
Opmerkingen
Zie 3.3.2 omp_get_wtick functie voor meer informatie.
Example
Zie omp_get_wtime voor een voorbeeld van het gebruik omp_get_wtick.
omp_get_wtime
Retourneert een waarde in seconden van de tijd die vanaf een bepaald punt is verstreken.
double omp_get_wtime( );
Retourwaarde
Retourneert een waarde in seconden van de tijd die is verstreken van een willekeurig, maar consistent punt.
Opmerkingen
Dat punt blijft consistent tijdens de uitvoering van het programma, waardoor toekomstige vergelijkingen mogelijk zijn.
Zie 3.3.1 omp_get_wtime functie voor meer informatie.
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
Retourneert niet-nul indien aangeroepen vanuit een parallelle regio.
int omp_in_parallel( );
Opmerkingen
Zie 3.1.6 omp_in_parallel functie voor meer informatie.
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
Initialiseert een eenvoudige vergrendeling.
void omp_init_lock(
omp_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_lock_t.
Opmerkingen
Zie 3.2.1 omp_init_lock en omp_init_nest_lock functies voor meer informatie.
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
Initialiseert een vergrendeling.
void omp_init_nest_lock(
omp_nest_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_nest_lock_t.
Opmerkingen
Het eerste aantal nesten is nul.
Zie 3.2.1 omp_init_lock en omp_init_nest_lock functies voor meer informatie.
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
Geeft aan dat het aantal threads dat beschikbaar is in toekomstige parallelle regio's, kan worden aangepast door de runtime.
void omp_set_dynamic(
int val
);
Parameterwaarden
val
Een waarde die aangeeft of het aantal threads dat beschikbaar is in toekomstige parallelle regio's, kan worden aangepast door de runtime. Als het niet-nul is, kan de runtime het aantal threads aanpassen, als nul, de runtime het aantal threads niet dynamisch aanpast.
Opmerkingen
Het aantal threads overschrijdt nooit de waarde die is ingesteld door omp_set_num_threads of OMP_NUM_THREADS.
Gebruik omp_get_dynamic om de huidige instelling van omp_set_dynamic weer te geven.
De instelling voor omp_set_dynamic overschrijft de instelling van de omgevingsvariabele OMP_DYNAMIC.
Zie 3.1.7 omp_set_dynamic functie voor meer informatie.
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
Hiermee blokkeert u de uitvoering van threads totdat er een vergrendeling beschikbaar is.
void omp_set_lock(
omp_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_lock_t dat is geïnitialiseerd met omp_init_lock.
Opmerkingen
Zie de functies 3.2.3 omp_set_lock en omp_set_nest_lock voor meer informatie.
Voorbeelden
Zie omp_init_lock voor een voorbeeld van het gebruik omp_set_lock.
omp_set_nest_lock
Hiermee blokkeert u de uitvoering van threads totdat er een vergrendeling beschikbaar is.
void omp_set_nest_lock(
omp_nest_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_nest_lock_t dat met omp_init_nest_lock is geïnitialiseerd.
Opmerkingen
Zie de functies 3.2.3 omp_set_lock en omp_set_nest_lock voor meer informatie.
Voorbeelden
Zie omp_init_nest_lock voor een voorbeeld van het gebruik omp_set_nest_lock.
omp_set_nested
Hiermee schakelt u geneste parallelle uitvoering in.
void omp_set_nested(
int val
);
Parameterwaarden
val
Een niet-nulwaarde maakt geneste parallelle processen mogelijk, terwijl nul geneste parallelle processen uitschakelt.
Opmerkingen
Genest OMP-parallelisme kan worden ingeschakeld met omp_set_nested of door de omgevingsvariabele OMP_NESTED in te stellen.
De instelling voor omp_set_nested overschrijft de instelling van de omgevingsvariabele OMP_NESTED.
Het inschakelen van de omgevingsvariabele kan een ander operationeel programma verbreken, omdat het aantal threads exponentieel toeneemt bij het nesten van parallelle regio's. Een functie die zes keer wordt herhaald met het aantal OMP-threads dat is ingesteld op 4, vereist bijvoorbeeld 4.096 (4 tot de macht van 6) threads. Met uitzondering van I/O-gebonden toepassingen, worden de prestaties van een toepassing over het algemeen verslechterd als er meer threads zijn dan processors.
Gebruik omp_get_nested om de huidige instelling van omp_set_nested te tonen.
Voor meer informatie, zie 3.1.9 omp_set_nested functie.
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
Stelt het aantal threads in voor aankomende parallelle gebieden, tenzij dit wordt overschreven door een num_threads-clausule.
void omp_set_num_threads(
int num_threads
);
Parameterwaarden
num_threads
Het aantal threads in de parallelle regio.
Opmerkingen
Zie 3.1.1 omp_set_num_threads functie voor meer informatie.
Example
Zie omp_get_num_threads voor een voorbeeld van het gebruik omp_set_num_threads.
omp_test_lock
Hiermee wordt geprobeerd een vergrendeling in te stellen, maar wordt de uitvoering van threads niet geblokkeerd.
int omp_test_lock(
omp_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_lock_t dat is geïnitialiseerd met omp_init_lock.
Opmerkingen
Zie de functies 3.2.5 omp_test_lock en omp_test_nest_lock voor meer informatie.
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
Probeert een nestbare vergrendeling te zetten, maar blokkeert de uitvoering van de thread niet.
int omp_test_nest_lock(
omp_nest_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_nest_lock_t dat met omp_init_nest_lock is geïnitialiseerd.
Opmerkingen
Zie de functies 3.2.5 omp_test_lock en omp_test_nest_lock voor meer informatie.
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
Hiermee wordt een vergrendeling vrijgegeven.
void omp_unset_lock(
omp_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_lock_t dat is geïnitialiseerd met omp_init_lock, die eigendom is van de thread en die wordt uitgevoerd in de functie.
Opmerkingen
Zie de functies 3.2.4 omp_unset_lock en omp_unset_nest_lock voor meer informatie.
Example
Zie omp_init_lock voor een voorbeeld van het gebruik omp_unset_lock.
omp_unset_nest_lock
Ontgrendelt een nestbare vergrendeling.
void omp_unset_nest_lock(
omp_nest_lock_t *lock
);
Parameterwaarden
vergrendeling
Een variabele van het type omp_nest_lock_t dat is geïnitialiseerd met omp_init_nest_lock, die eigendom is van de thread en die wordt uitgevoerd in de functie.
Opmerkingen
Zie de functies 3.2.4 omp_unset_lock en omp_unset_nest_lock voor meer informatie.
Example
Zie omp_init_nest_lock voor een voorbeeld van het gebruik omp_unset_nest_lock.