병렬 진단 도구(동시성 런타임)

Visual Studio는 다중 스레드 애플리케이션 디버깅 및 프로파일링에 대한 광범위한 지원을 제공합니다.

디버깅

Visual Studio 디버거에는 병렬 스택 창, 병렬 작업 창 및 병렬 조사식 창이 포함됩니다. 자세한 내용은 연습: 병렬 애플리케이션 디버깅 및 방법: 병렬 조사식 창 사용을 참조하세요.

프로파일링

프로파일링 도구는 다중 스레드 애플리케이션이 자체 및 다른 프로그램과 상호 작용하는 방법에 대한 그래픽, 테이블 형식 및 숫자 정보를 표시하는 세 가지 데이터 뷰를 제공합니다. 보기를 사용하면 관심 영역을 빠르게 식별하고 그래픽 디스플레이의 지점에서 이동하여 스택, 통화 사이트 및 소스 코드를 호출할 수 있습니다. 자세한 내용은 동시성 시각화 도우미를 참조하세요.

이벤트 추적

동시성 런타임은 ETW(Windows용 이벤트 추적)를 사용하여 다양한 이벤트가 발생할 때 프로파일러와 같은 계측 도구를 알립니다. 이러한 이벤트에는 스케줄러가 활성화되거나 비활성화되는 경우, 컨텍스트가 시작, 종료, 차단, 차단 해제 또는 생성될 때, 병렬 알고리즘이 시작되거나 종료되는 시기가 포함됩니다.

동시성 시각화 도우미와 같은 도구는 이 기능을 활용하므로 일반적으로 이러한 이벤트를 직접 사용할 필요가 없습니다. 그러나 이러한 이벤트는 사용자 지정 프로파일러를 개발하거나 Windows 성능 도구 키트와 같은 이벤트 추적 도구를 사용할 때 유용합니다.

동시성 런타임은 추적을 사용하는 경우에만 이러한 이벤트를 발생합니다. 동시성::EnableTracing 함수를 호출하여 이벤트 추적을 사용하도록 설정하고 동시성::D isableTracing 함수를 사용하여 추적을 사용하지 않도록 설정합니다.

다음 표에서는 이벤트 추적을 사용할 때 런타임에서 발생하는 이벤트를 설명합니다.

이벤트 설명
동시성::ConcRT_ProviderGuid 동시성 런타임에 대한 ETW 공급자 식별자입니다. f7b697a3-4db5-4d3b-be71-c4d284e6592f
concurrency::ContextEventGuid 컨텍스트와 관련된 이벤트를 표시합니다. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid concurrency::p arallel_for 알고리즘에 대한 호출 의 진입 및 종료를 표시합니다. 31c8da6b-6165-4042-8b92-949e315f4d84
concurrency::P PLParallelForeachEventGuid concurrency::p arallel_for_each 알고리즘에 대한 호출의 입구 및 종료를 표시합니다. 5cb7d785-9d66-465d-bae1-4611061b5434
concurrency::P PLParallelInvokeEventGuid concurrency::p arallel_invoke 알고리즘에 대한 호출의 입구 및 종료를 표시합니다. d1b5b133-ec3d-49f4-98a3-464d1a9e4682
concurrency::SchedulerEventGuid 작업 스케줄러와 관련된 이벤트를 표시합니다. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
concurrency::VirtualProcessorEventGuid 가상 프로세서와 관련된 이벤트를 표시합니다. 2f27805f-1676-4ecc-96fa-7eb09d44302f

동시성 런타임은 다음 이벤트를 정의하지만 현재 발생하지는 않습니다. 런타임은 나중에 사용하기 위해 이러한 이벤트를 예약합니다.

동시성::ConcRT_EventType 열거형은 이벤트가 추적할 수 있는 작업을 지정합니다. 예를 들어 알고리즘의 parallel_for 입구에서 런타임은 이벤트를 발생 PPLParallelForEventGuid 시키고 작업으로 제공합니다 CONCRT_EVENT_START . 알고리즘이 parallel_for 반환되기 전에 런타임은 다시 이벤트를 발생 PPLParallelForEventGuid 시키고 작업으로 제공합니다 CONCRT_EVENT_END .

다음 예제에서는 호출 parallel_for에 대해 추적을 사용하도록 설정하는 방법을 보여 줍니다. 런타임은 추적이 활성화되지 않았기 때문에 첫 번째 호출 parallel_for 을 추적하지 않습니다. 런타임에서 EnableTracing 두 번째 호출을 추적할 수 있도록 하는 호출입니다 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();
}

런타임은 호출 EnableTracing 한 횟수 및 DisableTracing. 따라서 여러 번 호출 EnableTracing 하는 경우 추적을 사용하지 않도록 설정하려면 동일한 횟수를 호출 DisableTracing 해야 합니다.

참고 항목

동시성 런타임