Профилирование параллельного кода

Введение

Параллельный профилировщик обеспечивает расширение команды profile и средства просмотра профиля специально для связывающихся заданий, чтобы включить вам, чтобы видеть, как много времени каждый рабочий тратит выполнение каждой функции и сколько времени, связываясь или ожидая связей с другими рабочими. Перед использованием параллельного профилировщика ознакомьте себя с типичным профилировщиком и его представлениями, как описано в Профиле, чтобы Улучшать Производительность (MATLAB).

Примечание

Параллельный профилировщик работает над связывающимися заданиями, включая внутреннюю часть pmode. Это не работает над parfor - циклы.

Сбор параллели профилирует данные

Для параллельного профилирования вы используете команду mpiprofile в своем задании передачи (часто в pmode) похожим способом к тому, как вы используете profile.

Чтобы включить параллельный профилировщик, чтобы начать собирать данные, введите следующую строку в свой файл кода задачи задания передачи или введите в подсказке pmode в Параллельном Командном окне:

mpiprofile on

Теперь профилировщик собирает информацию о подписании кода по каждому рабочему и связям между рабочими. Такая информация включает:

  • Время выполнения каждой функции на каждом рабочем

  • Время выполнения каждой строки кода в каждой функции

  • Объем данных передается между каждым рабочим

  • Количество времени каждый рабочий тратит ожидание коммуникаций

С параллельным профилировщиком на можно продолжить выполнять код, в то время как профилировщик собирает данные.

В Командном окне Параллели pmode, чтобы узнать, ли включен профилировщик, введите:

P>> mpiprofile status

Для полного списка опций относительно деталей данных профилировщика, очищая данные, и т.д., смотрите страницу с описанием mpiprofile.

Просмотр параллели профилирует данные

Чтобы открыть параллельное средство просмотра профиля от pmode, введите в Параллельном Командном окне:

P>> mpiprofile viewer

Остаток от этого раздела является примером, который иллюстрирует некоторые функции параллельного средства просмотра профиля. Этот пример выполняется на pmode сеансе, работающем на четырех локальных рабочих. Инициируйте pmode путем ввода в Командном окне MATLAB®:

pmode start local 4

Когда Параллельное Командное окно (pmode) запустится, введите следующий код в подсказке pmode:

P>> R1 = rand(16, codistributor())
P>> R2 = rand(16, codistributor())
P>> mpiprofile on
P>> P = R1*R2
P>> mpiprofile off
P>> mpiprofile viewer

Последняя команда открывает окно Profiler, сначала показывая Параллельные Сводные данные Профиля (или функциональный сводный отчет) для рабочего (лаборатория) 1.

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

Заголовок столбцаОписание
ВызовыСколько раз функция была вызвана на этом рабочем
Общее времяОбщая сумма времени этот рабочий потратила выполнение этой функции
Сам времяВремя этот рабочий потратило в этой функции, не в дочерних элементах или локальных функциях
Общее время коммуникацииОбщее время этот рабочий потратило передачу данных с другими рабочими, включая время ожидания, чтобы получить данные
Сам время ожидания коммуникацииВремя этот рабочий, потраченный во время этой функции, ожидающей, чтобы получить данные от других рабочих
Общие данные межлабораторииОбъем данных, переданный и от этого рабочего для этой функции
Отношение времени вычисленияОтношение времени потратило в вычислении для этой функции по сравнению с общим временем (который включает коммуникационное время) для этой функции
Общий график временной зависимостиГистограмма, показывающая относительный размер Сам Время, Сам Время ожидания Коммуникации и Общее Время для этой функции на этом рабочем

Выберите имя любой функции в списке для получения дополнительной информации о выполнении этой функции. Функциональный детализированный отчет для codistributed.mtimes включает этот листинг:

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

Можно отобразить информацию для каждого рабочего или использовать средства управления сравнением, чтобы отобразить информацию для нескольких рабочих одновременно. Две кнопки обеспечивают Automatic Comparison Selection, позволяя вам сравнить данные от рабочих, которые взяли большинство по сравнению с наименьшим количеством количества времени, чтобы выполнить код или данные от рабочих, которые потратили большинство по сравнению с наименьшим количеством количества времени в выполнении коммуникации межрабочего. Manual Comparison Selection позволяет вам сравнивать данные от определенных рабочих или рабочих, которые соответствуют определенным критериям.

Следующий листинг из сводного отчета показывает результат использования Automatic Comparison Selection Compare (max vs. min TotalTime). Сравнение показывает данные от рабочего (лаборатория) 3 по сравнению с рабочим (лаборатория) 1, потому что это рабочие, которые тратят большинство по сравнению с наименьшим количеством количества времени, выполняющего код.

Следующие данные показывают сводные данные всех функций, выполняемых в течение времени набора профиля. Manual Comparison Selection max Time Aggregate означает, что данные, как рассматривается, от всех рабочих для всех функций определяют, какой рабочий провел максимальное время на каждой функции. Рядом с именем каждой функции рабочий, который занял самое долгое время, чтобы выполнить эту функцию. Другие столбцы перечисляют данные от того рабочего.

Следующие данные показывают сводный отчет для рабочих, которые тратят большинство по сравнению с наименьшим количеством времени для каждой функции. Manual Comparison Selection max Time Aggregate против min Time >0 Aggregate сгенерировал эти сводные данные. Обе совокупных настройки указывают, что профилировщик должен рассмотреть данные от всех рабочих для всех функций, и для максимума и для минимума. Этот отчет перечисляет данные для codistributed.mtimes от рабочих 3 и 1, потому что они провели максимальные и минимальные времена на этой функции. Точно так же другие функции перечислены.

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

Чтобы видеть графики передаваемых данных, выберите Plot All PerLab Communication в меню Show Figures. Главный фрагмент графика просматривает графики отчета, сколько данных каждый рабочий принимает друг от друга рабочего для всех функций.

Чтобы видеть только график коммуникационных времен межрабочего, выберите Plot CommTimePerLab в меню Show Figures.

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