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
- para diretiva
- Diretiva parallel for
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 ambiente
OMP_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
- cláusula num_threads
- função omp_set_num_threads
- funçãoomp_set_dynamic
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
- funçãoomp_set_nested