Вы здесь

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

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

Профилирование предназначено для выявления наиболее затратных по времени мест в программе с целью увеличения ее быстродействия (см. 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
вызов mpiprofile как функции для доступа к сгенерированным данным и сохранение собранной информации в выходном параметре p
     p = mpiprofile('info');
Скорректированный текст программы может быть, например, таким, как в прикрепленном файле ml_prof_colsum.PNG (см. ниже).

Запуск программы на профилирование
1) При запуске функции указать увеличенное соответственно на 1 число выходных параметров.
2) Запустить программу-функцию из командной строки или в окне Matlab
запуск из командной строки
    mlrun -np 9 -maxtime 5 colsum '2,{}'

запуск в окне Matlab
    imm_sch_f(9,5,'colsum',2,{});

или
    j = imm_sch_f(9,5,'colsum',2,{});

Просмотр результатов профилирования
Пусть программа запущена в окне Matlab командой вида
    j = imm_sch_f(...);

и предполагается, что просмотр результатов профилирования будет осуществлен в том же сеансе. Окончания счета при желании можно ждать с помощью команды
    wait(j);

При другом запуске или при просмотре результатов профилирования в другом сеансе необходимо по известному пользователю идентификатору закончившейся работы (например, Job8) определить значение j, выполнив следующие действия:
    sched = findResource('scheduler', 'type', 'generic');
    j=findJob(sched, 'id', 8);

Внимание.
При необходимости выполнить эти действия для другой функции, находящейся в другом каталоге того же сеанса Matlab, следует набрать команду
    clear all

Для просмотра результатов профилирования завершившейся программы надо выполнить следующие действия (см. раздел Examples в mpiprofile):
1) получить результаты:
    results = getAllOutputArguments(j);

2) выделить вектор с информацией о профилировании:
    p_Vector = [results{:, 1}];

3) запустить вьюер:
    mpiprofile('viewer', p_Vector);

Вид окна Matlab после выполнения перечисленных действий приведен в прикрепленном файле ml_prof_session.PNG (см. ниже).

Замечание.
Для повторного использования эти переменные можно сохранить, например, в файле results_file.mat :
    save('results_file','results', 'p_Vector')

и загрузить в другом сеансе:
    load ('results_file')

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

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

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

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

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