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 |
---|---|---|
O identificador do provedor ETW para o Runtime de simultaneidade. |
f7b697a3-4db5-4d3b-be71-c4d284e6592f |
|
Eventos relacionados aos contextos de marca. |
5727a00f-50be-4519-8256-f7699871fecb |
|
Marca da entrada e saída para chamadas para o Concurrency::parallel_for algoritmo. |
31c8da6b-6165-4042-8b92-949e315f4d84 |
|
Marca da entrada e saída para chamadas para o Concurrency::parallel_for_each algoritmo. |
5cb7d785-9d66-465d-bae1-4611061b5434 |
|
Marca da entrada e saída para chamadas para o Concurrency::parallel_invoke algoritmo. |
d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
|
Marca os eventos relacionados ao O Agendador de tarefas. |
e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
|
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
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Junho de 2010 |
Adicionadas informações sobre o rastreamento de eventos. |
Aprimoramento de informações. |