Paralelní diagnostické nástroje (Concurrency Runtime)

Visual Studio poskytuje rozsáhlou podporu ladění a profilace vícevláknových aplikací.

Ladění

Ladicí program sady Visual Studio obsahuje okno Paralelní zásobníky , okno Paralelní úlohy a okno Paralelní sledování . Další informace naleznete v tématu Návod: Ladění paralelní aplikace a postupy: Použití okna paralelního kukátka.

Profilace

Nástroje pro profilaci poskytují tři zobrazení dat, která zobrazují grafické, tabulkové a číselné informace o tom, jak vícevláknová aplikace interaguje se sebou a s jinými programy. Zobrazení umožňují rychle identifikovat oblasti zájmu a procházet body na grafických displejích a volat zásobníky, weby volání a zdrojový kód. Další informace najdete v tématu Vizualizér souběžnosti.

Trasování událostí

Modul Concurrency Runtime používá trasování událostí pro Windows (ETW) k upozorňování nástrojů instrumentace, jako jsou profilátory, při různých událostech. Mezi tyto události patří aktivace nebo deaktivace plánovače, kdy začíná kontext, končí, bloky, odblokuje nebo odblokuje a kdy začíná nebo končí paralelní algoritmus.

Tyto funkce využívají nástroje, jako je Vizualizér souběžnosti, a proto s těmito událostmi obvykle nemusíte pracovat přímo. Tyto události jsou však užitečné při vývoji vlastního profileru nebo při použití nástrojů pro trasování událostí, jako je sada nástrojů windows Performance Toolkit.

Concurrency Runtime vyvolá tyto události pouze v případech, kdy je povoleno trasování. Volání funkce concurrency::EnableTracing za účelem povolení trasování událostí a souběžnosti::D isableTracing funkce zakázat trasování.

Následující tabulka popisuje události, které modul runtime vyvolá při povolení trasování událostí:

Událost Popis Value
souběžnost::ConcRT_ProviderGuid Identifikátor zprostředkovatele Trasování událostí pro Windows pro Concurrency Runtime. f7b697a3-4db5-4d3b-be71-c4d284e6592f
concurrency::ContextEventGuid Označí události, které souvisejí s kontexty. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid Označí vstupní a výstupní volání algoritmu concurrency::p arallel_for . 31c8da6b-6165-4042-8b92-949e315f4d84
concurrency::P PLParallelForeachEventGuid Označí vstupní a výstupní volání ke souběžnosti::p arallel_for_each algoritmu. 5cb7d785-9d66-465d-bae1-4611061b5434
concurrency::P PLParallelInvokeEventGuid Označí vstupní a výstupní volání do algoritmu concurrency::p arallel_invoke . d1b5b133-ec3d-49f4-98a3-464d1a9e4682
concurrency::SchedulerEventGuid Označí události související s plánovačem úloh. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
concurrency::VirtualProcessorEventGuid Označí události související s virtuálními procesory. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Concurrency Runtime definuje, ale v současné době nevyvolá následující události. Modul runtime si tyto události vyhrazuje pro budoucí použití:

Concurrency ::ConcRT_EventType výčet určuje možné operace, které událost sleduje. Například při vstupu parallel_for algoritmu vyvolá modul runtime PPLParallelForEventGuid událost a poskytne CONCRT_EVENT_START ji jako operaci. parallel_for Než se algoritmus vrátí, modul runtime znovu vyvolá PPLParallelForEventGuid událost a poskytne CONCRT_EVENT_END ji jako operaci.

Následující příklad ukazuje, jak povolit trasování volání parallel_for. Modul runtime nesleduje první volání parallel_for , protože trasování není povoleno. Volání, které EnableTracing umožní modulu runtime trasovat druhé volání 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();
}

Modul runtime sleduje počet volání EnableTracing a DisableTracing. Pokud tedy voláte vícekrát, musíte zavolat EnableTracingDisableTracing stejný početkrát, aby bylo možné trasování zakázat.

Viz také

Concurrency Runtime