Иллюстрированный самоучитель по MatLab

Профилирование m-файлов

Вообще говоря, достижение работоспособности программы – лишь один из этапов ее отладки. Не менее важным вопросом является оптимизация программы по минимуму времени исполнения или по минимуму объема кодов. Современные компьютеры, в которых используется система MATLAB, имеют достаточные резервы памяти, так что размеры программы, как правило, не имеют особого значения. Намного важнее проблема оптимизации программы в части быстродействия.

Оценка времени исполнения отдельных частей программы называется ее профилированием. Для выполнения такой процедуры служит команда profile [Средства профилирования MATLAB позволяют анализировать только m-файлы функций, но не сценариев. Чтобы получить профиль выполнения сценария, приходится преобразовывать его в функции (как правило, не имеющую входных и выходных параметров), добавляя соответствующий заголовок function.], имеющая ряд опций:

  • profile fun – запуск профилирования для функции fun;
  • profile report – вывод отчета о профилировании;
  • profile plot – графическое представление результатов профилирования в виде диаграммы Парето;
  • profile filename – профилирование файла с заданным именем и путем;
  • profile report N – вывод отчета по профилированию заданных N строк;
  • profile report frac – выводит отчет по профилированию тех строк, относительная доля выполнения которых в общем времени выполнения составляет не менее чем frac (от 0.0 до 1.0);
  • profile on – включение профилирования;
  • profile off – выключение профилирования;
  • profile reset – выключение профилирования с уничтожением всех накопленных данных;
  • INFO = profile – возвращает структуру со следующими полями:
    • file – полный путь к профилируемому файлу;
    • interval – интервалы времени в секундах;
    • count – вектор измерений;
    • state – состояние профилировщика: 'on' (включен) или 'off' (выключен).

Ниже приводится пример на профилирование m-файла ellipj (эллиптическая функция Якоби):

>> profile on
>> profile ellipj
>> ellipj([0:0.01:1].0.5);.
>> profile report
Total time in "C:\MATLAB\toolbox\matlab\specfun\ellipj.m": 0.16 seconds
100% of the total time was spent on lines:
[96 97 86]
85: if - isempty(in)
0.01s. 6% 86: phin(i.in) = 0.5 *...
87:(asin(c(i+l.in).*sin(rem(phin(i+l.in).2*pi))./a(i+l,in))
95: ml = find(m==l):
0.11s. 69% 96: sn(ml) = tanh(u(ml)): 0.04s. 25*97:
cn(ml) = sech(u(ml));
98: dn(ml) = sech(udnl)):
>> INFO=profile INFO=file:
'C:\MATLAB\toolboxNmatlab\specfun\el11pj.m'
interval: 0.0100
count: [98x1 double]
state: 'off'
>> profile plot

Нетрудно заметить, что при профилировании выводятся номера строк программы, у которых время выполнения превосходит 0.01 с. С использованием этого интервала и оценивается время исполнения программного кода. Последняя команда выводит графическую диаграмму профилирования, показанную на рис. 21.1.

Иллюстрированный самоучитель по MatLab › Отладка программ › Профилирование m-файлов
Рис. 21.1. Графическое представление результатов профилирования

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.