Compartilhar via


Migrando do OpenMP para o Runtime de simultaneidade

O Runtime de simultaneidade permite uma variedade de modelos de programação. Esses modelos podem se sobrepor ou complementar os modelos de outras bibliotecas. Os documentos dessa seção compare OpenMP para o Runtime de simultaneidade e forneça exemplos sobre como migrar o código do 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 suportadas 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 iterativas, 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 OpenMP é uma correspondência especialmente bom para a computação de alto desempenho, onde o muito 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 razoavelmente pode esperar ter acesso exclusivo para todos os recursos de computação, quando o algoritmo é executado.

No entanto, menos restritos ambientes de computação pode não ser uma boa correspondência para OpenMP. Por exemplo, os problemas de recursiva (como, por exemplo, o algoritmo quicksort ou pesquisando 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 a Biblioteca de agentes assíncronos e o Biblioteca paralela de padrões (PPL). A biblioteca de agentes assíncronos suporta o paralelismo de tarefas refinados; a PPL suporta mais refinadas de tarefas em paralelo. 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, seu agendamento de sobrecarga pode ser maior do que outras bibliotecas de simultaneidade como OpenMP. Portanto, recomendamos que você teste incrementalmente desempenho quando você converte seu código do OpenMP existente para usar o Runtime de simultaneidade.

Quando migrar do OpenMP para o Runtime de simultaneidade

Pode ser vantajoso para migrar o código do OpenMP existente para usar o Runtime de simultaneidade nos seguintes casos.

Casos

Vantagens do Runtime de simultaneidade

Você precisa de 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 do bloqueio cooperativo.

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

Seu aplicativo se beneficiaria do balanceamento de carga dinâmica.

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

Exigir o suporte à manipulação de exceção.

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

Você precisa de um mecanismo de cancelamento.

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

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

O Runtime de simultaneidade permite que você iniciar uma tarefa em um contexto e, em seguida, aguardar ou cancelar a tarefa em outro contexto. Em OpenMP, todo o trabalho paralelo deve terminar no contexto do qual ele é iniciado.

Exigir o suporte avançado a depuração.

Visual Studio fornece a Paralela pilhas e Tarefas paralelas windows para que mais facilmente, você pode depurar aplicativos multithread.

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 Demonstra Passo a passo: Depurando um aplicativo paralelo.

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

Os casos a seguir descrevem quando ele pode não ser apropriado migrar o código do 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 do aplicativo e o suporte de depuração atual, talvez não seja apropriada a migração.

Os corpos de loop paralelo executam 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 ao aplicativo c totalmente usá-lo.

Tópicos relacionados

Consulte também

Conceitos

Runtime de simultaneidade

Biblioteca paralela de padrões (PPL)

Biblioteca de agentes assíncronos

Outros recursos

OpenMP in Visual C++