Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 02.10.2012 | Доступ: свободный | Студентов: 1753 / 198 | Длительность: 17:47:00
Специальности: Программист
Лекция 6:

Введение в использование инструментов для параллельного программирования на примере пакета Intel Parallel Studio

Наведите курсор мыши на столбец и щелкните левой кнопкой один раз. В нижней части окна Profile появится информация о том, сколько времени приложение функционировало в различных режимах - распределение времени по категориям.

Двойной щелчок на столбце позволяет получить более подробную информацию. Попробуем, например, получить полную информацию об участке критического пути оранжевого цвета (здесь и далее имеется в виду ярко-оранжевый цвет). Для этого наведите на него курсор и произведите двойной щелчок левой кнопкой мьши. Критический путь распадется на уровни параллелизма (concurrency), в чем можно убедиться по нажатой кнопке CL на панели группировки и надписям под различными столбцами. Щелкните по оранжевому участку еще раз - и единый столбец снова распадется на несколько, уже по числу потоков. Еще один двойной щелчок приведет нас к уровню функций. Теперь надпись под столбцом однозначно указывает на имя функции, время работы которой вошло в критический путь с оранжевым цветом. Если произвести еще один двойной щелчок, то откроется вид исходного кода (рис. 6.36 ).

Обращение к исходному коду приложения

увеличить изображение
Рис. 6.36. Обращение к исходному коду приложения

Здесь мы можем убедиться, что за участок критического пути оранжевого цвета отвечает рабочая функция потоков, производящих факторизацию чисел.

Чтобы вернуться к исходному представлению критического пути, выключите все фильтры, нажав кнопку с изображением воронки Воронка, а затем отмените всякую группировку, нажав кнопку Перечеркнутый красный круг.

Если имеется необходимость понять, какой участок кода отвечает за некоторый участок критического пути, можно поступить более простым способом, чем мы делали это раньше. А именно, выберите способ группировки по исходному коду. Для этого нажмите на кнопку с изображением файла . После этого наведите курсор мыши на интересующий вас участок критического пути и нажмите правую кнопку мыши. Если ITP имеет доступ к коду, который отвечает за данный участок критического пути, то в контекстном меню будет доступен пункт Transition Source View. Выберите его - откроется вид исходного кода.

Однако не всегда можно спуститься до уровня исходного кода - так случается, если в приложении не содержится отладочная информация. Типичная ситуация - приложение использует вызовы библиотеки, которая была получена в скомпилированном виде.

Итак, окно Profile предоставляет возможности анализа критического пути. С его помощью можно узнать распределение времени работы приложения по категориям. Но при этом мы получаем очень мало информации о динамике работы приложения. Для понимания того, что происходило с потоками во время исполнения, как они взаимодействовали между собой, обратимся к следующему окну ITP - окну Timeline.

Окно Timeline

Окно Timeline содержит три основных элемента, так же как и окно Profile: рабочая область, панель инструментов и легенда. Панель инструментов в данном случае предназначена лишь для изменения масштаба временной оси.

Рабочая область

В рабочей области окна Timeline содержится информация о поведении потоков. В верхней части рабочей области имеется временная шкала. Ниже располагаются полосы, каждая из которых соответствует одному потоку приложения.

Окно Timeline

увеличить изображение
Рис. 6.37. Окно Timeline

На рис. 6.37 показано, что в нашем приложении было запущено три потока. Также можно увидеть, что один из них существовал с начала времени выполнения приложения, а два других были созданы позже. Время жизни потока равно длине полосы. Раскраска полосы не всегда одинакова - она указывает на состояния потока в различные моменты времени (см. легенду). Наведите курсор мыши на бледно-зеленую часть самой верхней полосы, соответствующей основному потоку. В появившейся подсказке будет сказано, что на этом промежутке времени поток находился в режиме ожидания.

Рассмотрим подробнее момент возникновения потоков. Для этого в рабочей области необходимо выделить область, охватывающую розовую стрелку. Наведите курсор мыши немного левее стрелки, зажмите левую клавишу и передвиньте курсор правее стрелки, после чего отпустите кнопку мыши. Повторите увеличение еще несколько раз, пока вид в рабочей области не станет таким, как показано на рис. 6.38.

Момент создания потоков

увеличить изображение
Рис. 6.38. Момент создания потоков

Здесь уже можно видеть, что второй поток был создан несколько позже первого. Наведите курсор мыши на одну из розовых стрелок и убедитесь, что она соответствует вызову функции создания потока. Длина этой стрелки, спроектированная на ось времени, показывает время задержки между вызовом функции создания потока и фактическим его запуском.

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

Вернемся к изучению трассы приложения в целом. Нажмите на панели инструментов окна Timeline кнопку с изображением воронки Воронка.

Рабочая область снова должна принять вид как на рис. 6.22.

