Udostępnij za pośrednictwem


Równoległe narzędzia diagnostyczne (współbieżność środowiska wykonawczego)

Program Visual Studio zapewnia rozbudowaną obsługę debugowania i profilowania aplikacji wielowątkowych.

Debugowanie

Debuger programu Visual Studio zawiera okno stosów równoległych , okno Równoległe zadania i okno obserwatora równoległego. Aby uzyskać więcej informacji, zobacz Przewodnik: debugowanie aplikacji równoległej i Instrukcje: korzystanie z okna równoległego zegarka.

Profilowanie

Narzędzia profilowania udostępniają trzy widoki danych, które wyświetlają graficzne, tabelaryczne i liczbowe informacje o tym, jak aplikacja wielowątkowa współdziała z samym sobą i innymi programami. Widoki umożliwiają szybkie identyfikowanie obszarów zainteresowania oraz przechodzenie z punktów na ekranach graficznych w celu wywoływania stosów, lokacji wywołań i kodu źródłowego. Aby uzyskać więcej informacji, zobacz Concurrency Visualizer.

Śledzenie zdarzeń

Środowisko uruchomieniowe współbieżności używa śledzenia zdarzeń dla systemu Windows (ETW) do powiadamiania narzędzi instrumentacji, takich jak profilery, w przypadku wystąpienia różnych zdarzeń. Te zdarzenia obejmują, gdy harmonogram jest aktywowany lub dezaktywowany, po rozpoczęciu kontekstu, kończy się, blokuje, odblokuje lub zwraca, a gdy algorytm równoległy rozpoczyna lub kończy się.

Narzędzia, takie jak Concurrency Visualizer , korzystają z tej funkcji, dlatego zazwyczaj nie trzeba bezpośrednio pracować z tymi zdarzeniami. Jednak te zdarzenia są przydatne podczas tworzenia niestandardowego profilera lub korzystania z narzędzi do śledzenia zdarzeń, takich jak zestaw narzędzi windows Performance Toolkit.

Środowisko uruchomieniowe współbieżności zgłasza te zdarzenia tylko wtedy, gdy śledzenie jest włączone. Wywołaj funkcję concurrency::EnableTracing , aby włączyć śledzenie zdarzeń i funkcję concurrency::D isableTracing , aby wyłączyć śledzenie.

W poniższej tabeli opisano zdarzenia wywoływane przez środowisko uruchomieniowe po włączeniu śledzenia zdarzeń:

Zdarzenie opis Wartość
concurrency::ConcRT_ProviderGuid Identyfikator dostawcy ETW dla środowiska uruchomieniowego współbieżności. f7b697a3-4db5-4d3b-be71-c4d284e6592f
concurrency::ContextEventGuid Oznacza zdarzenia związane z kontekstami. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid Oznacza wejście i wyjście do wywołań do algorytmu concurrency::p arallel_for . 31c8da6b-6165-4042-8b92-949e315f4d84
concurrency::P PLParallelForeachEventGuid Oznacza wejście i wyjście do wywołań do współbieżności::p arallel_for_each algorytmu. 5cb7d785-9d66-465d-bae1-4611061b5434
concurrency::P PLParallelInvokeEventGuid Oznacza wejście i wyjście do wywołań do algorytmu concurrency::p arallel_invoke . d1b5b133-ec3d-49f4-98a3-464d1a9e4682
concurrency::SchedulerEventGuid Oznacza zdarzenia związane z harmonogramem zadań. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
concurrency::VirtualProcessorEventGuid Oznacza zdarzenia związane z procesorami wirtualnymi. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Środowisko uruchomieniowe współbieżności definiuje, ale obecnie nie zgłasza następujących zdarzeń. Środowisko uruchomieniowe rezerwuje te zdarzenia do użycia w przyszłości:

Współbieżność ::ConcRT_EventType wyliczenie określa możliwe operacje, które śledzi zdarzenie. Na przykład przy wejściu do algorytmu parallel_for środowisko uruchomieniowe zgłasza PPLParallelForEventGuid zdarzenie i udostępnia CONCRT_EVENT_START je jako operację. Przed zwróceniem algorytmu parallel_for środowisko uruchomieniowe ponownie zgłasza PPLParallelForEventGuid zdarzenie i udostępnia CONCRT_EVENT_END je jako operację.

Poniższy przykład ilustruje sposób włączania śledzenia dla wywołania metody parallel_for. Środowisko uruchomieniowe nie śledzi pierwszego wywołania metody , parallel_for ponieważ śledzenie nie jest włączone. Wywołanie w celu EnableTracing umożliwienia środowisku uruchomieniowemu śledzenia drugiego wywołania metody 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();
}

Środowisko uruchomieniowe śledzi liczbę wywołań EnableTracing i DisableTracing. W związku z tym, jeśli wywołasz EnableTracing wiele razy, musisz wywołać DisableTracing tę samą liczbę razy, aby wyłączyć śledzenie.

Zobacz też

Środowisko uruchomieniowe współbieżności