Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 81
Текст из файла (страница 81)
Окно редактора-отладчика мешт (2 файла) Рис. 16.2. Командное окна На рис. 16.1 дано окно редактора тпеИ2 с ю-функцией 1огл и файлом сценария ).ог гоп.в, содержащим команды ввода параметров и обращение к функции 1аг. Окно с файлом 1оглп находится слева, в нем точка останова помечена кружком. Эта точка пройдена, на что указывает стрелка «вниз» иа строке файла 1ог.а, но режим отладки пока не переместился в файл ).ог гипдп, так как выделена заклалка с име- зффеитивность программ и профилер п»файлов 431 нем файла (от. гп в строке состояния (нижняя часть окна п)ей(г) и в окне 51асК стоит имя 1ог. Обратим также внимание на прямоугольник с содержимым переменной у (вектора-столбца) в подокне с текстом файла Еог гоп.)п. В процессе отладки можно узнать компоненты любой матричной переменной, наведя мышь на идентификатор этой переменной в окне редактора глейй.
На рис. 16 2 приведено окно МАТ1 АВ, содержащее вызов файла сценария Еог гоп,п), результат задания переменной 5(дп)а и вывод отладочных значений переменных Ь и г. В режиме отладки приглашение командной строки имеет вид Х» и содержимое любой переменной может быть выведено простым указанием нужного имени и нажатием клавиши Ептег. На рис. 1б 2 было выведено значение переменной 5(дп)а, так как вывод на экран не был подавлен в тексте файла Еог гипзв (операция присваивания закончилась запятой). Эффективность программ и профилер т-файлов При разработке достаточно больших программ, состоящих нз нескольких функций, возникает необходимость оптимизации кода. Для этого важно знать, выполнение каких функций, а также каких их участков требует наибольших затрат времени. Здесь могут быть использованы счетчик числа операций, команды, оперирующие со временем, и, наконец, профилер и)-файлов.
Простейший способ оценить объем вычислений предоставляет команда 71срз, обращение к которой без параметров выводит число выполненных операций, а вызов т)орз(0) обнуляет счетчик числа операций. Это довольно грубый способ оценки быстродействия, что показывает следующий пример: » Г1ора(0), Гог К=):7"7, »7п(К); епл. Г)ора апа- 823545 Тот же результат будет получен, если вычисление синуса заменить сложением це- лых чисел: » Г1ора(0), Гог К-1 7 7. К+1: епл, Г)ора апа- 823545 Имеющиеся в МАТ(.АВ команды работы со временем и датами позволяют оценить время расчета отдельных фрагментов кода.
Команда г(с обнуляет время, а гос замеряет прошедшее с момента выполнения г(с время. Применим эти команды для оценки времени выполнения двух циклов, различающихся тем, что в теле первого вычисляется синус переменной цикла, тогда как второй цикл просто прибавляет единицу к переменной цикла: » Ыс, Гог К 1:7"7, а(п(К);епс, тос е1араес Ыие- 8.57ООе+000 » Юс. Гог К-)о 7 7, К+1:ЕПО, тос аа32 Глава 16. Программирование в ИАГ[лВ е1арпео 1]ве- 8.1300е«000 Команда срнгтпе подсчитывает процессорное время с момента запуска сеанса.
Кроме того, имеются команды 01осс, е[1ае, 00[е для получения соответственно вектора- строки с данными (год, месяц, день, час, минуты, секунды), определения длительности временного промежутка между двумя моментами времени и вывода символьной строки (день-месяц — год). Чтобы повысить зффективность вычислений, нужно знать, какие операции какое время расходуют. Для етого в МАТ[.АВ имеется программа профилер. По умолчанию профилер собирает информацию по в- и вех-файлам, а также подфункциям. Рассмотрим работу профилера на примере анализа времени решения системы Лоренца, см.
главу 15 «Численный анализ в МАТ1.АВ». Запустим профилер с параметром -де[011 0011110, чтобы собирать статистику также по встроенным (0011010) функциям: » рготт1е оп -бегат! Ьот1мп -Птттогт Затем выполним пт-файл: » [Т.'т]"опе45[ "1ог". (О 5], [О 1 1]. [].10.25,8/31; Сгенерируем отчет: » ргоГ11е герогт Рис. 16.3. Начало отчета профилера Эффективность программ и профилер м-файлов е33 При этом в окне Интернет-браузера появится НТМЕ-файл с отчетом, см. рис. 16.3. На рис. 16.3 приведено гипертекстовое окно с результатами работы профилера.
Пользуясь гиперссылками, можно выяснить подробности проведенного анализа (число обращений к функциям, потраченное время и т. д.). Например, можно получить данные о затраченном времени, числе обращений, среднем времени на обращение и другую информацию для функции 1ог, см, рис.16,4. Вновь запустим профилер без очистки полученной статистики: » рготт1е гевоме Профилер готов продолжать собирать данные по другим функциям. Новые данные будут добавлены к полученным ранее.
Сбор статистики завершается, и работа профилера прекращается по команде » ргот11е отт Распечатать результат можно, отправив на печать файл из браузера или выполнив команду » рготт1е герогт ИАМЕ Здесь нйИŠ— имя НТМт.-файла, в котором будет сохранена статистика, собранная профилером. В версии МАТЮКАВ 6 команды профилера остались такими же, как в версии 5.3. Рис. 1б.б. Фрегиент отчета профилере 434 Глава 16. Программирование в ИАТСАВ 'азработка тех-файлов Для ускорения вычислений в МАТЕАВ можно использовать шех-файлы — написанные на С или Фортране и откомпилированные процедуры.
Тексты на языке МАТЕАВ (файлы с расширением гп) машинно-независимы, а подготовленные для одной платформы 1пех-файлы (Мат]а]э ЕХгегпа1) должны быть откомпилированы заново при переходе к другой среде. Для каждой из платформ подготовленные п]ехфайлы имеют свое расширение, например: б!! для%г!пг]ов з, п1ех]х для Е!ппх, п]ехво! для Яо!аг!з, ]леха!р для А!рЬа. Вызываются п1ех-файлы как обычные п1-файлы, причем если интерпретатору встретилось некоторое имя функции, то вначале ищется шех-файл с этим именем в каталогах, определенных списком МАТсАВ веагсп раг]1, и только при его отсутствии начинается поиск щ-файла.
Программирование п1ех-файлов заключается в написании процедур на С или Фортране и подготовке переходного блока для получения данных из среды МАТ!.АВ и возвращения результата. МАТЕАВ оперирует с массивами, поэтому все переменные — скаляры, векторы, матрицы, строки, массивы ячеек, структуры и объекты — реализованы в виде массивов. В программе на С массив МАТ!.АВ должен быть объявлен типом п1хАггау, в нем будут содержаться размерности, сами данные, сведения об их типе (вещественные или комплексные), индексы ненулевых элементов для разреженных (Враг 5е) матриц, число полей и их имена для структуры и объекта.
Заметим, что из п1-файла при помощи имеющегося в МАТ].АВ компилятора 1сс можно приготовить текст на языке С, что обсуждается в следующем разделе. При подготовке гпех-файлов следует определить используемый компилятор, для чего надо выполнить команду » пех -ветер Если на машине установлено несколько компиляторов, то МАТЕАВ предложит выбрать, какой из них будет использоваться далее для компиляции. Например, если на машине установлен только компилятор Вог! апб С/С++, то будет предложен следующий выбор: 5е1есв а соерв1ег: Г1] Вог!апе С/С»» еегв!оп 5.02 вп С:1ВСВ (2] Ссс С еегв1оп 2.4 1п С:!МАТ]АВВ121еуе11сс ГО] ноле Соар11ег: Здесь ]сс — собственный компилятор МАТ1.АВ.
Для компиляции текстов на Фортране также следует определить соответствующий компилятор. В комплекте поставки МАТЕАВ имеются примеры оформления п1ех-файлов. Так, в подкаталоге ~ехтегп~ехагпр!ев~п1ех находятся файлы на С (урпп1е.с) и Фортране (урпгпейб ург!п1е(д.0. Чтобы запустить компиляцию примера на С, надо перейти в подкаталог с примером и вызвать команду мех. Например, чтобы откомпилировать функцию ург1вы.с, выполним следующие команды: Разработка птех-файлов 435 сод [ад(1авгоот "ЧехтегФехвар1ез)аех"]) аех ургтае.с Взаимодействие интерпретатора с гпех-файлом осуществляется следующим обра- зом. Пусть тыпс — а-функция, которая должна быть реализована в виде гпе-ффайл. Обращение [С,О]-(опс(А.В) 1и: п1ьз, ахА"гву *"1ЬвП .
,ПС ПГПВ, СОПЗ( аХАГ«ау *ртпз П Переменные 01ПВ и ргпз есть векторы, содержащие указатели на выходные и вход- ные параметры. Чтобы воспринять входные данные, следует обратиться к функ- ции ахмет и использовать указатели рсва[0], ргпз[П и т. д. В случае скалярной переменной можно работать непосредственно с ее значением, получить которое позволяет функция ахйесьса1аг.
Для оформления возвращаемых параметров нуж- но использовать функцию ахСгеасе. Для компиляции гпех-функции с//сдует запустить команду аех. При обнаружении компилятором ошибки будет выведено диагностическое сообщение н указан но- мер ошибочной строки. В случае нормального завершения компиляции появится файл с именем исходного файла и расширением Й[. Приведем пример создания )пех-файла.
Перепишем функцию вычисления правой части системы Лоренца,на языке С. Поскольку система автономна, то опустим пе- ременную С и служебную строковую переменную т1ад. Подготовленный файл [оге.с имеет вид: Ф)пс!обе "аех.л" /* 1оге - г)длс Ьапб втбе о( Еогепт еповт1оп */ тото 1оге(бооЫе тП, боиЫе уП. боиЫе з1даа, боыЫе г, боыЫе Ы т[0]- втдва*(у[П-у[0]), ([)]- -у[Ц (г-у[2])«у[0]; т[2]" -Ь«у[2]«у[0]«у[)]; то)б аехеыпс(1оп( 1пс п)пз. ахАггау «р)ьзП .