Скачиваний:
18
Добавлен:
01.05.2014
Размер:
83.46 Кб
Скачать

Профилирование полного времени выполнения программ «labpas» и «labc»

В ходе выполнения лабораторной работы №1 на языках Паскаль и Си++ была разработана программа, выполняющая интерполяцию данных по методу наименьших квадратов. В ходе выполнения лабораторной работы №2 были проведены некоторые улучшения этой программы и увеличено её быстродействие. Таким образом, в нашем распоряжении имеются две версии программы для каждого языка программирования: исходная и оптимизированная. Оценим общее время выполнения каждой из программ с помощью профилировщика «Sampler».

Для достижения поставленной цели необходимо внести изменения в программы. Для программ на языке Паскаль необходимо добавить модуль «Sampler» в раздел «uses» основной программы и разместить меткиSAMPLE(‘Main.pas’,N) после оператораBEGIN, открывающего тело программы и перед операторомEND, закрывающем его. Для программ на языке Си++ необходимо добавить директиву «#include“Sampler.h”» в начало файла и разместить меткиSAMPLEпосле открывающей и перед закрывающей фигурными скобками функцииMain.

Результаты профилирования всех версий программ приведены ниже:

----------------------------------------------------------------------

Метки Общее время Кол-во прох. Ср. время

----------------------------------------------------------------------

Результат программы на языке Си++ (исходная версия):

----------------------------------------------------------------------

1 : 49 1 : 80 45684.64 1 45684.64

----------------------------------------------------------------------

Результат программы на языке Си++ (оптимизированная версия):

----------------------------------------------------------------------

1 : 49 1 : 80 462.63 1 462.63

----------------------------------------------------------------------

Результат программы на языке Паскаль (исходная версия):

----------------------------------------------------------------------

1 : 10 1 : 20 6652.48 1 6652.48

----------------------------------------------------------------------

Результат программы на языке Паскаль (оптимизированная версия):

----------------------------------------------------------------------

1 : 10 1 : 20 2123.90 1 2123.90

----------------------------------------------------------------------

Полученные результаты существенно отличаются от результатов, полученных с помощью программы «TurboProfiler», в меньшую сторону. Это объясняется тем, что в программе «SAMPLER» расход времени на служебные операции, связанные с замером времени, существенно меньше, чем в программе «TurboProfiler». Таким образом, оценки времени, полученные в ходе этой лабораторной работы, являются более точными.

Детальное профилирование программ «Main_p» и «Main_c»

Профилирование программы на C++

(измерение времен выполнения функциональных участков)

Тело функции «Main» разбивается на некие функциональные участки с помощью метокSAMPLE. Профилирование такой программы позволит оценить время, затрачиваемое в программе на выполнение каждой из таких секций. Текст функцииmainприведён ниже:

voidmain() {

floatx[max];

float y[max];

int n;

float sumx,sumy;

float sumxy, sumx2;

int k;

float resa,resb;

int cycle;

for(cycle = 0; cycle < cyc_count; cycle++) {

SAMPLE;

clrscr();

SAMPLE;

seed = 4.0;

SAMPLE;

get_data(x,y,n);

SAMPLE;

write_data(x,y,n);

SAMPLE;

sumx = 0; sumy = 0; sumxy = 0; sumx2 = 0;

for (k=1; k<=n; k++) {

sumx += x[k];

sumy += y[k];

sumxy += x[k] * y[k];

sumx2 += x[k] * x[k];

}

resa = (sumxy - sumx*sumy/n) / (sumx2 - sumx*sumx/n);

resb = (sumy - resa * sumx) / n;

SAMPLE;

cout << "Approximated with y=ax+b where a = " << resa << ", b=" << resb;

SAMPLE;

}

}

Результаты профилирования такой программы приведены ниже:

----------------------------------------------------------------------

Область программы Общее время Кол-во прох. Ср. время

----------------------------------------------------------------------

Вызов функции очистки экрана 181.87 20 9.09

----------------------------------------------------------------------

Подготовка к генерации данных 8.38 20 0.42

----------------------------------------------------------------------

Генерация данных 205.33 20 10.27

----------------------------------------------------------------------

Вывод данных на экран 114281.16 20 5714.06

----------------------------------------------------------------------

Расчёт результата 28.50 20 1.42

----------------------------------------------------------------------

Вывод результата на экран 687.24 20 34.36

----------------------------------------------------------------------

После профилирования к программе применяются следующие модификации:

  • исключается вызов функции очистки экрана;

  • исключается вывод данных на экран

  • сокращается текст при выводе результата;

Итоги оптимизации приведены в п. 3 настоящего отчёта. Исключение некоторых секций программы позволило сократить время выполнения программы с 45684.64 до 462.63 микросекунд.

Соседние файлы в папке Лабораторная работа №31