Профилирование является способом измериться, где программа проводит время. После того, как вы идентифицируете, какие функции используют большую часть времени, можно оценить их для возможных повышений производительности. Кроме того, можно профилировать код как средство отладки. Например, определение, которое не запускают линии кода MATLAB®, может помочь вам разработать тесты то осуществление тот код. Если вы получаете ошибку в файле при профилировании, вы видите то, что запустилось и что не сделало, чтобы помочь вам изолировать проблему.
Код, который преждевременно оптимизирован, может быть излишне комплексным, не предоставляя значительное усиление в производительности. Сделайте свою первую реализацию максимально простой. Затем если скорость является проблемой, используйте профилирование, чтобы идентифицировать узкие места.
Можно профилировать код с помощью профилировщика MATLAB. Профилировщик является пользовательским интерфейсом на основе результатов, возвращенных profile
функция. Если вы профилируете код, который запускается параллельно, поскольку лучшие результаты используют профилировщик параллели Parallel Computing Toolbox™. Для получения дополнительной информации см. Профильный Параллельный Код (Parallel Computing Toolbox).
Используйте этот общий процесс, чтобы улучшать производительность в вашем коде:
Запустите Профилировщик на своем коде.
В Сводном отчете Профиля ищите функции, которые используют существенное количество времени или которые называются наиболее часто.
Просмотрите Детализированный отчет Профиля для тех функций и ищите строки кода, которые занимают большую часть времени или чаще всего называются.
Рассмотрите хранение копии вашего первого детализированного отчета как основание для сравнения. После того, как вы измените свой код, можно запустить Профилировщик снова и сравнить отчеты.
Определите, существуют ли изменения, которые можно внести в те строки кода, чтобы улучшать производительность.
Например, если у вас есть load
оператор в цикле, вы можете смочь переместить load
оператор вне цикла так, чтобы это было названо только однажды.
Реализуйте потенциальные повышения производительности в своем коде. Сохраните файлы и запустите clear all
. Запустите Профилировщик снова и сравните результаты с первоначальным отчетом.
Если вы профилируете идентичный код дважды, можно получить немного отличающиеся результаты каждый раз из-за свойственных колебаний времени, которые не зависят от кода.
Чтобы продолжить улучшать производительность вашего кода, повторите эти шаги.
Когда ваш код проводит большую часть своего времени на вызовах нескольких встроенных функций, вы, вероятно, оптимизировали код как можно больше.
Профилировать файл кода MATLAB или строку кода:
Откройте Профилировщик, использующий один из следующих методов:
В Командном окне введите profile viewer
.
На вкладке Home, в разделе Code, нажимают Run and Time.
В Редакторе, на вкладке Editor, в разделе Run, нажимают Run and Time. Если вы используете этот метод, Профилировщик автоматически профилирует код в текущей вкладке Editor. Если это - код, вы хотите профилировать, пропустить к шагу 4.
В поле Run this code введите оператор, который вы хотите запустить.
Например, можно запустить пример Лотки - Вольтерры, которому предоставляют MATLAB:
[t,y] = ode23('lotka',[0 2],[20;20])
Если в текущем сеансе работы с MATLAB вы ранее профилировали оператор, выберите его из списка Run this code. MATLAB автоматически начинает профилировать код, и можно пропустить к шагу 4.
Нажмите Start Profiling.
В то время как Профилировщик запускается, индикатор Profile time является зеленым и номер секунд, это сообщает об увеличениях. Индикатор Profile time появляется в правом верхнем из окна Profiler.
Когда Профилировщик закончил, индикатор Profile time становится черным и показывает отрезок времени, который запустил Профилировщик. Операторы вы профилировали отображение, как выполняемое в Командном окне.
Это время не является фактическим временем, когда ваши операторы взяли, чтобы запуститься. Это - время, истекшее от того, когда вы нажали Start Profiling до профильных остановок. Если время, о котором сообщают, очень отличается от того, что вы ожидали (например, сотни секунд для простого оператора), вы можете профилировать дольше, чем необходимый. Это время не совпадает со временем, о котором сообщают в статистике Сводного отчета Профиля, которая основана на performance
покажите время по умолчанию. Чтобы просмотреть статистику профиля с помощью другого типа часов, используйте profile
функция вместо Профилировщика.
Когда профилирование завершено, Сводный отчет Профиля появляется в окне Profiler. Для получения дополнительной информации см. Сводный отчет по профилированию.
Профилировать больше чем один оператор:
В Профилировщике нажмите Start Profiling. Убедитесь, что никакой код не появляется в поле Run this code.
В Командном окне введите и запустите операторы, которые вы хотите профилировать.
После выполнения всех операторов нажмите Stop Profiling в Профилировщике и посмотрите Сводный отчет Профиля.
Можно запустить Профилировщик для пользовательского интерфейса, такого как инструмент Filter Design и Analysis, включенный с Signal Processing Toolbox™. Или, можно профилировать интерфейс, который вы создали, такие как один созданный GUIDE использования.
Профилировать пользовательский интерфейс:
В Профилировщике нажмите Start Profiling. Убедитесь, что никакой код не появляется в поле Run this code.
Запустите пользовательский интерфейс.
Используйте интерфейс. Когда вы закончите, нажмите 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 включает эти столбцы:
По умолчанию Детализированный отчет Профиля подсвечивает строки кода с самым долгим временем выполнения. Чем более темный выделение, тем дольше строка кода взяла, чтобы выполниться. Чтобы изменить критерии выделения, используйте цветной код подсветки выпадающий список. |