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

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

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

Совет

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

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

Профильный процесс и инструкции

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

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

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

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

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

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

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

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

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

  6. Чтобы продолжить улучшать производительность вашего кода, повторите эти шаги.

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

Используя профилировщика

Профилировать файл кода MATLAB или строку кода:

  1. Откройте Профилировщик, использующий один из следующих методов:

    • В Командном окне введите profile viewer.

    • На вкладке Home, в разделе Code, нажимают Run and Time.

    • В Редакторе, на вкладке Editor, в разделе Run, нажимают Run and Time. Если вы используете этот метод, Профилировщик автоматически профилирует код в текущей вкладке Editor. Если это - код, вы хотите профилировать, пропустить к шагу 4.

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

    Например, можно запустить пример Лотки - Вольтерры, которому предоставляют MATLAB:

    [t,y] = ode23('lotka',[0 2],[20;20])

    Если в текущем сеансе работы с MATLAB вы ранее профилировали оператор, выберите его из списка Run this code. MATLAB автоматически начинает профилировать код, и можно пропустить к шагу 4.

  3. Нажмите Start Profiling.

    В то время как Профилировщик запускается, индикатор Profile time является зеленым и номер секунд, это сообщает об увеличениях. Индикатор Profile time появляется в правом верхнем из окна Profiler.

    Когда Профилировщик закончил, индикатор Profile time становится черным и показывает отрезок времени, который запустил Профилировщик. Операторы вы профилировали отображение, как выполняемое в Командном окне.

    Это время не является фактическим временем, когда ваши операторы взяли, чтобы запуститься. Это - время, истекшее от того, когда вы нажали Start Profiling до профильных остановок. Если время, о котором сообщают, очень отличается от того, что вы ожидали (например, сотни секунд для простого оператора), вы можете профилировать дольше, чем необходимый. Это время не совпадает со временем, о котором сообщают в статистике Сводного отчета Профиля, которая основана на performance, показывают время по умолчанию. Чтобы просмотреть статистику профиля с помощью другого типа часов, используйте функцию profile вместо Профилировщика.

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

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

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

  1. В Профилировщике нажмите Start Profiling. Убедитесь, что никакой код не появляется в поле Run this code.

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

  3. После выполнения всех операторов нажмите Stop Profiling в Профилировщике и посмотрите Сводный отчет Профиля.

Профилирование пользовательского интерфейса

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

Профилировать пользовательский интерфейс:

  1. В Профилировщике нажмите Start Profiling. Убедитесь, что никакой код не появляется в поле Run this code.

  2. Запустите пользовательский интерфейс.

  3. Используйте интерфейс. Когда вы закончите, нажмите Stop Profiling в Профилировщике и посмотрите Сводный отчет Профиля.

Примечание

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

Сводный отчет по профилированию

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

Сводный отчет Профиля представляет эту информацию.

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

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

Calls

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

Total Time

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

Self Time

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

Total Time Plot

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

В сводном отчете вы можете:

  • Распечатайте отчет путем нажатия на кнопку печати.

  • Получите более подробную информацию о конкретной функции путем нажатия на ее имя в столбце Function Name. Для получения дополнительной информации смотрите Детализированный отчет Профиля.

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

Профилирование детализированного отчета

Детализированный отчет Профиля показывает профильные результаты для функции, что MATLAB вызвал при профилировании.

Чтобы открыть Детализированный отчет Профиля, кликните по имени функции в Сводном отчете Профиля. Чтобы возвратиться к Сводному отчету Профиля от Детализированного отчета Профиля, щелкните на панели инструментов окна Profile.

Заголовок Детализированного отчета Профиля содержит эту информацию.

  • Имя профилируемой функции

  • Число раз родительская функция вызвало профилируемую функцию

  • Время проведено в профилируемой функции

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

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

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

Параметр экранаДетали
Show parent functions

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

Show busy lines

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

Show child functions

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

Show Code Analyzer results

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

Show file coverage

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

Show function listing

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

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

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

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

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

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

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

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

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

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

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

Похожие темы