Compartilhar via


Migrando de OpenMP ao tempo de execução de concorrência

O Runtime de simultaneidade permite uma variedade de modelos de programação.Esses modelos podem se sobrepor ou complementam os modelos de outras bibliotecas.Os documentos dessa seção compare OpenMP para o Runtime de simultaneidade e forneça exemplos sobre como migrar código OpenMP existente para usar o Runtime de simultaneidade.

O modelo de programação do OpenMP é definido por um padrão aberto e tem ligações bem definidas para as linguagens de programação Fortran e C/C++.OpenMP versões 2.0 e 2.5, que são suportados pelo compilador Visual C++, são adequadas para algoritmos paralelos são iterativos; ou seja, eles executam iteração paralela em uma matriz de dados.OpenMP 3.0 oferece suporte a tarefas não repetitivo, além de tarefas repetitivo.

OpenMP é mais eficiente quando o grau de paralelismo é predeterminado e coincide com os recursos disponíveis no sistema.O modelo de OpenMP é um especialmente adequado para computação de alto desempenho, onde grandes problemas computacionais são distribuídos entre os recursos de processamento de um computador.Nesse cenário, o ambiente de hardware geralmente é fixo e o desenvolvedor pode esperar ter acesso exclusivo a todos os recursos de computação quando o algoritmo é executado.

No entanto, menos restrito ambientes de computação pode não ser adequado para OpenMP.Por exemplo, problemas de recursiva (como o algoritmo quicksort ou pesquisar uma árvore de dados) são mais difíceis de implementar usando OpenMP 2.0 e 2.5.O Runtime de simultaneidade complementa os recursos do OpenMP fornecendo o Biblioteca de agentes assíncronos e Biblioteca paralela de padrões (PPL).A biblioteca de agentes assíncronos suporta paralelismo de tarefas refinados; a PPL suporta mais refinadas tarefas paralelas.O Runtime de simultaneidade fornece a infra-estrutura necessária para executar operações em paralelo para que você possa se concentrar na lógica do seu aplicativo.No entanto, como o Runtime de simultaneidade permite uma variedade de modelos de programação, o agendamento de sobrecarga pode ser maior que outras bibliotecas de simultaneidade como OpenMP.Portanto, recomendamos que você teste desempenho incrementalmente quando você converte seu código OpenMP existente para usar o Runtime de simultaneidade.

Quando migrar do OpenMP para o Runtime de simultaneidade

Talvez seja vantajoso migrar código OpenMP existente para usar o Runtime de simultaneidade nos seguintes casos.

Casos

Vantagens do Runtime de simultaneidade

Exigem uma estrutura extensível de programação simultânea.

Muitos dos recursos no Runtime de simultaneidade podem ser estendidos.Você também pode combinar os recursos existentes para compor novas.Como OpenMP depende das diretivas de compilador, ele não pode ser facilmente estendido.

Seu aplicativo se beneficiaria de bloqueio cooperativo.

Quando uma tarefa bloqueia porque requer um recurso não está disponível, o Runtime de simultaneidade pode realizar outras tarefas enquanto aguarda a primeira tarefa do recurso.

Seu aplicativo se beneficiaria de balanceamento dinâmico de carga.

O Runtime de simultaneidade usa um algoritmo de programação que ajusta a alocação de recursos de computação, como alterar as cargas de trabalho.OpenMP, quando o Agendador aloca recursos de computação para uma região paralela, essas alocações são fixos em toda a computação.

Requer suporte de manipulação de exceção.

A PPL permite capturar exceções dentro e fora de uma região paralela ou loop.OpenMP, você deve tratar a exceção dentro da região paralela ou loop.

Requerem um mecanismo de cancelamento.

A PPL permite que aplicativos Cancelar tarefas individuais e árvores paralelas de trabalho.OpenMP requer o aplicativo implementar seu próprio mecanismo de cancelamento.

Requer código paralelo para terminar em um contexto diferente do qual ele é iniciado.

O Runtime de simultaneidade permite iniciar uma tarefa em um contexto e esperar ou Cancelar tarefa em outro contexto.Em OpenMP, todo o trabalho paralelo deve terminar no contexto do qual ele é iniciado.

Requer suporte de depuração aprimorado.

Visual Studio fornece a Pilhas paralelo e Tarefas paralelas windows para que mais facilmente você pode depurar aplicativos multissegmentados.

Para obter mais informações sobre suporte para o Runtime de simultaneidade de depuração, consulte Usando a janela de tarefas paralelas, Usando a janela de pilhas paralela, e Passo a passo: Depurando um aplicativo paralelo.

Quando não migrar do OpenMP para o Runtime de simultaneidade

Casos a seguir descrevem quando podem não ser apropriada migrar código OpenMP existente para usar o Runtime de simultaneidade.

Casos

Explicação

Seu aplicativo já atende às suas necessidades.

Se você estiver satisfeito com o desempenho de aplicativos e suporte de depuração atual, migração pode não ser apropriada.

O corpo do loop paralelo realizar pouco trabalho.

A sobrecarga do Agendador de tarefas do Runtime de simultaneidade não pode superar os benefícios de executar o corpo do loop em paralelo, especialmente quando o corpo do loop é relativamente pequeno.

Seu aplicativo é escrito em c.

Como o Runtime de simultaneidade usa muitos recursos do C++, talvez não seja adequado quando você não pode escrever código que permite que o aplicativo c para usá-lo totalmente.

Tópicos relacionados

Consulte também

Conceitos

Tempo de execução de concorrência

A modelos paralela a biblioteca (PPL)

Biblioteca de agentes assíncrono

Outros recursos

OpenMP no Visual C++