Compartilhar via


Comparando o Tempo de Execução de Simultaneidade com outros modelos de simultaneidade

Este documento descreve as diferenças entre os recursos e os modelos de programação de tempo de execução de simultaneidade e de outras tecnologias. Compreendendo como os benefícios de tempo de execução de simultaneidade são comparados aos benefícios de outros modelos de programação, você pode selecionar a tecnologia que melhor atende aos requisitos de seus aplicativos.

Se você estiver usando outro modelo de programação, como pool de thread do Windows ou o OpenMP, há situações em que pode ser apropriado ao migrar tempo de execução de simultaneidade. Por exemplo, o tópico descreve quando Migrando de OpenMP no Tempo de Execução de Simultaneidade pode ser apropriado migrar OpenMP ao tempo de execução de simultaneidade. No entanto, se estiver satisfeito com o desempenho do aplicativo e o suporte à depuração atuais, a migração não é necessária.

Você pode usar os recursos e os benefícios de produtividade de tempo de execução de simultaneidade para complementar seu aplicativo existente usando outro modelo de simultaneidade. O tempo de execução de simultaneidade não pode garantir o balanceamento de carga quando vários agendadores de tarefa competem pelos mesmos recursos de computação. Porém, quando as cargas de trabalho não se sobrepõem, esse efeito é mínimo.

Seções

  • Comparando a programação preemptivo para a programação cooperativa

  • Comparando o tempo de execução de simultaneidade a API do windows

  • Comparando o tempo de execução de simultaneidade a OpenMP

Comparando a programação preemptivo para a programação cooperativa

O modelo preemptivo e os modelos de programação cooperativos são duas maneiras comuns de habilitar várias tarefas compartilhem recursos de computação, por exemplo, processadores ou threads de hardware.

Programação preemptivo e cooperativa

A programação preemptivo é um mecanismo de rodízio, com base em cada tarefa de acesso exclusivo a um recurso de computação por um período de tempo específico, e alterne para a outra tarefa. A programação preemptivo é comum em sistemas operacionais multitarefas comoo windows. Programação cooperativa é um mecanismo que cada tarefa de acesso exclusivo a um recurso de cálculo até que a tarefa seja concluída ou até a geração da tarefa o acesso ao recurso. O tempo de execução de simultaneidade usa a programação cooperativa junto com o agendador preemptivo do sistema operacional para obter o uso máximo de recursos de processamento.

Diferenças entre os agendadores preventivas e cooperativos

Pesquisa preemptivo agendadores dar a igualdade de acesso de threads de vários recursos de computação para assegurar que cada thread faça o progresso. Em computadores que têm muitos recursos de computação, assegurar acesso restrito torna-se menos problemático; no entanto, para garantir ao uso eficiente de recursos fica mais difícil.

Um agendador preemptivo de modo kernel requer código do aplicativo confiar no sistema operacional para tomar decisões de programação. Por outro lado, um agendador cooperativo o modo de usuário permite que o código do aplicativo para fazer suas próprias decisões de programação. Como a programação cooperativa permite que várias decisões de programação a serem feitas pelo aplicativo, reduz muito da sobrecarga associada com a sincronização de modo kernel. Um agendador cooperativo o adia normalmente decisões de programação do kernel do sistema operacional quando não tem nenhum outro trabalho para a programação. Um agendador cooperativo também o adia para o agendador de sistema operacional quando há uma operação de bloqueio que tenham sido comunicadas ao kernel, mas a operação não é comunicada ao agendador de modo de usuário.

Programação e eficiência cooperativas

A um agendador preemptivo, qualquer trabalho que tem o mesmo nível de prioridade é igual a. Um agendador preemptivo agenda normalmente threads na ordem em que são criados. Além disso, um agendador preemptivo atribui a cada thread uma fração de tempo em uma forma de rodízio, com base na prioridade de thread. Embora esse mecanismo proporcionar a equidade (cada thread faz o progresso para frente), vem a alguns custo de eficiência. Por exemplo, muitos algoritmos com uso intenso não exigem a equidade. Em vez disso, é importante que as tarefas relacionadas forem concluídos no menor tempo total. Programação cooperativa permite que um aplicativo com mais eficiência agendar o trabalho. Por exemplo, considere um aplicativo que tem muitos threads. Os threads de programação que não compartilham recursos para executar simultaneamente podem reduzir a sobrecarga de sincronização e assim aumentar a eficiência. Outra maneira eficiente de agendar tarefas é executar as tarefas pipelines (onde cada atua na saída da tarefa anterior) no mesmo processador de modo que a entrada de cada fase de pipeline é carregada no cachê de memória.

Usando agendamento preemptivo e cooperativo junto

Programação cooperativa não resolve todos os problemas de programação. Por exemplo, as tarefas que não são razoavelmente a outras tarefas podem consumir todos os recursos de computação disponíveis e impedir que outras tarefas façam o progresso. O tempo de execução de simultaneidade usa os benefícios da eficiência de programação cooperativa para complementar as garantias de equidade de programação preemptivo. Por padrão, o tempo de execução de simultaneidade fornece um agendador cooperativo que usa um algoritmo de rob para distribuir com eficiência o trabalho entre recursos de computação. Porém, o agendador de tempo de execução de simultaneidade também depende do agendador preemptivo do sistema operacional para distribuir bastante recursos entre aplicativos. Você também pode criar agendadores personalizadas e políticas do agendador em seus aplicativos para gerar o controle refinado sobre a execução do thread.

[Superior]

Comparando o tempo de execução de simultaneidade a API do windows

