Матричная лаборатория MatLab

         

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



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



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