Partilhar via


4. Variáveis de ambiente

Este capítulo descreve as variáveis de ambiente API C e C++ do OpenMP (ou mecanismos semelhantes específicos da plataforma) que controlam a execução de código paralelo. Os nomes das variáveis de ambiente devem estar em letras maiúsculas. Os valores atribuídos a eles não diferenciam maiúsculas de minúsculas e podem ter espaço em branco à esquerda e à direita. 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 agenda em tempo de execução e o tamanho da parte.
  • 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 demonstram apenas como essas variáveis podem ser definidas em ambientes de shell do Unix C (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 somente a diretivas for e parallel for que têm o tipo runtime de agenda. O tipo de agenda e o tamanho da parte para todos esses loops podem ser definidos em tempo de execução. Defina essa variável de ambiente para qualquer tipo de agenda reconhecida e para um chunk_size opcional.

Para as diretivas for e parallel for que têm um tipo de agenda diferente de runtime, OMP_SCHEDULE são ignorados. O valor padrão para essa variável de ambiente é definido pela implementação. Se o chunk_size opcional for definido, o valor deverá ser positivo. Se chunk_size não for definido, um valor de 1 será assumido, exceto quando a agenda for static. Para uma agenda static, o tamanho da parte padrão é definido pelo espaço de iteração do loop 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 variável de ambiente OMP_NUM_THREADS define o número padrão de threads a serem usados durante a execução. OMP_NUM_THREADS será ignorado se esse número for explicitamente alterado chamando a rotina da biblioteca omp_set_num_threads. Também será ignorado se houver uma cláusula explícita num_threads em uma diretiva parallel.

O valor da variável de ambiente OMP_NUM_THREADS 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 OMP_NUM_THREADS e o ajuste dinâmico de threads, consulte a seção 2.3.

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

  • a variável de ambienteOMP_NUM_THREADS não for especificada,
  • o valor especificado não for um número inteiro positivo, ou
  • o valor for maior que o número máximo de threads que o sistema pode dar suporte.

Exemplo:

setenv OMP_NUM_THREADS 16

Referências-cruzadas

4.3 OMP_DYNAMIC

A variável de ambienteOMP_DYNAMIC habilita ou desabilita 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 habilitado ou desabilitado chamando a rotina da bibliotecaomp_set_dynamic. 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 poderá ser ajustado pelo ambiente de runtime para melhor usar os recursos do sistema. Se OMP_DYNAMIC estiver definido como FALSE, o ajuste dinâmico será desabilitado. 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 esse paralelismo esteja habilitado ou desabilitado chamando a rotina da bibliotecaomp_set_nested. Se OMP_NESTED estiver definido como TRUE, o paralelismo aninhado está habilitado. Se OMP_NESTED estiver definido como FALSE, o paralelismo aninhado está desabilitado. O valor padrão é FALSE.

Exemplo:

setenv OMP_NESTED TRUE

Referência cruzada