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

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

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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • На вкладке Home, в Секции кода, нажимают Run и Time.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

Вызовы

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

Общее время

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

Сам время

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

Общий график временной зависимости

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметр экранаДетали
Покажите родительские функции

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

Покажите занятые строки

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

Покажите дочерние функции

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

Покажите результаты Анализатора кода

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

Покажите покрытие файла

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

Покажите функциональный листинг

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

Для каждой строки кода Функциональный листинг включает эти столбцы:

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

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

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

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

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

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

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

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

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

Похожие темы

Была ли эта тема полезной?