Профилирование
m-файлов
Вообще говоря,
достижение работоспособности программы — лишь один из этапов ее отладки. Не
менее важным вопросом является
оптимизация
программы по минимуму времени
исполнения или по минимуму объема кодов. Современные
компьютеры,
в которых используется система MATLAB, имеют достаточные резервы памяти, так
что размеры программы, как правило, не имеют особого значения. Намного важнее
проблема оптимизации программы в части быстродействия.
Оценка времени
исполнения отдельных частей программы называется ее
профилированием.
Для
выполнения такой процедуры служит команда profile [
Средства профилирования
MATLAB позволяют анализировать только m-файлы функций, но не сценариев. Чтобы
получить профиль выполнения сценария, приходится преобразовывать его в функции
(как правило, не имеющую входных и выходных параметров), добавляя соответствующий
заголовок function.
], имеющая ряд опций:
-
profile
fun — запуск профилирования для функции fun;
-
profile
report — вывод отчета о профилировании;
-
profile
plot — графическое представление результатов профилирования в виде диаграммы
Парето;
-
profile
filename — профилирование файла с заданным именем и путем;
-
prof ile
report N — вывод отчета по профилированию заданных N строк;
-
profile
report frac — выводит отчет по профилированию тех строк, относительная доля
выполнения которых в общем времени выполнения составляет не менее чем frac
(от 0.0 до 1.0);
-
profileon
— включение профилирования;
-
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:
'С:\MATLAB\toolboxNmatlab\specfun\el11pj.m'
interval:
0.0100
count:
[98x1 double]
state:
'off '
» profile plot
Нетрудно заметить,
что при профилировании выводятся номера строк программы, у которых время выполнения
превосходит 0.01 с. С использованием этого интервала и оценивается время исполнения
программного кода. Последняя команда выводит графическую диаграмму профилирования,
показанную на рис. 21.1.
Рис.
21.1.
Графическое представление результатов профилирования
При графическом
представлении профилирования по горизонтальной оси указываются номера строк,
а по вертикальной — время их выполнения. Сначала показываются строки с наибольшим
временем выполнения. Таким образом, программист, отлаживающий работу программы,
имеет возможность наглядно оценить, где именно находятся критические по быстродействию
фрагменты.
Содержание раздела