профиль

Профилируйте время выполнения для функций

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

Синтаксис

profile action
profile action option1 ... optionN
profile option1 ... optionN
p = profile('info')
s = profile('status')

Описание

пример

profile action профилирует время выполнения для функций. Используйте action, чтобы запустить, остановить и перезапустить Профилировщик, и представление или ясную статистику профиля. Например, profile on запускает Профилировщик.

пример

profile action option1 ... optionN запускает или перезапускает Профилировщик с заданными опциями. Например, profile resume -history перезапускает Профилировщик и записывает последовательность вызовов функции.

пример

profile option1 ... optionN устанавливает заданные опции Профилировщика. Если Профилировщик включен, и вы задаете одну из опций, MATLAB выдает ошибку. Чтобы изменить опции, сначала задайте profile off, и затем задайте новые опции.

пример

p = profile('info') останавливает Профилировщик и отображает структуру, содержащую результаты. Чтобы получить доступ к данным, сгенерированным profile, используйте этот синтаксис.

пример

s = profile('status') возвращает структуру с информацией о статусе Профилировщика.

Примеры

свернуть все

Этот пример не поддержан в MATLAB Online™.

Включите Профилировщик и вызовите функцию magic.

profile on
n = 100;
M = magic(n);

Просмотрите результаты в окне Profiler.

profile viewer

Сохраните результаты как HTML. По умолчанию profsave сохранил файлы к подпапке profile_results в вашей текущей рабочей папке.

profsave

Создайте файл myFunction.m с помощью этой основной функциональной и локальной функции.

function c = myFunction(a,b)
c = sqrt(square(a)+square(b));
end

function y = square(x)
y = x.^2;
end

Включите Профилировщик и включите опцию истории вызова функции. Профилируйте вызов функции myFunction.

profile on -history
a = rand(5);
b = rand(5);
c = myFunction(a,b);

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