A interface de programação de aplicativos do Microsoft Windows, que é referida normalmente como a API do windows (e previamente conhecida como Win32), o fornece um modelo de programação que habilita a simultaneidade em seus aplicativos. As construções de tempo de execução de simultaneidade na API do windows para fornecer os modelos adicionais de programação que não estão disponíveis do sistema operacional subjacente.

As construções de tempo de execução de simultaneidade no thread de API do windows modelagem para executar o trabalho paralelo. Também usa os mecanismos de gerenciamento de memória da API do windows e armazenamento de thread local. No Windows 7 e Windows Server 2008 R2, usará o suporte de API do windows para os threads e o usuário schedulable os computadores que têm mais de 64 threads de hardware. O tempo de execução de simultaneidade estende o modelo de apis do windows fornecendo um agendador de tarefas cooperativo e um algoritmo de rob para maximizar o uso de recursos de computação, e habilitando o agendador simultânea várias instâncias.

Para obter mais informações sobre da API do windows, consulte Visão geral da API do windows.

Linguagens de programação

A API do windows usam linguagem de programação C para expor o modelo de programação. O tempo de execução de simultaneidade fornece a interface de programação c criando que se beneficia dos recursos mais recentes na linguagem C++. Por exemplo, as funções de lambda fornecem um mecanismo sucinto, fortemente tipado para definir funções de trabalho paralelas. Para obter mais informações sobre os recursos mais recentes C++ que o tempo de execução de simultaneidade, consulte a Visão geral do Tempo de Execução de Simultaneidade.

Threads e pools de thread

O mecanismo central de simultaneidade na API do windows é o thread. Geralmente você usa a função de CreateThread para criar threads. Embora os threads são relativamente fácil de criar e usar, o sistema operacional aloca uma quantidade significativa de hora e outros recursos de gerenciamento. Além disso, embora cada thread é garantido para receber os mesmos tempo de execução que qualquer outro thread no mesmo nível de prioridade, a sobrecarga associada requer que você crie tarefas suficientemente grandes. Para tarefas menores ou mais refinados, a sobrecarga associada à simultaneidade pode aumentar o benefício de executar as tarefas em paralelo.

Os pools de thread é uma maneira de reduzir o custo de gerenciamento do thread. Os pools de thread personalizados e o thread agrupam a implementação que é fornecida pela API do windows que permitem que os dois itens de trabalho pequenos para executar de forma eficaz em paralelo. O pool de thread do Windows mantém itens de trabalho em (primeiro a entrar, primeiro a sair da fila (FIFO). Cada item de trabalho é iniciado na ordem em que foi adicionado ao pool.

O tempo de execução de simultaneidade implementa um algoritmo de rob para estender o mecanismo de programação do FIFO. O algoritmo move as tarefas que ainda não foram iniciados a threads executados fora dos itens de trabalho. Embora o algoritmo de rob pode equilibrar cargas de trabalho, também pode fazer com que os itens de trabalho a ser reordenados. Esse processo reorganizando pode causar um item de trabalho ao início em uma ordem diferente do que foi enviado. Isso é útil com algoritmos recursivas, onde há uma possibilidade melhor qual os dados serão compartilhados entre novas tarefas do que entre as mais antigos. Obter os novos itens à execução primeiro significa menos erros de cache ou menos falhas de página.

Da perspectiva do sistema operacional, o rob de trabalho é injusto. Porém, quando um aplicativo implementa um algoritmo ou executar em paralelo, a equidade entre as tarefas secundária não importa sempre. O que importa é como a tarefa rapidamente total é concluída. Para outros algoritmos, o FIFO é a estratégia de programação apropriado.

Comportamento em vários sistemas operacionais

No Windows XP e no Windows Vista, os aplicativos que usam o tempo de execução de simultaneidade se comportam de maneira semelhante, exceto que desempenho do heap são aprimorados no Windows Vista.

No Windows 7 e Windows Server 2008 R2, o oferece suporte adicionais simultaneidade e escalabilidade do sistema operacional. Por exemplo, esses computadores de suporte dos sistemas operacionais que têm mais de 64 threads de hardware. Um aplicativo existente que usa a API do windows deve ser alterado para usufruir desses novos recursos. No entanto, um aplicativo que usa o tempo de execução de simultaneidade automaticamente usa esses recursos e não requer alterações.

https://msdn.microsoft.com/pt-br/library/dd627187(v=vs.120)

[Superior]

Comparando o tempo de execução de simultaneidade a OpenMP

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. Esta seção compara o tempo de execução de simultaneidade a OpenMP.

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 são apropriados para os algoritmos que são iterativos paralelos; isto é, a execução paralela iteração sobre uma matriz de dados. 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 único computador. Neste cenário, o ambiente de hardware é conhecido e o desenvolvedor pode esperar razoavelmente ter acesso exclusivo aos recursos de computação quando o algoritmo é executado.

Porém, outro, 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. O tempo de execução de simultaneidade complementa os recursos OpenMP fornecendo A paralela da biblioteca (PPL) e Biblioteca assíncrona de agentes. Ao contrário de OpenMP, o tempo de execução de simultaneidade fornece um agendador dinâmico que se adapte aos recursos disponíveis e se ajuste o grau de paralelismo como as cargas de trabalho são alterados.

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 estendida facilmente.

Para obter mais informações sobre como o tempo de execução de simultaneidade compara a OpenMP e como migrar o código existente OpenMP para usar o tempo de execução de simultaneidade, consulte Migrando de OpenMP no Tempo de Execução de Simultaneidade.

[Superior]

Consulte também

Referência

Visão geral da API do windows

Conceitos

Tempo de Execução de Simultaneidade

Visão geral do Tempo de Execução de Simultaneidade

Biblioteca de padrões paralelos (PPL)

Biblioteca de Agentes Assíncronos

Outros recursos

OpenMP no Visual C++