다음을 통해 공유


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

Visual Studio에서는 다중 스레드 응용 프로그램의 디버깅 및 프로파일링을 광범위하게 지원합니다.

디버깅

Visual Studio 디버거를 포함의 병렬 스택병렬 작업 창 및 병렬 조사식 창.자세한 내용은 연습: 병렬 응용 프로그램 디버깅방법: 병렬 조사식 창 사용을 참조하십시오.

프로파일링

프로 파일링 도구 다중 스레드 응용 프로그램 및 기타 프로그램 자체와 상호 작용 하는 방법에 대 한 그래픽, 표 및 숫자 정보를 표시 하는 세 가지 데이터 뷰를 제공 합니다.이러한 뷰를 사용하면 관심 있는 영역을 빠르게 식별하고 표시된 그래픽의 위치에서 호출 스택, 호출 사이트 및 소스 코드로 이동할 수 있습니다.자세한 내용은 동시성 시각화 도우미를 참조하십시오.

이벤트 추적

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

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

추적을 사용하도록 설정되어 있는 경우에만 동시성 런타임에서 이러한 이벤트를 발생시킵니다.호출 하는 concurrency::EnableTracing 이벤트 추적을 사용 하는 함수 및 concurrency::DisableTracing 추적을 해제 하는 함수.

다음 표에서는 이벤트 추적을 사용하도록 설정되어 있을 때 런타임에서 발생시키는 이벤트에 대해 설명합니다.

Event

설명

concurrency::ConcRT_ProviderGuid

동시성 런타임에 대한 ETW 공급자 식별자입니다.

f7b697a3-4db5-4d3b-be71-c4d284e6592f

concurrency::ContextEventGuid

컨텍스트와 관련된 이벤트를 표시합니다.

5727a00f-50be-4519-8256-f7699871fecb

concurrency::PPLParallelForEventGuid

표시 나타내기 및 exit를 호출 하 여 concurrency::parallel_for 알고리즘.

31c8da6b-6165-4042-8b92-949e315f4d84

concurrency::PPLParallelForeachEventGuid

표시 나타내기 및 exit를 호출 하 여 concurrency::parallel_for_each 알고리즘.

5cb7d785-9d66-465d-bae1-4611061b5434

concurrency::PPLParallelInvokeEventGuid

표시 나타내기 및 exit를 호출 하 여 concurrency::parallel_invoke 알고리즘.

d1b5b133-ec3d-49f4-98a3-464d1a9e4682

concurrency::SchedulerEventGuid

작업 스케줄러와 관련된 이벤트를 표시합니다.

e2091f8a-1e0a-4731-84a2-0dd57c8a5261

concurrency::VirtualProcessorEventGuid

가상 프로세서와 관련된 이벤트를 표시합니다.

2f27805f-1676-4ecc-96fa-7eb09d44302f

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

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

런타임에서 EnableTracingDisableTracing을 호출하는 횟수를 추적합니다.따라서 EnableTracing을 여러 번 호출하는 경우 추적을 사용하지 않도록 설정하기 위해 같은 횟수만큼 DisableTracing을 호출해야 합니다.

참고 항목

개념

동시성 런타임