E. Comportamentos definidos por implementação no OpenMP C/C++
Esse apêndice resume os comportamentos descritos como "definidos pela implementação" nesta API. Cada comportamento é referenciado entre referências à sua descrição na especificação principal.
Comentários
Uma implementação é necessária para definir e documentar seu comportamento nesses casos, mas esta lista pode estar incompleta.
Número de threads: se uma região paralela for encontrada enquanto o ajuste dinâmico do número de threads estiver desabilitado, e o número de threads solicitados para a região paralela for maior do que o número que o sistema de tempo de execução pode fornecer, o comportamento do programa será definido pela implementação (consulte a página 9).
No Visual C++, para uma região paralela não aninhada, 64 threads (o máximo) serão fornecidos.
Número de processadores: número de processadores físicos que realmente hospedam os threads a qualquer momento é definido pela implementação (consulte a página 10).
No Visual C++, esse número não é constante e é controlado pelo sistema operacional.
Criar times de threads: o número de threads em uma equipe que executa uma região paralela aninhada é definido pela implementação (consulte a página 10).
No Visual C++, esse número é determinado pelo sistema operacional.
schedule(runtime): a decisão sobre o agendamento é adiada até o tempo de execução. O tipo de agendamento e o tamanho da parte podem ser escolhidos em tempo de execução definindo a variável de ambiente
OMP_SCHEDULE
. Se essa variável de ambiente não estiver definida, o agendamento resultante será definido pela implementação (consulte a página 13).No Visual C++, o tipo de agendamento
static
não tem tamanho de parte.Agendamento padrão: na ausência da cláusula de agendamento, o agendamento padrão é definido pela implementação (consulte a página 13).
No Visual C++, o tipo de agendamento padrão
static
não tem tamanho de parte.ATOMIC: é definido pela implementação se uma implementação substitui todas as diretivas
atomic
por diretivascritical
que têm o mesmo nome exclusivo (consulte a página 20).No Visual C++, se os dados modificados por atomic não estiverem em um alinhamento natural ou se for um ou dois bytes longos, todas as operações atômicas que satisfazem essa propriedade usarão uma seção crítica. Caso contrário, as seções críticas não serão usadas.
omp_get_num_threads: se o número de threads não tiver sido definido explicitamente pelo usuário, o padrão será definido pela implementação (consulte a página 9).
No Visual C++, o número padrão de threads é igual ao número de processadores.
omp_set_dynamic: o padrão para ajuste dinâmico de thread é definido pela implementação.
No Visual C++, o padrão é
FALSE
.omp_set_nested: quando o paralelismo aninhado é habilitado, o número de threads usados para executar regiões paralelas aninhadas é definido pela implementação.
No Visual C++, o número de threads é determinado pelo sistema operacional.
OMP_SCHEDULE variável de ambiente: o valor padrão para essa variável de ambiente é definido pela implementação.
No Visual C++, o tipo de agendamento
static
não tem tamanho de parte.OMP_NUM_THREADS variável de ambiente: se nenhum valor for especificado para a variável de ambiente
OMP_NUM_THREADS
ou se o valor especificado não for um inteiro positivo ou se o valor for maior do que o número máximo de threads que o sistema pode dar suporte, o número de threads a serem usados será definido pela implementação.No Visual C++, se o valor especificado for zero ou menor, o número de threads será igual ao número de processadores. Se o valor for maior que 64, o número de threads será 64.
Variável de ambiente OMP_DYNAMIC: o valor padrão é definido pela implementação.
No Visual C++, o padrão é
FALSE
.