Compartilhar via


Ferramentas de diagnóstico paralelas (Runtime de simultaneidade)

Microsoft Visual Studio 2010oferece suporte extenso para depuração e perfil de aplicativos multithread.

Debug

O depurador Visual Studio adiciona um novo Paralela pilhas janela e Tarefas paralelas janela. Para obter mais informações, consulte Demonstra Passo a passo: Depurando um aplicativo paralelo.

Criação de perfil

O Ferramentas de criação de perfil do Visual Studio Team Developer Edition fornece três exibições de dados que exibem informações tabulares, numéricas e de gráficas sobre como uma aplicação multi-thread interage com o próprio e com outros programas. Os modos de exibição permitem que você identifique rapidamente as áreas de preocupação e navegar de pontos em que as exibições gráficas para chamar as pilhas, chamar o código-fonte e sites. Para obter mais informações, consulte Visualizador de simultaneidade.

Rastreamento de eventos

O Runtime de simultaneidade usa De rastreamento de eventos do Windows (ETW) para notificar as ferramentas de instrumentação, como, por exemplo, geradores de perfis, quando vários eventos ocorrem. Esses eventos incluem quando um Agendador está ativado ou desativado, quando um contexto começa, termina, bloqueia, desbloqueia ou produz e quando um algoritmo paralelo começa ou termina.

Ferramentas como o Visualizador de simultaneidade utilize esta funcionalidade; Portanto, você normalmente não é necessário trabalhar diretamente com esses eventos. No entanto, esses eventos são úteis quando você está desenvolvendo um gerador de perfil personalizado ou ao usar ferramentas de rastreamento de eventos, como Xperf.

O Runtime de simultaneidade dispara esses eventos somente quando o rastreamento está habilitado. Chamar o Concurrency::EnableTracing a função para ativar o rastreamento de eventos e o Concurrency::DisableTracing a função para desabilitar o rastreamento.

A tabela a seguir descreve os eventos que o tempo de execução gera quando o rastreamento de evento está habilitado:

Evento

Descrição

Valor

Concurrency::ConcRT_ProviderGuid

O identificador do provedor ETW para o Runtime de simultaneidade.

f7b697a3-4db5-4d3b-be71-c4d284e6592f

Concurrency::ContextEventGuid

Eventos relacionados aos contextos de marca.

5727a00f-50be-4519-8256-f7699871fecb

Concurrency::PPLParallelForEventGuid

Marca da entrada e saída para chamadas para o Concurrency::parallel_for algoritmo.

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

Concurrency::PPLParallelForeachEventGuid

Marca da entrada e saída para chamadas para o Concurrency::parallel_for_each algoritmo.

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

Concurrency::PPLParallelInvokeEventGuid

Marca da entrada e saída para chamadas para o Concurrency::parallel_invoke algoritmo.

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

Concurrency::SchedulerEventGuid

Marca os eventos relacionados ao O Agendador de tarefas.

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

Concurrency::VirtualProcessorEventGuid

Marca os eventos relacionados a processadores virtuais.

2f27805f-1676-4ecc-96fa-7eb09d44302f

O Runtime de simultaneidade define, mas não no momento aumentar, os eventos a seguir. O tempo de execução reserva esses eventos para uso futuro:

O Concurrency::ConcRT_EventType enumeração Especifica as operações de possíveis que controla a um evento. Por exemplo, na entrada da parallel_for aumenta de tempo de execução do algoritmo, o PPLParallelForEventGuid evento e fornece CONCRT_EVENT_START como a operação. Antes de parallel_for retorna do algoritmo, o runtime novamente dispara o PPLParallelForEventGuid evento e fornece CONCRT_EVENT_END como a operação.

O exemplo a seguir ilustra como habilitar o rastreamento para uma chamada para parallel_for. O runtime não rastrear a primeira chamada para parallel_for porque o rastreamento não está ativada. A chamada para EnableTracing permite que o tempo de execução para rastrear a segunda chamada para 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 runtime controla o número de vezes que você chamar EnableTracing e DisableTracing. Portanto, se você chamar EnableTracing várias vezes, você deve chamar DisableTracing o mesmo número de vezes para desabilitar o rastreamento.

Consulte também

Conceitos

Runtime de simultaneidade

Histórico de alterações

Date

History

Motivo

Junho de 2010

Adicionadas informações sobre o rastreamento de eventos.

Aprimoramento de informações.