p = profile('info')
p = 

      FunctionTable: [2x1 struct]
    FunctionHistory: [2x6 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

Отобразите историю вызова функции.

p.FunctionHistory
ans =

     0     0     1     0     1     1
     1     2     2     2     2     1

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

numEvents = size(p.FunctionHistory,2);
for n = 1:numEvents
    name = p.FunctionTable(p.FunctionHistory(2,n)).FunctionName;
    
    if p.FunctionHistory(1,n) == 0
        disp(['Entered ' name]);
    else
        disp(['Exited ' name]);
    end
end
Entered myFunction
Entered myFunction>square
Exited myFunction>square
Entered myFunction>square
Exited myFunction>square
Exited myFunction

Установите историю вызова функции на значение по умолчанию.

profile -nohistory

Включите Профилировщик и вызовите функцию magic.

profile on
n = 100;
M = magic(n);

Сохраните результаты в MAT-файл

p = profile('info')
save myprofiledata p
p = 

      FunctionTable: [1x1 struct]
    FunctionHistory: [2x2 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'off'
        HistorySize: 1000000

Входные параметры

свернуть все

Управляйте опциями для Профилировщика, заданного как одна из этих опций.

ОпцияРезультат
on

Запустите Профилировщик, очистив любую ранее записанную статистику профиля.

off

Остановите профилировщик.

resume

Перезапустите Профилировщик, не очищая ранее зарегистрированную статистику.

clear

Очистите записанную статистику.

viewer

Остановите Профилировщик и отобразите результаты в окне Profiler. Для получения дополнительной информации смотрите Профиль, чтобы Улучшать Производительность. Пользовательский интерфейс профилировщика не доступен в MATLAB Online.

info

Остановите Профилировщик и возвратите структуру, содержащую результаты.

status

Возвратите структуру с информацией о статусе Профилировщика.

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

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

Опции истории

ОпцияРезультат
-history

Запишите точную последовательность вызовов функции, включая функциональные события входа и выхода. По умолчанию опция -history не включена.

-historysize integer

Задайте количество функциональных событий входа и выхода, чтобы записать. По умолчанию historysize 1,000,000. Если количество вызовов функции превышает заданный historysize, функция profile продолжает записывать профильную статистику кроме последовательности вызовов.

-nohistory

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

Синхронизация опций

ОпцияРезультат
-timer 'performance'

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

-timer 'processor'

Используйте тактовое стеной время непосредственно от процессора. Иногда ваши настройки сбережений степени или использование нескольких процессоров влияют на это измерение.

-timer 'real'

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

-timer 'cpu'

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

Выходные аргументы

свернуть все

Статистика профилировщика, возвращенная как структура, содержащая эти поля.

Поле

Описание

FunctionTable

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

  • CompleteName – Полный путь к FunctionName.

  • FunctionName Имя функции. Если функция является локальной функцией, FunctionName включает основную функцию.

  • FileName Полный путь к FunctionName, с расширением файла. Если функция является локальной функцией, FileName является полным путем к основной функции.

  • Ввод Тип функции. Например, функция MATLAB, MEX-функция, локальная функция или вложенная функция.

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

  • TotalTime – Общее время проведено в функции и ее дочерних функциях.

  • TotalRecursiveTime – MATLAB больше не использует это поле.

  • Children – Информация о функциях, что функция вызвана. Каждая запись в массиве содержит информацию об одной дочерней функции. Структура содержит эти поля:

    • Index – Индексируйте к дочерней функциональной информационной структуре в FunctionTable.

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

    • TotalTime – Общее время проведено в дочерней функции.

  • Parents – Информация о родительских функциях FunctionName. Каждая структура в массиве содержит информацию об одном из родительских элементов. Структура содержит эти поля:

    • Index – Индексируйте, чтобы породить функциональную информационную структуру в FunctionTable.

    • NumCalls – Число раз родительская функция вызвало эту функцию.

  • ExecutedLines – Массив, содержащий линию за линией, детализирует для профилируемой функции.

    • Столбец 1 – Номер строки для выполняемой строки кода в FileName.

    • Столбец 2 – Число раз профилируемый код выполнило строку кода.

    • Столбец 3 – Общее время проведено на строке кода. Сумма записей Столбца 3 не обязательно составляет в целом TotalTime.

  • IsRecursive – Индикатор того, является ли функция рекурсивной. Если значением является 1 (true), функция является рекурсивной. Если значением является 0 (false), функция нерекурсивна.

  • PartialData – Индикатор того, являются ли статистические данные профиля неполными. Если значением является логический 1 (true), функция была изменена во время профилирования. Например, если вы отредактировали функцию или очистили ее из памяти. В таком случае Профилировщик собирает данные только вплоть до вас, изменил функцию.

FunctionHistory

История вызова функции, возвращенная как массив.

  • Строка 1 – Индикатор функциональной записи или выхода. Профилировщик записывает функциональную запись с 0 и функциональный выход с 1.

  • Строка 2 – Индекс, чтобы функционировать информационная структура в FunctionTable.

ClockPrecision

Точность измерения времени функции profile, возвращенной как double.

ClockSpeed

Предполагаемая тактовая частота ЦП, возвращенная как double.

Name

Имя профилировщика, возвращенного как символьный массив.

Overhead

Зарезервированный для будущего использования.

Состояние Profiler, возвращенное как структура, содержащая эти поля.

Поле

Значения

Значение по умолчанию

ProfilerStatus

'on' или 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

'performance', 'processor', 'cpu' или 'real'

'performance'

HistoryTracking

'on' или 'off'

'off'

HistorySize

целое число

1000000

Ограничения

  • Если профилируемый код использует косвенный (или взаимный) рекурсия, профилировщик MATLAB может возвратить неточные результаты. Если рекурсия является прямой (одна функция, вызывая себя), то Профилировщик возвращает общее время для нерекурсивных вызовов функции. Чтобы определить, является ли функция в профилируемом коде рекурсивной (прямо или косвенно), исследуйте значение поля IsRecursive в записи FunctionTable.

Советы

  • Чтобы открыть пользовательский интерфейс Профилировщика, используйте синтаксис profile viewer или смотрите Профиль, чтобы Улучшать Производительность. Пользовательский интерфейс профилировщика не доступен в MATLAB Online.

  • С MATLAB R2015b таймером по умолчанию является 'performance'. В предыдущих версиях MATLAB таймером профилировщика по умолчанию был 'cpu', какие меры вычисляют время вместо тактового стеной времени.

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте