Вообще говоря, достижение работоспособности программы — лишь один из этапов ее отладки. Не менее важным вопросом является оптимизация программы по минимуму времени исполнения или по минимуму объема кодов. Современные компьютеры, в которых используется система 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 — возвращает структуру со следующими полями:
o file — полный путь к профилируемому файлу;
o interval — интервалы времени в секундах;
o count — вектор измерений;
o state — состояние профилировщика: 'on' (включен) или 'off (выключен).
Ниже приводится пример на профилирование m-файла ellipj (эллиптическая функция Якоби):
Нетрудно заметить, что при профилировании выводятся номера строк программы, у которых время выполнения превосходит 0.01 с. С использованием этого интервала и оценивается время исполнения программного кода. Последняя команда выводит графическую диаграмму профилирования, показанную на рис. 21.1.
Рис. 21.1.Графическое представление результатов профилирования
При графическом представлении профилирования по горизонтальной оси указываются номера строк, а по вертикальной — время их выполнения. Сначала показываются строки с наибольшим временем выполнения. Таким образом, программист, отлаживающий работу программы, имеет возможность наглядно оценить, где именно находятся критические по быстродействию фрагменты.
Создание итогового отчета
Для создания суммарного отчета о профилировании служит команда profsum, которая используется в нескольких формах:
· profsumm — вывод полного отчета о результатах профилирования т-файла. Выводятся данные о времени выполнения для строк, суммарное время выполнения которых составляет 95% от общего времени (если таких строк много, выводятся данные о 10 строках, выполнение которых заняло наибольшее время);
· profsumm(FRACTION) — выводит часть отчета для строк, относительное время выполнения которых составляет FRACTION (от 0.0 до 1.0) от общего времени выполнения файла;
· profsurmi(N) — выводится отчет по N строкам с максимальным временем выполнения;
· profsumm(STR) — выводит отчет только по тем строкам, в которых встречается строковое выражение STR;
Команда profile plot использует для построения графическую команду pareto. Диаграмма Парето представляет собой столбцы, расположенные в порядке убывания отображаемых значений. С другими возможностями команды pareto можно ознакомиться, выполнив команду help pareto.
· pareto(Y,NAMES) — строит диаграмму Парето с пометкой столбцов значений вектора Y соответствующими именами, содержащимися в векторе NAMES;
· pareto(Y.X) — строит диаграмму Парето для значений вектора Y в зависимости от значений вектора X;
· pareti(Y) — строит диаграмму Парето для значений вектора Y в зависимости от индексов его элементов;
· [H,AX]=pareto(...) — возвращает вектор дескрипторов графических объектов диаграммы Н и их осей АХ.
Пример построения диаграммы Парето был рассмотрен выше (см. рис. 21.1).
Работа с системой контроля версий
MATLAB поддерживает системы контроля версий кода Visual Source Safe фирмы Microsoft (поступает вместе с Visual Studio), PVCS фирмы Merant (упрощенные версии этой системы бесплатно поступают с продуктами Borland), Clear Case фирмы Rational Software (в особенности на UNIX-Linux версиях MATLAB), RCS и имеет настраиваемый пользовательский интерфейс, так что вместо вышеперечисленных вы можете подключить свою любимую систему. Функция cmopts выводит информацию об установленной системе контроля версий. Свежеустановленная система MATLAB реагирует следующим образом:
» cmopts
ans =
none
Для подключения PVCS или ее варианта вам нужно отредактировать m-файл cmopts.m в папке C:\matlabrl2\toolbox\local Введите комментарий Ubegin customization section и введите на следующей строчке m-файла, если файл конфигурации проекта Proj.cfg:
DefaultConfigFile=
'с:\\pvcs\pvcsproj\projmgrprj\\Proj.cfg'.
Проверим правильность нашей установки:
»cmopts( 'DefaultConflgFile')
DefaultConfigFile =
с:\\pvcs\pvcsproj\projmgrprj\\Proj.cfg
· Командаcheckin(f11ename. 'COMMENTS', Текст комментариев, OPTION1, VALUE1.0PTION2, VALUE2.......) включает ваши файлы в систему контроля версий. Filename — полный путь к файлу или строковый массив ячеек, где каждая ячейка указывает путь к файлам, Текст комментариев — массив символов, в данной версии option может быть только lock, value может быть on (замкнута) или off (позволяет доступ к файлу без checkout).
· Команда checkout(filename, OPTION1, VALUE1.0PTION2. VALUE2.......) извлекает файлы из системы контроля версий. OPTION могут быть lock — аналогично checkin — и ревизия, т. е. указание конкретной версии файла. Команда undocheckout (Filename) — отменяет действие checkout, например замыкание файлов.