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 | Hodnota |
---|---|---|
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 EnableTracing
DisableTracing
stejný početkrát, aby bylo možné trasování zakázat.