Compartilhar via


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

concurrency::ConcRT_ProviderGuid

O identificador do provedor de ETW para o tempo de execução de simultaneidade.

f7b697a3-4db5-4d3b-be71-c4d284e6592f

concurrency::ContextEventGuid

Marca eventos que são relacionados a contextos.

5727a00f-50be-4519-8256-f7699871fecb

concurrency::PPLParallelForEventGuid

A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_for .

31c8da6b-6165-4042-8b92-949e315f4d84

concurrency::PPLParallelForeachEventGuid

A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_for_each .

5cb7d785-9d66-465d-bae1-4611061b5434

concurrency::PPLParallelInvokeEventGuid

A marca entrada e saída para chamadas ao algoritmo de concurrency::parallel_invoke .

d1b5b133-ec3d-49f4-98a3-464d1a9e4682

concurrency::SchedulerEventGuid

Marca eventos que são relacionados a Agendador de tarefas.

e2091f8a-1e0a-4731-84a2-0dd57c8a5261

concurrency::VirtualProcessorEventGuid

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.

Consulte também

Conceitos

Tempo de execução de concorrência