Partilhar via


4. Variáveis ambientais

Este capítulo descreve as variáveis de ambiente da API OpenMP C e C++ (ou mecanismos específicos de plataforma semelhantes) que controlam a execução de código paralelo. Os nomes das variáveis de ambiente devem ser maiúsculos. Os valores atribuídos a eles são insensíveis a maiúsculas e minúsculas e podem ter espaços em branco no início e no fim. As modificações nos valores após o início do programa são ignoradas.

As variáveis de ambiente são as seguintes:

  • OMP_SCHEDULE define o tipo de agendamento de tempo de execução e o tamanho do bloco.
  • OMP_NUM_THREADS define o número de threads a serem usados durante a execução.
  • OMP_DYNAMIC habilita ou desabilita o ajuste dinâmico do número de threads.
  • OMP_NESTED habilita ou desabilita o paralelismo aninhado.

Os exemplos neste capítulo apenas demonstram como essas variáveis podem ser definidas em ambientes Unix C shell (csh). Nos ambientes Korn shell e DOS, as ações são semelhantes:

CSH:
setenv OMP_SCHEDULE "dynamic"

KSH:
export OMP_SCHEDULE="dynamic"

DOS:
set OMP_SCHEDULE="dynamic"

4.1 OMP_SCHEDULE

OMP_SCHEDULE aplica-se apenas a for e parallel for diretivas que têm o runtime tipo de cronograma. O tipo de agendamento e o tamanho do bloco para todos esses loops podem ser definidos em tempo de execução. Defina essa variável de ambiente para qualquer tipo de agenda reconhecido e para um chunk_size opcional.

No caso de instruções for e parallel for que tiverem um tipo de agenda diferente de runtime, OMP_SCHEDULE é ignorado. O valor padrão para essa variável de ambiente é definido pela implementação. Se o chunk_size opcional estiver definido, o valor deve ser positivo. Se chunk_size não estiver definido, um valor de 1 será assumido, exceto quando o agendamento for static. Para uma static agenda, o tamanho de bloco padrão é definido como o espaço de iteração do ciclo dividido pelo número de threads aplicados ao loop.

Exemplo:

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

Referências cruzadas

4.2 OMP_NUM_THREADS

A OMP_NUM_THREADS variável de ambiente define o número padrão de threads a serem usados durante a execução. OMP_NUM_THREADS é ignorado se esse número for explicitamente alterado chamando a rotina da omp_set_num_threads biblioteca. Também é ignorado se houver uma cláusula explícita num_threads em uma diretiva parallel.

O valor da OMP_NUM_THREADS variável ambiente deve ser um número inteiro positivo. Seu efeito depende se o ajuste dinâmico do número de threads está habilitado. Para um conjunto abrangente de regras sobre a interação entre a variável de ambiente e o ajuste dinâmico de threads, consulte a OMP_NUM_THREADSseção 2.3.

O número de threads a serem usados é definido pela implementação se:

  • a OMP_NUM_THREADS variável de ambiente não é especificada,
  • o valor especificado não é um número inteiro positivo, ou
  • O valor é maior do que o número máximo de threads que o sistema pode suportar.

Exemplo:

setenv OMP_NUM_THREADS 16

Referências cruzadas

4.3 OMP_DYNAMIC

A OMP_DYNAMIC variável de ambiente permite ou desativa o ajuste dinâmico do número de threads disponíveis para a execução de regiões paralelas. OMP_DYNAMIC é ignorado quando o ajuste dinâmico é explicitamente ativado ou desativado chamando a rotina da omp_set_dynamic biblioteca. O seu valor deve ser TRUE ou FALSE.

Se OMP_DYNAMIC estiver definido como TRUE, o número de threads usados para executar regiões paralelas pode ser ajustado pelo ambiente de tempo de execução para melhor usar os recursos do sistema. Se OMP_DYNAMIC estiver definido como FALSE, o ajuste dinâmico será desativado. A condição padrão é definida pela implementação.

Exemplo:

setenv OMP_DYNAMIC TRUE

Referências cruzadas

4.4 OMP_NESTED

A variável de ambiente OMP_NESTED habilita ou desabilita o paralelismo aninhado, a menos que o paralelismo aninhado seja habilitado ou desabilitado chamando a rotina de biblioteca omp_set_nested. Se OMP_NESTED estiver definido como TRUE, o paralelismo aninhado estará habilitado. Se OMP_NESTED estiver definido como FALSE, o paralelismo aninhado será desativado. O valor predefinido é FALSE.

Exemplo:

setenv OMP_NESTED TRUE

Referência cruzada