Share via


Herramientas de diagnóstico paralelo (Runtime de simultaneidad)

Microsoft Visual Studio 2010 proporciona amplia compatibilidad con la depuración y la generación de perfiles de las aplicaciones multiproceso.

Depuración

El depurador de Visual Studio agrega una nueva ventana Pilas paralelas y una ventana Tareas paralelas. Para obtener más información, vea Tutorial: Depurar una aplicación paralela.

Generación de perfiles

Las Herramientas de generación de perfiles de Visual Studio Team Developer proporcionan tres vistas de datos que muestran información numérica, gráfica y tabular sobre cómo una aplicación multithreading interactúa consigo misma y con otros programas. Las vistas le permiten identificar áreas problemáticas rápidamente y navegar de los puntos en las presentaciones gráficas a las pilas de llamadas, sitios de llamada y código fuente. Para obtener más información, vea Visualizador de simultaneidad.

Seguimiento de eventos

El runtime de simultaneidad usa el seguimiento de eventos para Windows (ETW) para notificar a las herramientas de instrumentación, por ejemplo, a los generadores de perfiles, cuándo tienen lugar los distintos eventos. Estos eventos incluyen cuando se activa o desactiva un programador, cuando se inicia, finaliza, se bloquea, se desbloquea o produce resultados un contexto y cuando se inicia o finaliza un algoritmo paralelo.

Las herramientas como Visualizador de simultaneidad utilizan esta funcionalidad; por consiguiente, no suele ser necesario trabajar con estos eventos directamente. Sin embargo, estos eventos son útiles cuando se está desarrollando un generador de perfiles personalizado o cuando se usan las herramientas de seguimiento de eventos, como Xperf.

El runtime de simultaneidad genera estos eventos solo cuando está habilitado el seguimiento. Llame a la función Concurrency::EnableTracing para habilitar el seguimiento de eventos y la función Concurrency::DisableTracing para deshabilitar el seguimiento.

En la tabla siguiente se describen los eventos que genera el runtime cuando se habilita el seguimiento de eventos:

Evento

Descripción

Valor

Concurrency::ConcRT_ProviderGuid

Identificador del proveedor ETW del runtime de simultaneidad.

f7b697a3-4db5-4d3b-be71-c4d284e6592f

Concurrency::ContextEventGuid

Marca los eventos relacionados con los contextos.

5727a00f-50be-4519-8256-f7699871fecb

Concurrency::PPLParallelForEventGuid

Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_for.

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

Concurrency::PPLParallelForeachEventGuid

Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_for_each.

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

Concurrency::PPLParallelInvokeEventGuid

Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_invoke.

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

Concurrency::SchedulerEventGuid

Marca los eventos relacionados con el Programador de tareas.

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

Concurrency::VirtualProcessorEventGuid

Marca los eventos relacionados con los procesadores virtuales.

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

El runtime de simultaneidad define, pero no genera realmente, los siguientes eventos. El runtime reserva estos eventos para uso futuro:

La enumeración Concurrency::ConcRT_EventType especifica las posibles operaciones que un evento sigue. Por ejemplo, en la entrada del algoritmo parallel_for, el runtime genera el evento PPLParallelForEventGuid y proporciona CONCRT_EVENT_START como la operación. Antes de que el algoritmo parallel_for devuelva un resultado, el runtime genera el evento PPLParallelForEventGuid y proporciona CONCRT_EVENT_END como la operación.

En el ejemplo siguiente se muestra cómo habilitar el seguimiento para una llamada a parallel_for. El runtime no realiza el seguimiento de la primera llamada a parallel_for porque el seguimiento no está habilitado. La llamada a EnableTracing permite al runtime hacer un seguimiento de la segunda llamada 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();
}

El runtime realiza el seguimiento del número de veces que se llama a EnableTracing y DisableTracing. Por consiguiente, si se llama a EnableTracing varias veces, se debe llamar a DisableTracing el mismo número de veces para deshabilitar el seguimiento.

Vea también

Conceptos

Runtime de simultaneidad

Historial de cambios

Fecha

Historial

Motivo

Junio de 2010

Información agregada sobre el seguimiento de eventos.

Mejora de la información.