Delen via


4. Omgevingsvariabelen

In dit hoofdstuk worden de omgevingsvariabelen openMP C en C++ API (of vergelijkbare platformspecifieke mechanismen) beschreven waarmee de uitvoering van parallelle code wordt bepaald. De namen van omgevingsvariabelen moeten hoofdletters bevatten. De waarden die eraan zijn toegewezen, zijn niet hoofdlettergevoelig en hebben mogelijk voorloop- en volgspaties. Wijzigingen in de waarden nadat het programma is gestart, worden genegeerd.

De omgevingsvariabelen zijn als volgt:

  • OMP_SCHEDULE stelt het uitvoeringstijdschematype en de segmentgrootte in.
  • OMP_NUM_THREADS stelt het aantal threads in dat tijdens de uitvoering moet worden gebruikt.
  • OMP_DYNAMIC schakelt de dynamische aanpassing van het aantal threads in of uit.
  • OMP_NESTED schakelt geneste parallelle uitvoering in of uit.

De voorbeelden in dit hoofdstuk laten alleen zien hoe deze variabelen kunnen worden ingesteld in Unix C Shell-omgevingen (csh). In de Korn-shell- en DOS-omgevingen zijn de acties vergelijkbaar:

csh:
setenv OMP_SCHEDULE "dynamic"

Ksh:
export OMP_SCHEDULE="dynamic"

DOS:
set OMP_SCHEDULE="dynamic"

4.1 OMP_SCHEDULE

OMP_SCHEDULE is alleen van toepassing op de for en parallel for richtlijnen die het schematype runtime hebben. Het schematype en de segmentgrootte voor al deze lussen kunnen tijdens runtime worden ingesteld. Stel deze omgevingsvariabele in op elk herkend schematype en op een optionele chunk_size.

Voor for en parallel for instructies met een ander schematype dan runtime, OMP_SCHEDULE wordt genegeerd. De standaardwaarde voor deze omgevingsvariabele is door de implementatie gedefinieerd. Als de optionele chunk_size is ingesteld, moet de waarde positief zijn. Als chunk_size niet is ingesteld, wordt uitgegaan van een waarde van 1, behalve wanneer het schema is staticingesteld. Voor een static schema wordt de standaardsegmentgrootte ingesteld op de iteratieruimte van de lus, gedeeld door het aantal threads dat voor de lus zijn gebruikt.

Voorbeeld:

setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"

Kruisverwijzingen

4.2 OMP_NUM_THREADS

De OMP_NUM_THREADS omgevingsvariabele stelt het standaardaantal threads in dat tijdens de uitvoering moet worden gebruikt. OMP_NUM_THREADS wordt genegeerd als dat nummer expliciet wordt gewijzigd door de omp_set_num_threads bibliotheekroutine aan te roepen. Het wordt ook genegeerd als er een expliciete num_threads clausule bij een parallel richtlijn staat.

De waarde van de OMP_NUM_THREADS omgevingsvariabele moet een positief geheel getal zijn. Het effect is afhankelijk van of dynamische aanpassing van het aantal threads is ingeschakeld. Zie OMP_NUM_THREADS voor een uitgebreide set regels over de interactie tussen de omgevingsvariabele en dynamische aanpassing van threads.

Het aantal threads dat moet worden gebruikt, wordt door de implementatie gedefinieerd als:

  • de OMP_NUM_THREADS omgevingsvariabele is niet opgegeven,
  • de opgegeven waarde geen positief geheel getal is of
  • de waarde groter is dan het maximum aantal threads dat het systeem kan ondersteunen.

Voorbeeld:

setenv OMP_NUM_THREADS 16

Kruisverwijzingen

4.3 OMP_DYNAMIC

Met de OMP_DYNAMIC omgevingsvariabele kunt u dynamisch aanpassen van het aantal threads dat beschikbaar is voor de uitvoering van parallelle regio's. OMP_DYNAMIC wordt genegeerd wanneer dynamische aanpassing expliciet is ingeschakeld of uitgeschakeld door de omp_set_dynamic bibliotheekroutine aan te roepen. De waarde moet TRUE of FALSE zijn.

Als OMP_DYNAMIC is ingesteld op TRUE, kan het aantal threads dat wordt gebruikt voor het uitvoeren van parallelle regio's door de runtime-omgeving worden aangepast om systeembronnen optimaal te benutten. Als OMP_DYNAMIC is ingesteld op FALSE, wordt de dynamische aanpassing uitgeschakeld. De standaardvoorwaarde is door de implementatie gedefinieerd.

Voorbeeld:

setenv OMP_DYNAMIC TRUE

Kruisverwijzingen

4.4 OMP_NESTED

De OMP_NESTED omgevingsvariabele schakelt geneste parallelle uitvoering in of uit, tenzij geneste parallelle uitvoering is ingeschakeld of uitgeschakeld door de omp_set_nested bibliotheekroutine aan te roepen. Als OMP_NESTED is ingesteld op TRUE, is geneste parallelle uitvoering ingeschakeld. Als OMP_NESTED is ingesteld op FALSE, is geneste parallelisme uitgeschakeld. De standaardwaarde is FALSE.

Voorbeeld:

setenv OMP_NESTED TRUE

Kruisverwijzing