Поделиться через


Средства диагностики параллельного выполнения (среда выполнения с параллелизмом)

Microsoft Visual Studio 2010 обеспечивает расширенную поддержку отладки и профилирования многопоточных приложений.

Отладка

Отладчик Visual Studio добавляет новые окна Параллельные стеки и Параллельные задачи. Дополнительные сведения см. в разделе Пошаговое руководство. Отладка параллельного приложения.

Профилирование

Средства профилирования Visual Studio Team Developer Edition предоставляет три представления данных, отображающих графическую, табличную и числовую информацию о том, как многопоточное приложение взаимодействует с самим собой и с другими программами. Представления позволяют быстро определить необходимые области и перейти из точек на графических изображениях к стекам вызовов, местам вызовов и исходному коду. Дополнительные сведения см. в разделе Визуализатор параллелизма.

Трассировка событий

Среда выполнения с параллелизмом использует Трассировку событий Windows (ETW), чтобы уведомлять средства инструментирования, например профилировщики, о различных событиях. К этим событиям может относится активация или отключение планировщика, запуск, окончание, блокировка, разблокировка или передача контекста, а также запуск и окончание параллельного алгоритма.

Эту функцию используют такие средства, как Визуализатор параллелизма; обычно не требуется работать с этими событиями непосредственно. Однако эти события полезны при разработке пользовательского профилировщика или при использовании таких средств трассировки событий, как Xperf.

Среда выполнения с параллелизмом создает эти события только при включенной трассировке. Чтобы включить трассировку событий, следует вызвать функцию Concurrency::EnableTracing, а чтобы выключить — функцию Concurrency::DisableTracing.

В следующей таблице перечислены события, которые создает среда выполнения при включенной трассировке.

Событие

Описание

Значение

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

Среда выполнения трассирует, сколько раз производятся вызовы к EnableTracing и DisableTracing. Если вызвать EnableTracing несколько раз, чтобы отключить трассировку, необходимо столько же раз вызвать DisableTracing.

См. также

Основные понятия

Среда выполнения с параллелизмом

Журнал изменений

Дата

Журнал

Причина

Июнь 2010

Добавлены сведения о трассировке событий.

Улучшение информации.