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 |
---|---|---|
Identificador del proveedor ETW del runtime de simultaneidad. |
f7b697a3-4db5-4d3b-be71-c4d284e6592f |
|
Marca los eventos relacionados con los contextos. |
5727a00f-50be-4519-8256-f7699871fecb |
|
Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_for. |
31c8da6b-6165-4042-8b92-949e315f4d84 |
|
Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_for_each. |
5cb7d785-9d66-465d-bae1-4611061b5434 |
|
Marca la entrada y la salida de las llamadas al algoritmo Concurrency::parallel_invoke. |
d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
|
Marca los eventos relacionados con el Programador de tareas. |
e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
|
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
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Junio de 2010 |
Información agregada sobre el seguimiento de eventos. |
Mejora de la información. |