Partilhar via


E. Comportamentos definidos pela implementação no OpenMP C/C++

Este apêndice resume os comportamentos descritos como "definidos pela implementação" nesta API. Cada comportamento é referenciado de volta à sua descrição na especificação principal.

Observações

Uma implementação é necessária para definir e documentar seu comportamento nesses casos, mas essa 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 desativado e o número de threads solicitado 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++, em uma região paralela não aninhada, estão disponíveis 64 threads (o máximo).

  • Número de processadores: O número de processadores físicos que realmente hospedam os threads em um determinado momento é definido pela implementação (veja a página 10).

    No Visual C++, esse número não é constante e é controlado pelo sistema operacional.

  • Criação de equipa de threads: O número de threads numa equipa 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.

  • cronograma (tempo de execução): A decisão sobre o agendamento é adiada até o tempo de execução. O tipo de agenda e o tamanho do bloco podem ser escolhidos em tempo de execução definindo a variável de OMP_SCHEDULE ambiente. Se essa variável de ambiente não estiver definida, o cronograma resultante será definido pela implementação (consulte a página 13).

    No Visual C++, o tipo de agenda é static sem tamanho de bloco.

  • Agendamento padrão: Na ausência da cláusula de calendário, o calendário por defeito é definido pela implementação (ver página 13).

    No Visual C++, o tipo de agendamento padrão é static sem tamanho de segmento.

  • ATÔMICO: É definido pela implementação se esta substitui todas as diretivas atomic por diretivas critical que têm o mesmo nome único (ver página 20).

    No Visual C++, se os dados modificados pelo atomic não estiverem em um alinhamento natural ou se tiverem um ou dois bytes de comprimento, todas as operações atômicas que satisfizerem 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 explicitamente definido 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 de thread dinâmico é 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 agenda é static sem tamanho de bloco.

  • OMP_NUM_THREADS variável de ambiente: Se nenhum valor for especificado para a OMP_NUM_THREADS variável de ambiente, 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 suportar, o número de threads a serem usados será definido pela implementação.

    No Visual C++, se o valor especificado for zero ou menos, 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.

  • OMP_DYNAMIC variável de ambiente: O valor padrão é definido pela implementação.

    No Visual C++, o padrão é FALSE.