Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Concurrency Runtime permite uma variedade de modelos de programação. Estes modelos podem sobrepor-se ou complementar os modelos de outras bibliotecas. Os documentos nesta seção comparam o OpenMP com o Concurrency Runtime e fornecem exemplos sobre como migrar o código OpenMP existente para usar o Concurrency Runtime.
O modelo de programação OpenMP é definido por um padrão aberto e tem ligações bem definidas para as linguagens de programação Fortran e C/C++. As versões 2.0 e 2.5 do OpenMP, que são suportadas pelo compilador Microsoft C++, são adequadas para algoritmos paralelos que são iterativos; ou seja, eles executam iteração paralela sobre uma matriz de dados. O OpenMP 3.0 suporta tarefas não iterativas, além de tarefas iterativas.
OpenMP é mais eficiente quando o grau de paralelismo é pré-determinado e corresponde aos recursos disponíveis no sistema. O modelo OpenMP é uma combinação especialmente boa para computação de alto desempenho, onde problemas computacionais muito grandes são distribuídos pelos recursos de processamento de um computador. Nesse cenário, o ambiente de hardware geralmente é fixo e o desenvolvedor pode razoavelmente esperar ter acesso exclusivo a todos os recursos de computação quando o algoritmo é executado.
No entanto, ambientes de computação menos restritos podem não ser uma boa combinação para o OpenMP. Por exemplo, problemas recursivos (como o algoritmo quicksort ou a pesquisa de uma árvore de dados) são mais difíceis de implementar usando OpenMP 2.0 e 2.5. O Concurrency Runtime complementa os recursos do OpenMP fornecendo a Biblioteca de Agentes Assíncronos e a Biblioteca de Padrões Paralelos (PPL). A Biblioteca de Agentes Assíncronos suporta o paralelismo de tarefas de grão grosso; a biblioteca PPL suporta tarefas paralelas mais refinadas. O Concurrency Runtime fornece a infraestrutura necessária para executar operações em paralelo para que você possa se concentrar na lógica do seu aplicativo. No entanto, como o Concurrency Runtime permite uma variedade de modelos de programação, sua sobrecarga de agendamento pode ser maior do que outras bibliotecas de simultaneidade, como OpenMP. Portanto, recomendamos que você teste o desempenho incrementalmente ao converter seu código OpenMP existente para usar o Concurrency Runtime.
Quando migrar do OpenMP para o Concurrency Runtime
Pode ser vantajoso migrar o código OpenMP existente para usar o Concurrency Runtime nos seguintes casos.
| Processos | Vantagens do Concurrency Runtime |
|---|---|
| Você precisa de uma estrutura de programação simultânea extensível. | Muitos dos recursos no Concurrency Runtime podem ser estendidos. Você também pode combinar recursos existentes para compor novos. Como o OpenMP depende de diretivas de compilador, ele não pode ser facilmente estendido. |
| O seu pedido beneficiaria do bloqueio cooperativo. | Quando uma tarefa é bloqueada porque requer um recurso que ainda não está disponível, o Concurrency Runtime pode executar outras tarefas enquanto a primeira tarefa aguarda o recurso. |
| Seu aplicativo se beneficiaria do balanceamento dinâmico de carga. | O Concurrency Runtime usa um algoritmo de agendamento que ajusta a alocação de recursos de computação à medida que as cargas de trabalho mudam. No OpenMP, quando o agendador aloca recursos de computação para uma região paralela, essas alocações de recursos são fixadas ao longo da computação. |
| Você precisa de suporte para tratamento de exceções. | O PPL permite capturar exceções dentro e fora de uma região paralela ou loop. No OpenMP, você deve manipular a exceção dentro da região paralela ou loop. |
| Você precisa de um mecanismo de cancelamento. | O PPL permite que os aplicativos cancelem tarefas individuais e árvores paralelas de trabalho. OpenMP requer que o aplicativo implemente seu próprio mecanismo de cancelamento. |
| Você necessita de código paralelo para terminar em um contexto diferente do que aquele em que começa. | O Concurrency Runtime permite iniciar uma tarefa em um contexto e, em seguida, aguardar ou cancelar essa tarefa em outro contexto. No OpenMP, todo o trabalho paralelo deve terminar no contexto a partir do qual começa. |
| Você precisa de suporte aprimorado de depuração. | O Visual Studio fornece as janelas Pilhas paralelas e Tarefas paralelas para que você possa depurar mais facilmente aplicativos multithreaded. Para obter mais informações sobre o suporte de depuração para o Concurrency Runtime, consulte Utilização da janela 'Tarefas', Utilização da janela 'Pilhas Paralelas' e Guia passo a passo: Depuração de uma aplicação paralela. |
Quando não migrar do OpenMP para o ambiente de execução de concorrência
Os casos a seguir descrevem quando pode não ser apropriado migrar o código OpenMP existente para usar o Concurrency Runtime.
| Processos | Explicação |
|---|---|
| Seu aplicativo já atende aos seus requisitos. | Se estiver satisfeito com o desempenho da aplicação e o suporte de depuração atual, a migração pode não ser apropriada. |
| Os corpos de ciclos paralelos executam pouco trabalho. | A sobrecarga do agendador de tarefas na Concurrency Runtime pode não compensar os benefícios de executar o corpo do ciclo em paralelo, especialmente quando o corpo do ciclo é relativamente pequeno. |
| A sua candidatura está escrita em C. | Como o Concurrency Runtime usa muitos recursos C++, ele pode não ser adequado quando você não pode escrever código que permita que o aplicativo C o use totalmente. |
Tópicos relacionados
Como Converter um loop paralelo OpenMP para usar o Tempo de Execução com Simultaneidade
Dado um loop básico que utiliza as diretivas parallel e for do OpenMP, demonstra como convertê-lo para usar o algoritmo do Concurrency Runtime concurrency::parallel_for.
Como: Converter um loop OpenMP que usa cancelamento para usar o tempo de execução de simultaneidade
Dada uma construção OpenMP parallel for que não requer que todas as iterações sejam executadas, demonstra-se como convertê-la para utilizar o mecanismo de cancelamento do Concurrency Runtime.
Como: Converter um loop OpenMP que usa o tratamento de exceção para usar o tempo de execução de simultaneidade
Dado um ciclo paralelo OpenMP para que executa o tratamento de exceções, explicar como convertê-lo para usar o mecanismo de manipulação de exceções do Concurrency Runtime.
Como: Converter um loop OpenMP que utiliza uma variável de redução para usar o tempo de execução paralelo
Dado um loop paralelofor do OpenMP que usa a cláusula reduction, demonstra como convertê-lo para usar o Concurrency Runtime.
Ver também
Runtime de Concorrência
OpenMP
Biblioteca de Padrões Paralelos (PPL)
Biblioteca de agentes assíncronos