Ferramentas de diagnóstico paralelas (tempo de execução de simultaneidade)
Visual Studio fornece suporte abrangente para depurar e analisar aplicativos multissegmentados.
Depuração
O depurador do Visual Studio inclui a janela de Pilhas de paralela , a janela de tarefas paralelas , e a janela de relógio paralelo .Para obter mais informações, consulte Passo a passo: Depurando um aplicativo paralelo e Como: usar a janela de inspeção paralela.
Analisar
As ferramentas para fornecem três modos de exibição de dados que exibem informações gráfico, tabular e numérica sobre como um aplicativo com vários segmentos interage com e se com outros programas.Modos de exibição permitem que você identificar rapidamente áreas interveniente, e para navegar de pontos o exibe elementos gráficos a pilhas de chamadas, a sites de chamada, e o código-fonte.Para mais informações, consulte Visualizador de simultaneidade.
Event trace
O tempo de execução de simultaneidade usa Rastreamento de evento para o windows (ETW) para notificar ferramentas de instrumentação, como perfiladores, quando vários eventos ocorrem.Esses incluem eventos quando um agendador é ativado ou desativado, quando um contexto, ele termina, bloquear, desbloqueia, ou as, e quando um algoritmo paralelo inicia ou termina.
As ferramentas como Visualizador de simultaneidade utilizam essa funcionalidade; portanto, você normalmente não precisará trabalhar com esses eventos diretamente.Em o entanto, esses eventos são úteis quando você estiver desenvolvendo um profiler personalizado ou quando você usa ferramentas de rastreamento do evento como Xperf.
O tempo de execução de simultaneidade criar esses eventos somente quando o rastreamento está ativado.Chame a função de concurrency::EnableTracing para ativar o rastreamento de evento e a função de concurrency::DisableTracing para desativar o rastreamento.
A tabela a seguir descreve os eventos que o tempo de execução aumenta o evento quando o rastreamento está ativado:
Evento |
Descrição |
Valor |
---|---|---|
O identificador do provedor de ETW para o tempo de execução de simultaneidade. |
f7b697a3-4db5-4d3b-be71-c4d284e6592f |
|
Marca eventos que são relacionados a contextos. |
5727a00f-50be-4519-8256-f7699871fecb |
|
A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_for . |
31c8da6b-6165-4042-8b92-949e315f4d84 |
|
A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_for_each . |
5cb7d785-9d66-465d-bae1-4611061b5434 |
|
A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_invoke . |
d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
|
Marca eventos que são relacionados a Agendador de tarefas. |
e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
|
Marca eventos que são relacionados aos processadores virtuais. |
2f27805f-1676-4ecc-96fa-7eb09d44302f |
O tempo de execução de simultaneidade define, mas não aumenta atualmente, os seguintes eventos.O tempo de execução reserva esses eventos para uso futuro:
A enumeração especifica as operações de concurrency::ConcRT_EventType possíveis que controla um evento.Por exemplo, na entrada do algoritmo de parallel_for , o tempo de execução gera o evento de PPLParallelForEventGuid e fornece CONCRT_EVENT_START como a operação.Antes que o algoritmo de parallel_for retorna, o tempo de execução novamente gera o evento de PPLParallelForEventGuid e fornece CONCRT_EVENT_END como a operação.
O exemplo a seguir ilustra como ativar o rastreamento para uma chamada para parallel_for.O tempo de execução não rastreamento a primeira chamada para parallel_for porque o não rastreamento ativado.A chamada a EnableTracing permite que o tempo de execução para rastrear a segunda chamada a parallel_for.
// etw.cpp
// compile with: /EHsc
#include <ppl.h>
using namespace concurrency;
int wmain()
{
// Perform some parallel work.
// Event tracing is disabled at this point.
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
// Enable tracing for a second call to parallel_for.
EnableTracing();
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
DisableTracing();
}
O tempo de execução controla o número de vezes que você chama EnableTracing e DisableTracing.Portanto, se você chamar EnableTracing várias vezes, você deve chamar DisableTracing o mesmo número de vezes para desativar o rastreamento.