Compartilhar via


Migrando de OpenMP no Tempo de Execução de Simultaneidade

O tempo de execução de simultaneidade habilita uma variedade de modelos de programação. Esses modelos podem sobrepor ou complementar os modelos de outras bibliotecas. Os documentos nesta seção se comparam OpenMP ao tempo de execução de simultaneidade e fornecem exemplos sobre como migrar o código existente OpenMP para usar o tempo de execução de simultaneidade.

O modelo de programação OpenMP é definido por um padrão aberto e tem associações bem definidos para o Fortran e as linguagens de programação C/C++. As versões 2,0 e 2,5 OpenMP, que têm suporte pelo compilador do Visual C++, são apropriados para os algoritmos que são iterativos paralelos; isto é, a execução paralela iteração sobre uma matriz de dados. OpenMP 3,0 da suporte a tarefas não iterativas além de tarefas iterativas.

OpenMP é mais eficiente quando o grau de paralelismo é índice e corresponde aos recursos disponíveis no sistema. O modelo OpenMP é uma boa correspondência especialmente para o capacidade de alto desempenho, onde os problemas computacionais muito grandes são distribuídos por meio dos recursos de processamento de um computador. Neste cenário, o ambiente de hardware geralmente é fixo e o desenvolvedor pode esperar razoavelmente ter acesso exclusivo a todos os recursos de computação quando o algoritmo é executado.

No entanto, menos ambientes restritos de computação não pode ser uma boa correspondência de OpenMP. Por exemplo, os problemas recursivas (como o algoritmo de quicksort ou a pesquisa de uma árvore de dados) são mais difíceis de implementar com OpenMP 2.0 e 2,5. O tempo de execução de simultaneidade complementa os recursos OpenMP fornecendo Biblioteca assíncrona de agentes e A paralela da biblioteca (PPL). A biblioteca assíncrona de agentes da suporte ao paralelismo de alta granularidade da tarefa; o da suporte a uma PPL tarefas paralelas mais refinados. O tempo de execução de simultaneidade fornece a infraestrutura necessária para executar operações em paralelo de forma que você possa se concentrar a lógica do aplicativo. Entretanto, como o tempo de execução de simultaneidade habilita uma variedade de modelos de programação, a sobrecarga de programação pode ser maior que outras bibliotecas de simultaneidade como OpenMP. Consequentemente, recomendamos que você teste o desempenho incremental quando você converte seu código existente OpenMP para usar o tempo de execução de simultaneidade.

Quando migrar OpenMP ao tempo de execução de simultaneidade

Pode ser vantajoso migrar o código existente OpenMP para usar o tempo de execução de simultaneidade nos seguintes casos.

Casos

Vantagens de tempo de execução de simultaneidade

Você precisar de uma estrutura extensível de programação simultâneo.

Muitos dos recursos em tempo de execução de simultaneidade podem ser estendidos. Você também pode combinar recursos existentes para compor novos. Como OpenMP confia em políticas do compilador, não pode ser facilmente estendido.

Seu aplicativo pode se beneficiar de bloqueio cooperativo.

Quando os blocos de uma tarefa pois o exige um recurso que não ainda está disponível, o tempo de execução de simultaneidade podem executar outras tarefas quando a primeira tarefa estiver aguardando o recurso.

Seu aplicativo pode se beneficiar de balanceamento de carga dinâmico.

O tempo de execução de simultaneidade usa um algoritmo de programação que ajuste a alocação de recursos de computação porque as cargas de trabalho são alterados. Em OpenMP, quando o agendador atribui recursos de computação a uma região paralela, as atribuições de recursos estão corrigidas durante a computação.

Você precisa do suporte de manipulação de exceção.

O PPL permite capturar exceções dentro e fora de uma região paralela ou dá-las loop. Em OpenMP, você deve controlar a exceção na região paralela ou dá-la loop.

Você precisar de um mecanismo de cancelamento.

O PPL permite que aplicativos cancelar tarefas individuais e árvores paralelas de trabalho. OpenMP requer o aplicativo implementa seu próprio mecanismo de cancelamento.

Você precisa do código paralelo para ser concluída em um contexto diferente da parte.

O tempo de execução de simultaneidade permite iniciar uma tarefa em um contexto, e espera-o em em ou cancelá-lo essa tarefa em outro contexto. Em OpenMP, todo o trabalho paralelo deve concluir no contexto no qual parte.

Você precisa do suporte avançado de depuração.

Visual Studio fornece as janelas de Pilhas Paralelas e de Tarefas Paralelas de forma que você possa mais facilmente depurar aplicativos multi-threaded.

Para obter mais informações sobre o suporte à depuração do tempo de execução de simultaneidade, consulte Usando a janela Tarefas, Usando a janela Pilhas Paralelas, e Instruções passo a passo: depurando um aplicativo paralelo.

Quando não migrar OpenMP ao tempo de execução de simultaneidade

Os seguintes casos descrevem quando talvez não seja apropriado migrar o código existente OpenMP para usar o tempo de execução de simultaneidade.

Casos

Explicação

Seu aplicativo já atende aos requisitos.

Se estiver satisfeito com o desempenho do aplicativo e o suporte à depuração atuais, a migração pode não ser apropriado.

Os corpos de loop paralelos e executam trabalho.

A sobrecarga o agendador de tarefas de tempo de execução de simultaneidade não pode ultrapassar os benefícios da execução do corpo de loop em paralelo, especialmente quando o corpo de loop for relativamente pequeno.

O aplicativo é gravado em C.

Como o tempo de execução de simultaneidade usa muitos recursos do C++, talvez não seja apropriado quando não pode escrever o código que permite que o aplicativo C o usar completamente.

Tópicos relacionados

Consulte também

Conceitos

Tempo de Execução de Simultaneidade

Biblioteca de padrões paralelos (PPL)

Biblioteca de Agentes Assíncronos

Outros recursos

OpenMP no Visual C++