Comparando o tempo de execução de concorrência a outros modelos de concorrência
Este documento descreve as diferenças entre os recursos e modelos de programação do Runtime de simultaneidade e outras tecnologias.Compreendendo como as vantagens do Runtime de simultaneidade comparam os benefícios de outros modelos de programação, você pode selecionar a tecnologia que melhor atende às necessidades de seus aplicativos.
Se você estiver usando outro modelo de programação, como o pool de threads do Windows ou OpenMP, há situações onde pode ser apropriado migrar para o Runtime de simultaneidade.Por exemplo, o tópico Migrando de OpenMP ao tempo de execução de concorrência descreve quando pode ser apropriado migrar do OpenMP para o Runtime de simultaneidade.No entanto, se você estiver satisfeito com o desempenho de aplicativos e suporte de depuração atual, migração não é necessária.
Você pode usar os recursos e benefícios de produtividade do Runtime de simultaneidade para complementar o seu aplicativo utiliza outro modelo de concorrência.O Runtime de simultaneidade não garante o balanceamento de carga quando vários agendadores de tarefa concorrem pelos mesmos recursos de computação.No entanto, quando as cargas de trabalho não se sobrepõem, esse efeito é mínimo.
Seções
Comparando o agendamento preventivo planejamento cooperativo
Comparando o Runtime de simultaneidade para a API do Windows
Comparando o Runtime de simultaneidade para OpenMP
Comparando o agendamento preventivo planejamento cooperativo
O modelo preventivo e cooperativo agendamento modelos são duas formas comuns de habilitar várias tarefas compartilhar recursos de computação, por exemplo, processadores ou segmentos de hardware.
Agendamento preemptivo e cooperativo
Agendamento preventivo é um mecanismo de rodízio, com base em prioridade que dá a cada acesso exclusivo da tarefa a um recurso de computação para um determinado período e alterna para outra tarefa.Agendamento preventivo é comum em sistemas operacionais de multitarefa, como o Windows. Planejamento cooperativo é um mecanismo que permite a cada acesso exclusivo da tarefa a um recurso de computação até que a tarefa seja concluída ou até que a tarefa gera seu acesso ao recurso.O Runtime de simultaneidade usa planejamento cooperativo junto com o Agendador preventivo do sistema operacional para obter a máxima utilização dos recursos de processamento.
Diferenças entre agendadores preemptivo e cooperativos
Preventivos agendadores de busca fornecer vários threads igual acesso a recursos para garantir que cada thread faz o progresso de computação.Em computadores que têm muitos recursos computacionais, garantindo acesso fair se torna menos problemático; No entanto, garantir a utilização eficiente dos recursos fica mais problemática.
O Agendador de modo de kernel preventivo requer o código do aplicativo dependem do sistema operacional para tomar decisões de planejamento.Inversamente, um agendador cooperativo do modo de usuário permite que o código do aplicativo tomar decisões de seus próprio agendamento.Como o planejamento cooperativo permite muitas decisões de planejamento a ser feita pelo aplicativo, reduz muito a sobrecarga associada com sincronização de modo kernel.Um agendador cooperativo normalmente adia decisões de planejamento para o kernel do sistema operacional quando ela tem nenhum trabalho para agendar.Um programador cooperativo também adia para o programador do sistema operacional quando há uma operação de bloqueio é comunicada para o kernel, mas que a operação não for comunicada ao Agendador do modo de usuário.
Eficiência e planejamento cooperativo
Para um programador preventivo, todo o trabalho que tem o mesmo nível de prioridade é igual.Normalmente, um agendador preventivo agenda segmentos na ordem em que são criados.Além disso, um programador preventivo dá cada thread uma fatia de tempo de uma forma de rodízio, com base na prioridade do thread.Embora esse mecanismo fornece imparcialidade (cada thread faz progresso), ele vem com algum custo de eficiência.Por exemplo, muitos algoritmos de computação intensivos não requerem imparcialidade.Em vez disso, é importante que concluir as tarefas relacionadas em geral menos tempo.Agendamento cooperativo permite que um aplicativo para agendar o trabalho com mais eficiência.Por exemplo, considere um aplicativo com vários segmentos.Agendamento de threads que não compartilham recursos executados simultaneamente pode reduzir a sobrecarga de sincronização e, assim, aumentar a eficiência.Outra maneira eficiente de agendar tarefas é executar os pipelines de tarefas (onde cada tarefa atua na saída anterior) no mesmo processador para que a entrada de cada estágio do pipeline já foi carregada no cache de memória.
Usando o agendamento juntos preemptivo e cooperativo
Planejamento cooperativo não resolve todos os problemas de agendamento.Por exemplo, tarefas que não rendimento relativamente a outras tarefas podem consumir todos os recursos de computação disponíveis e impedir que outras tarefas fazendo progresso.O Runtime de simultaneidade usa os benefícios da eficiência do planejamento cooperativo para complementar as garantias de imparcialidade do agendamento preventivo.Por padrão, o Runtime de simultaneidade oferece um agendador cooperativo que utiliza um algoritmo de roubo de trabalho para distribuir o trabalho entre os recursos de computação com eficiência.No entanto, o Agendador do Runtime de simultaneidade também depende o Agendador preventivo do sistema operacional bem distribuir os recursos entre os aplicativos.Você também pode criar agendadores personalizados e Agendador políticas em seus aplicativos para produzir um controle refinado sobre a execução do thread.
Top
Comparando o Runtime de simultaneidade para a API do Windows
Interface de programação de aplicativo Microsoft Windows, que é normalmente conhecida como a API do Windows (e anteriormente conhecida como Win32), fornece um modelo de programação que permite a simultaneidade em seus aplicativos.O Runtime de simultaneidade se baseia na API do Windows para fornecer modelos de programação adicionais que não estão disponíveis no sistema operacional subjacente.
O Runtime de simultaneidade se baseia no modelo de thread de API do Windows para realizar o trabalho paralelo.Ele também usa o gerenciamento de memória do Windows API e mecanismos de armazenamento local de segmento.No Windows 7 e Windows Server 2008 R2, ele usa o suporte da API do Windows para computadores que têm mais de 64 segmentos de hardware e usuários agendáveis threads.O Runtime de simultaneidade estende o modelo de API do Windows fornecendo um Agendador de tarefas cooperativo e um algoritmo de roubo de trabalho para maximizar o uso de recursos de computação e permitindo que várias instâncias do Agendador simultâneas.
Para obter mais informações sobre a API do Windows, consulte Visão geral da API do Windows.
Linguagens de programação
A API do Windows usa a linguagem de programação c para expor o modelo de programação.O Runtime de simultaneidade fornece uma interface de programação C++ que tira proveito dos recursos mais recentes na linguagem C++.Por exemplo, funções lambda fornecem um mecanismo sucinto, tipo seguro para definir funções de trabalho paralelas.Para obter mais informações sobre os recursos mais recentes de C++ que usa o Runtime de simultaneidade, consulte Visão geral de tempo de execução de concorrência.
Segmentos e Pools de threads
O mecanismo de simultaneidade central da API do Windows é a thread.Você normalmente usa o CreateThread função criar threads.Embora os threads são relativamente fáceis de criar e usar, o sistema operacional aloca uma quantidade significativa de tempo e outros recursos para gerenciá-los.Além disso, embora cada thread é garantido para receber o mesmo tempo de execução como qualquer outro segmento no mesmo nível de prioridade, associado sobrecarga requer que você crie tarefas suficientemente grandes.Para tarefas menores ou mais refinadas, a sobrecarga associada a concorrência pode pesar sobre o benefício de executar tarefas em paralelo.
Pools de threads são uma maneira de reduzir o custo de gerenciamento de threads.Pools de threads personalizado e a implementação de pool de segmento é fornecida pela API do Windows tanto Ativar itens de trabalho pequeno para executar em paralelo.O pool de threads do Windows mantém os itens em uma fila first-in, fila (FIFO).Cada item de trabalho é iniciado na ordem em que foi adicionado ao pool.
O Runtime de simultaneidade implementa um algoritmo de roubo de trabalho para estender o FIFO mecanismo de agendamento.O algoritmo move tarefas ainda não iniciadas para segmentos de itens de trabalho.Embora o algoritmo de roubo de trabalho pode equilibrar as cargas de trabalho, também pode causar itens de trabalho para ser reordenadas.Esse processo de reordenação pode causar um item de trabalho Iniciar em uma ordem diferente da que foi enviado.Isso é útil com algoritmos recursivos, onde há uma melhor chance de dados são compartilhados entre tarefas mais recentes do que entre os mais antigos.Obter novos itens para executar primeiro significa menos erros de cache e possivelmente menos falhas de página.
Da perspectiva do sistema operacional, o roubo de trabalho é injusta.No entanto, quando um aplicativo implementa um algoritmo ou a tarefa seja executada em paralelo, honestidade entre as subtarefas não é sempre importante.O que faz diferença é como rapidamente a tarefa geral termina.Para outros algoritmos FIFO é a estratégia de planejamento adequada.
Comportamento em vários sistemas operacionais
No Windows XP e Windows Vista, aplicativos que usam o Runtime de simultaneidade se comportam da mesma forma, exceto que o desempenho de heap é aprimorado no Windows Vista.
No Windows 7 e Windows Server 2008 R2, o sistema operacional mais suporta escalabilidade e simultaneidade.Por exemplo, esses sistemas operacionais oferecem suporte a computadores que têm mais de 64 segmentos de hardware.Um aplicativo que usa a API do Windows deve ser modificado para aproveitar esses novos recursos.No entanto, um aplicativo que usa o Runtime de simultaneidade automaticamente usa esses recursos e não requer modificações.
https://msdn.microsoft.com/pt-br/library/dd627187(v=vs.110)
Top
Comparando o Runtime de simultaneidade para OpenMP
O Runtime de simultaneidade permite uma variedade de modelos de programação.Esses modelos podem se sobrepor ou complementam os modelos de outras bibliotecas.Esta seção compara o Runtime de simultaneidade para OpenMP.
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 são adequadas para algoritmos paralelos são iterativos; ou seja, eles executam iteração paralela em uma matriz de dados.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 único computador.Nesse cenário, o ambiente de hardware é conhecido e o desenvolvedor pode esperar ter acesso exclusivo a recursos de computação quando o algoritmo é executado.
No entanto, outros, 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.O Runtime de simultaneidade complementa os recursos do OpenMP fornecendo o Biblioteca paralela de padrões (PPL) e o Biblioteca de agentes assíncronos.Ao contrário do OpenMP, o Runtime de simultaneidade fornece um programador dinâmico que se adapta aos recursos disponíveis e ajusta o grau de paralelismo como alterar as cargas de trabalho.
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, não pode ser estendido facilmente.
Para obter mais informações sobre como compara a Runtime de simultaneidade OpenMP e como migrar código OpenMP existente para usar o Runtime de simultaneidade, consulte Migrando de OpenMP ao tempo de execução de concorrência.
Top
Consulte também
Referência
Conceitos
Tempo de execução de concorrência
Visão geral de tempo de execução de concorrência
A modelos paralela a biblioteca (PPL)
Biblioteca de agentes assíncrono