exponenta event banner

профиль

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

Описание

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

пример

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

пример

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

пример

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

Включите Profiler и включите опцию истории вызовов функции. Профилировать вызов 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

Запустите Profiler, очистив все ранее записанные статистические данные профиля.

off

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

resume

Перезапустите профилировщик без очистки ранее записанных статистических данных.

clear

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

viewer

Остановите приложение Profiler и просмотрите результаты в окне Profiler. Дополнительные сведения см. в разделе Профилирование кода для повышения производительности. Интерфейс пользователя Profiler не поддерживается в MATLAB Online™.

info

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

status

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

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

При изменении параметров профилировщика эти параметры сохраняются при остановке профилировщика или сбросе статистики. Чтобы вернуться к поведению профилировщика по умолчанию, вручную задайте значения параметров по умолчанию или запустите новую сессию 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 - Информационная структура index to child function в пределах FunctionTable.

    • NumCalls - количество раз профилированного кода, называемого дочерней функцией.

    • TotalTime - общее время, затраченное на дочернюю функцию.

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

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

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

  • ExecutedLines - Массив, содержащий пошаговые сведения для профилированной функции.

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

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

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

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

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

FunctionHistory

Журнал вызовов функции, возвращаемый в виде массива.

  • Строка 1 - индикатор ввода или выхода функции. Запись функции Profiler записывает с помощью 0и выход из функции с помощью 1.

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

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

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

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 может вернуть неточные результаты. Если рекурсия является прямой (единственная функция, вызывающая себя), то Profiler возвращает общее время для нерекурсивных вызовов функции. Чтобы определить, является ли функция в профилированном коде рекурсивной (прямо или косвенно), проверьте значение IsRecursive в поле FunctionTable вход.

Совет

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

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

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