profile

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

Описание

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

пример

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') возвращает структуру с информацией о статусе Профилировщика.

Примеры

свернуть все

s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'timestamp'
        HistorySize: 5000000

Включите Профилировщик и вызовите 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 -timestamp

Включите Профилировщик и вызовите 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

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

свернуть все

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

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

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

off

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

resume

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

clear

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

viewer

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

info

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

status

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

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

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

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

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

Запишите базовую профильную статистику.

-history

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

-timestamp

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

- historysize integer

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

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

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

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

-timer 'processor'

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

-timer 'real'

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

-timer 'cpu'

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

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

свернуть все

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

Поле

Описание

FunctionTable

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

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

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

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

  • Type – Тип функции. Например, функция 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 ложь), функция нерекурсивна.

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

FunctionHistory

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

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

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

  • Строка 3 – фрагмент Секунд функциональной записи или выхода устанавливает метку времени в виде времени, которое протекло со времени Эпохи операционной системы. Эта строка только возвращена если -timestamp опция истории задана.

  • Строка 4 – фрагмент Микросекунд функциональной записи или выхода устанавливает метку времени в виде времени, которое протекло со времени Эпохи операционной системы. Эта строка только возвращена если -timestamp опция истории задана.

ClockPrecision

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

ClockSpeed

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

Name

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

Overhead

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

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

Поле

Значения

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

ProfilerStatus

'on'off

'off'

DetailLevel

'mmex'

'mmex'

Timer

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

'performance'

HistoryTracking

'on'off, или 'timestamp'

'timestamp'

HistorySize

целое число

5000000

Ограничения

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

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

  • Профилировщик не поддерживается при оценке секций кода.

Советы

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

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

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