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

         

Профилирование 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.

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




Рис. 21.1.



Графическое представление результатов профилирования

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


Содержание раздела