Использование параллельного профилирования

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

Профилирование предназначено для выявления наиболее затратных по времени мест в программе с целью увеличения ее быстродействия (см. Profile to Improve Performance).
Профилирование параллельных программ определяет как затраты на вычисление функций, так и затраты на коммуникации (см. Profiling Parallel Code).
Профилирование в Matlab осуществляется с помощью инструмента, называемого профилировщик или профайлер (profiler).

Результатом профилирования являются суммарный и детальный отчеты о выполнении программы.
Суммарный отчет о профилировании параллельной программы содержит для каждого параллельного процесса (lab) информацию о времени вычисления функций и частоте их использования, а также о времени, затраченном на обмены (коммуникации) и ожидание обменов с другими процессами.
Для проблемных функций полезно выдавать детальный отчет, в котором содержится статистика по строкам функций, а именно: время выполнения и частота использования.

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

Вверх
Действия пользователя

Действия пользователя иллюстрируются на примере функции colsum() по аналогии с функцией foo() из раздела Examples описания команды (функции) mpiprofile.

Внесение изменений в текст программы

1) В заголовок функции добавить выходной параметр для информации о профилировании, назовем его p:

function [p, total_sum] = colsum

2) В тело функции добавить команду mpiprofile, а именно:

mpiprofile on

для включения профилирования (начала сбора данных)

mpiprofile off

для выключения профилирования при необходимости (или желании)

p = mpiprofile('info');

для доступа к сгенерированным данным и сохранения собранной информации в выходном параметре p.
Пример скорректированной программы приведен ниже в файле ml_prof_colsum.PNG.

Запуск программы на профилирование

1) При запуске функции указать увеличенное соответственно на 1 число выходных параметров.
2) Запустить программу-функцию из командной строки:

mlrun -np 9 -maxtime 5 colsum '2'

или в окне Matlab:

j = imm_sch(9,5,@colsum,2);

Замечание. Окончания счета при желании можно ждать с помощью команды wait(j).

Просмотр результатов профилирования

Пусть программа запущена в окне Matlab. Тогда по окончании счета следует
1) получить результаты:

out = j.fetchOutputs;

2) выделить вектор с информацией о профилировании:

p_vector = [out{:, 1}];

3) запустить вьюер:

mpiprofile('viewer', p_vector);

Подобные действия для ранних версий приведены ниже в файле ml_prof_session.PNG.

Для повторного использования полученные переменные можно сохранить командой:

save ('res_prof', 'out', 'p_vector')

(в файле res_prof.mat) и загрузить при необходимости в другом сеансе:

load ('res_prof')

Вверх
Некоторые советы

Первая реализация программы должна быть настолько проста, насколько возможно, т.е. не рекомендуется ранняя оптимизация.

Профилирование может быть использовано
- в качестве инструмента отладки;
- для изучения (понимания) незнакомых файлов.
При отладке программы детальный отчет даст представление о том, какие строки выполнялись, а какие нет. Эта информация может помочь в расширении набора тестов.
Для очень длинного файла с незнакомым матлабовским кодом можно использовать профайлер, чтобы посмотреть, как файл в реальности работает, т.е. посмотреть вызываемые строки в детальном отчете.

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

Прикрепленный файлРазмер
Иконка изображения ml_prof_colsum.PNG38.44 КБ
Иконка изображения ml_prof_session.PNG85.25 КБ