다음을 통해 공유


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

업데이트: 2010년 6월

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

디버깅

Visual Studio 디버거에 병렬 스택 창 및 병렬 작업 창이 새로 추가되었습니다. 자세한 내용은 연습: 병렬 응용 프로그램 디버깅을 참조하십시오.

프로파일링

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

이벤트 추적

동시성 런타임에서는 다양한 이벤트가 발생할 경우 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

Concurrency::parallel_for 알고리즘에 대한 호출의 진입 및 종료를 표시합니다.

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

Concurrency::PPLParallelForeachEventGuid

Concurrency::parallel_for_each 알고리즘에 대한 호출의 진입 및 종료를 표시합니다.

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

Concurrency::PPLParallelInvokeEventGuid

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을 호출해야 합니다.

참고 항목

개념

동시성 런타임

변경 기록

날짜

변경 내용

이유

2010년 6월

이벤트 추적에 대한 정보를 추가했습니다.

향상된 기능 관련 정보