Глядя на этот рисунок, можно сразу понять, в чем причины того, что основную часть времени наше приложение работает в последовательном режиме. Мы неравномерно распределили вычислительную нагрузку между потоками. Второй из дочерних потоков работает гораздо дольше первого, в результате чего увеличивается суммарное время работы приложения. Таким образом, если мы хотим повысить производительность нашего приложения, то первое, что мы должны сделать, - распределить нагрузку между потоками равномерно. Тогда время работы приложения сократится за счет того, что часть нагрузки второго дочернего потока будет отдана первому.

Последнее, что осталось изучить в рабочей области окна Timeline - это как из него получить доступ к исходному коду. Наведите курсор мыши на любую из полос, соответствующих дочерним потокам, и нажмите правую кнопку мыши. В появившемся контекстном меню выберите пункт Thread Creation/Entry Source View,. Откроется окно с исходным кодом, отвечающим за создание потока. Вернитесь к окну Timeline и наведите курсор на бледнозеленую часть полосы, соответствующей основному потоку приложения, нажмите правую кнопку мыши и выберите пункт Transition Source View. Откроется окно с исходным кодом, в котором указано место ожидания основного потока (рис. 6.39).

Место ожидания основного потока

увеличить изображение
Рис. 6.39. Место ожидания основного потока

В нашем случае это вызов функции WaitForMultipleObjects, которая необходима здесь для ожидания завершения дочерних потоков.

Вернемся к окну Timeline и рассмотрим легенду.

Выбор показателей поведения потоков для визуализации

Общая структура и функции легенды такие же, как и в окне Profile, поэтому мы не будем останавливаться на кнопках-флажках Thread State и Critical Path Data. Вы можете поэкспериментировать с ними и проследить, как меняется вид в рабочей области окна Timeline.

Рассмотрим назначение новых кнопок-флажков. Первый из них имеет название Transitions и отвечает за отображение в рабочей области стрелок, соответствующих посылке сигналов между потоками. Снимите флажок Fork/Join - останутся три стрелки желтого цвета, показывающие посылаемые в приложении сигналы. В нашем случае это сигналы, связанные с созданием и завершением потоков.

Теперь снимите флажок Transitions и установите флажок Fork/Join. Должны появиться стрелки, указывающие на вызовы функций класса Fork/Join (создание и ожидание завершения потоков). Можно заметить, что они совпадают с желтыми стрелками, которые мы видели до этого. Единственное отличие - появление розовой стрелки, соединяющей конец полосы первого дочернего потока с полосой основного потока.

Последний флажок называется User Event. Мы не станем рассматривать его, подробная информация о нем может быть найдена в [7].

Таким образом, мы выяснили, что наше приложение содержит поток, большую часть времени работающий в последовательном режиме. Причины такой ситуации и способы увеличения производительности нашего примера мы рассмотрим в лабораторной работе 1, раздел 4.

Контрольные вопросы

  1. Наличие каких цветов в критическом пути свидетельствует о проблемах с производительностью приложения?
  2. На какие цвета, по вашему мнению, нужно обратить внимание прежде всего?
  3. Если вам известно несколько причин низкой производительности вашего приложения, в какой последовательности лучше их устранять?
  4. Зачем используется группировка?
  5. В чем разница между группировкой по объектам и по типам объектов?
  6. В окне Profile установите первичную группировку по потокам, а вторичную - по уровню параллелизма. Установите соответствие между столбцами в окне Profile и полосами в окне Timeline.
  7. Как было установлено, основная причина медленной работы учебного приложения - неравномерное распределение нагрузки между потоками. Предложите ваш способ решения данной проблемы.

Литература

  1. Developing Multithreaded Applications: A Platform Consistent Approach. Intel Corporation, March 2003.
  2. Threading Methodology: Principles and Practices. Intel Corporation, March 2003.
  3. Multi-Core Programming for Academia. Student Workbook, by Intel.
  4. Akhter Sh., Roberts J. Multi-Core Programming. Intel Press, 2006.
  5. Intel® Thread Profiler. Getting Started Guide.
  6. Intel® Thread Profiler. Guide to Sample Code.
  7. Intel® Thread Profiler Help.
Дмитрий Остапенко
Дмитрий Остапенко

поддерживаю выше заданые вопросы

 

Павел Каширин
Павел Каширин

Скачал архив и незнаю как ничать изучать материал. Видео не воспроизводится (скачено очень много кодеков, различных плееров -- никакого эффекта. Максимум видно часть изображения без звука). При старте ReplayMeeting и Start в браузерах google chrome, ie возникает script error с невнятным описанием. В firefox ситуация еще интереснее. Выводится: 

Meet Now: Кукаева Светлана Александровна. 

Meeting Start Time: 09.10.2012, 16:58:04
Meeting Stop Time: 09.10.2012, 18:45:18
Recording Duration:01:47:14

Downloading...

Your Web browser is not configured to play Windows Media audio/video files.

Make sure the features are enabled and available.