Delen via


Parallelle diagnostische hulpprogramma's (Gelijktijdigheidsruntime)

Visual Studio biedt uitgebreide ondersteuning voor foutopsporing en profilering van toepassingen met meerdere threads.

Fouten opsporen

Het foutopsporingsprogramma van Visual Studio bevat het venster Parallel Stacks , het venster Parallelle taken en het venster Parallel Watch . Zie Walkthrough: Fouten opsporen in een parallelle toepassing en procedures: Het venster Parallel Watch gebruiken voor meer informatie.

Profileringsproces

De profileringsprogramma's bieden drie gegevensweergaven die grafische, tabellaire en numerieke informatie weergeven over hoe een toepassing met meerdere threads met zichzelf en met andere programma's communiceert. Met de grafische weergaven kunt u snel aandachtspunten identificeren en navigeren van punten op de displays naar call stacks, call sites en broncode. Zie Gelijktijdigheid visualiseren voor meer informatie.

Gebeurtenistracering

De Gelijktijdigheidsruntime maakt gebruik van Event Tracing voor Windows (ETW) om instrumentatiehulpprogramma's, zoals profilers, op de hoogte te stellen wanneer verschillende gebeurtenissen optreden. Deze gebeurtenissen omvatten wanneer een planner wordt geactiveerd of gedeactiveerd, wanneer een context begint, eindigt, blokkeert, deblokkert of opgeeft, en wanneer een parallel algoritme begint of eindigt.

Hulpprogramma's zoals gelijktijdigheid visualiseren maken gebruik van deze functionaliteit; Daarom hoeft u doorgaans niet rechtstreeks met deze gebeurtenissen te werken. Deze gebeurtenissen zijn echter handig wanneer u een aangepaste profiler ontwikkelt of wanneer u hulpprogramma's voor gebeurtenistracering gebruikt, zoals de Windows Performance Toolkit.

De Gelijktijdigheidsruntime genereert deze gebeurtenissen alleen wanneer tracering is ingeschakeld. Roep de concurrency::EnableTracing-functie aan voor het inschakelen van gebeurtenistracering en de concurrency::DisableTracing-functie om tracering uit te schakelen.

In de volgende tabel worden de gebeurtenissen beschreven die de runtime genereert wanneer gebeurtenistracering is ingeschakeld:

Gebeurtenis Beschrijving Waarde
gelijktijdigheid::ConcRT_ProviderGuid De ID van de ETW-provider voor de Gelijktijdigheidsruntime. f7b697a3-4db5-4d3b-be71-c4d284e6592f
gelijktijdigheid::ContextEventGuid Markeert gebeurtenissen die zijn gerelateerd aan contexten. 5727a00f-50be-4519-8256-f7699871fecb
gelijktijdigheid::P PLParallelForEventGuid Hiermee wordt de ingang en uitgang gemarkeerd voor aanroepen naar het concurrentie::parallel_for algoritme. 31c8da6b-6165-4042-8b92-949e315f4d84
gelijktijdigheid::PPLParallelForeachEventGuid Hiermee wordt de ingang en uitgang gemarkeerd voor aanroepen naar het gelijktijdigheidsalgoritme::parallel_for_each algoritme. 5cb7d785-9d66-465d-bae1-4611061b5434
gelijktijdigheid::PPLParallelInvokeEventGuid Hiermee worden de toegang tot en uitgang van aanroepen naar het concurrentie::parallel_invoke algoritme gemarkeerd. d1b5b133-ec3d-49f4-98a3-464d1a9e4682
gelijktijdigheid::SchedulerEventGuid Markeert gebeurtenissen die zijn gerelateerd aan de Task Scheduler. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
gelijktijdigheid::VirtualProcessorEventGuid Markeert gebeurtenissen die zijn gerelateerd aan virtuele processors. 2f27805f-1676-4ecc-96fa-7eb09d44302f

De Gelijktijdigheidsruntime definieert, maar genereert momenteel niet de volgende gebeurtenissen. De runtime reserveert deze gebeurtenissen voor toekomstig gebruik:

De concurrency::ConcRT_EventType opsomming specificeert de bewerkingen die mogelijk door een gebeurtenis worden getraceerd. Bijvoorbeeld, aan het begin van het parallel_for algoritme, genereert de runtime de PPLParallelForEventGuid gebeurtenis en dient CONCRT_EVENT_START als de bewerking aan. Voordat het parallel_for algoritme voltooit, genereert de runtime opnieuw de gebeurtenis PPLParallelForEventGuid en wordt CONCRT_EVENT_END als de bewerking geleverd.

In het volgende voorbeeld ziet u hoe u tracering inschakelt voor een aanroep naar parallel_for. De runtime traceert de eerste aanroep parallel_for niet omdat tracering niet is ingeschakeld. De aanroep naar EnableTracing stelt de runtime in staat om de tweede aanroep naar parallel_for te traceren.

// 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();
}

De runtime houdt het aantal keren bij dat u belt EnableTracing en DisableTracing. Als u daarom meerdere keren belt, moet u hetzelfde aantal keren aanroepen EnableTracingDisableTracing om tracering uit te schakelen.

Zie ook

Gelijktijdigheidsruntime