Compartir a través de


Herramientas de diagnóstico paralelo (Runtime de simultaneidad)

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

Depuración

El depurador de Visual Studio incluye la ventana de Pilas paralelas , la ventana de Tareas paralelas , y la ventana de Inspección paralela .Para obtener más información, vea Tutorial: Depurar una aplicación paralela y Cómo: Utilizar la Ventana Inspección paralela.

Generación de perfiles

Las herramientas de generación de perfiles proporcionan tres vistas de datos que muestran información numérica, gráfica y tabular sobre cómo una aplicación multithreading interactúa con sí 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 de el concurrency::EnableTracing para habilitar la traza de eventos y la función de el 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 de concurrency::parallel_for .

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

concurrency::PPLParallelForeachEventGuid

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

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

concurrency::PPLParallelInvokeEventGuid

Marca la entrada y la salida de las llamadas al algoritmo de 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 de 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