Профилируйте свой код, чтобы улучшать производительность

Что является профильным?

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

Можно профилировать код в интерактивном режиме с помощью профилировщика MATLAB или программно с помощью profile функция. Для получения дополнительной информации о профилировании вашего кода программно, смотрите profile. Если вы профилируете код, который запускается параллельно, поскольку лучшие результаты используют профилировщик параллели Parallel Computing Toolbox™. Для получения дополнительной информации см. Профильный Параллельный Код (Parallel Computing Toolbox).

Совет

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

Профилируйте свой код

Чтобы профилировать ваш код и улучшать его производительность, используйте этот общий процесс:

  1. Запустите Профилировщик на своем коде.

  2. Рассмотрите результаты сводных данных профиля.

  3. Исследуйте функции и отдельные строки кода.

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

  4. Сохраните профильные результаты.

  5. Реализуйте потенциальные повышения производительности в своем коде.

    Например, если у вас есть load оператор в цикле, вы можете смочь переместить load оператор вне цикла так, чтобы это было названо только однажды.

  6. Сохраните файлы и запустите clear all. Запустите Профилировщик снова и сравните результаты с исходными результатами.

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

Запустите профилировщик на своем коде

Запускать Профилировщик на строке кода:

  1. На вкладке Home, в разделе Code, нажимают Run and Time, чтобы открыть Профилировщик. Также можно ввести profile viewer в Командном окне.

  2. Перейдите к вкладке Profiler, и в разделе Profile, введите код, который вы хотите профилировать в окне редактирования.

    Например, создайте функциональный solvelotka.m это находит добычу и peaks популяции хищников для примера Лотки - Вольтерры предоставленными MATLAB:

    function [preypeaks,predatorpeaks] = solvelotka(t0, tfinal, y0)
        [~,y] = ode23(@lotka,[t0 tfinal],y0);
        
        preypeaks = calculatepeaks(y(:,1));
        predatorpeaks = calculatepeaks(y(:,2));
        
    end
    
    function peaks = calculatepeaks(A)
        [TF,P] = islocalmax(A);
        peaks = P(TF);
    end
    Введите этот оператор в окно редактирования, чтобы профилировать solvelotka функция:
    [preypeaks,predatorpeaks] = solvelotka(0,15,[20;20])

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

  3. Нажмите Run and Time.

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

Чтобы профилировать файл кода, открытый в Редакторе, на вкладке Editor, в разделе Run, нажимают Run and Time. Профилировщик профилирует файл кода, открытый в текущей вкладке Editor, и отображает результаты в Сводных данных Профиля.

Рассмотрите результаты сводных данных профиля

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

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

Функции в графике отображают в иерархии с родительскими функциями, кажущимися ниже на графике и дочерних функциях, кажущихся выше на графике. Панель, которая охватывает целую нижнюю часть графика, пометила Profile Summary, представляет весь код, который запустился. Ширина панели на графике представляет количество времени, которое это заняло для функции, чтобы запуститься как процент общего времени выполнения.

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

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

СтолбецОписание
Function Name

Имя функции вызвано профилируемым кодом.

Calls

Число раз профилируемый код вызвало функцию.

Total Time

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

Self Time

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

Total Time Plot

Показ графического дисплея сам время по сравнению с общим временем.

Чтобы отсортировать функциональную таблицу по определенному столбцу, кликните по стрелке в заголовке столбца. Например, кликните по стрелке в столбце Function Name, чтобы отсортировать функции в алфавитном порядке. Первоначально результаты появляются в порядке Total Time. Чтобы отобразить подробную информацию о функции включая информацию об отдельных строках кода, кликните по имени функции.

Исследуйте функции и отдельные строки кода

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

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

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

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

РазделДетали
Flame Graph

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

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

Parents

Список функций, которые вызывают профилируемую функцию, включая число раз родительская функция, вызвал профилируемую функцию.

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

Lines where the most time was spent

Список строк кода в профилируемой функции, которая использовала самую большую сумму времени вычислений.

Кликните по строке кода, чтобы видеть его в разделе Function Listing в контексте остальной части функционального кода.

Children

Список всех функций вызван профилируемой функцией.

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

Code Analyzer results

Список проблем и потенциальных улучшений для профилируемой функции.

Coverage results

Статистика покрытия кода о строках кода в функции, что MATLAB, выполняемый при профилировании.

Function listing

Исходный код для функции, если это - файл кода MATLAB.

Для каждой строки кода Function listing включает эти столбцы:

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

  • Число раз, что MATLAB выполнил строку кода

  • Номер строки.

    Кликните по номеру строки в Function listing, чтобы открыть функцию в вашем редакторе по умолчанию.

  • Исходный код для функции. Цвет текста указывает на следующее:

    • Зеленый — Прокомментировал линии

    • Черный — Выполняемые строки кода

    • Серый — Невыполняемые строки кода

По умолчанию Профилировщик подсвечивает строки кода с самым долгим временем выполнения. Чем более темный выделение, тем дольше строка кода взяла, чтобы выполниться. Чтобы изменить критерии выделения, перейдите к вкладке Profiler, и в разделе View, нажмите Highlight . Выберите из доступных опций выделения. Например, чтобы подсветить строки кода, которые не запускались, выберите Non coverage опция.

Сохраните свои результаты

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

Также можно распечатать результаты Профилировщика путем движения во вкладку Profiler и нажатия кнопки Print.

Профилирование нескольких операторов в командном окне

Профилировать больше чем один оператор в Командном окне:

  1. Перейдите к Командному окну и введите profile on.

  2. Введите и запустите операторы, которые вы хотите профилировать.

  3. После выполнения всех операторов введите profile off.

  4. Откройте Профилировщик путем ввода profile viewer. Также можно перейти к вкладке Home, и в разделе Code, нажать Run and Time.

  5. Рассмотрите результаты Сводных данных Профиля.

Профилируйте приложение

Можно профилировать приложения, которые вы создаете в App Designer. Также можно профилировать приложения, которые поставляются с Продуктами Mathworks, такими как инструмент Filter Design и Analysis, включенный с Signal Processing Toolbox™.

Профилировать приложение:

  1. Откройте Профилировщик путем движения во вкладку Home, и в разделе Code, нажмите Run and Time. Также можно ввести profile viewer в Командном окне.

  2. В разделе Profile панели инструментов Профилировщика нажмите Start Profiling. Убедитесь, что никакой код не появляется в поле Enter code to run and time.

  3. Запустите приложение.

  4. Используйте приложение.

  5. Когда вы будете закончены, нажмите Stop Profiling в панели инструментов Профилировщика.

  6. Рассмотрите результаты Сводных данных Профиля.

Примечание

Чтобы исключить приложение запускают процесс в профиле, противоположных шагах 2 и 3. Другими словами, запустите приложение, прежде чем вы нажмете Start Profiling.

Смотрите также

Похожие темы