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 не поддерживается в Online™ MATLAB.

info

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

status

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

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

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

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

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

Запись базовой статистики профилирования.

-history

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

-timestamp

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

-гисторизм 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 (false), функция нерекурсивна.

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

FunctionHistory

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

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

  • Строка 2 - Индекс для функционирования информационной структуры в FunctionTable.

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

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

ClockPrecision

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

ClockSpeed

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

Name

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

Overhead

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

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

Область

Значения

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

ProfilerStatus

'on', 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

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

'performance'

HistoryTracking

'on', 'off', или 'timestamp'

'timestamp'

HistorySize

целое число

5000000

Ограничения

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

Совет

  • Чтобы открыть пользовательский интерфейс Profiler, используйте profile viewer синтаксис или см. Профиль вашего кода для повышения эффективности. Пользовательский интерфейс Profiler не поддерживается в MATLAB Online.

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

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