4.2. Профилирование программы «Main_p»
Тело программы разбивается на некие функциональные участки с помощью меток SAMPLE. Профилирование такой программы позволит оценить время, затрачиваемое в программе на выполнение каждой из таких секций. Текст тела программы приведён ниже:
BEGIN
for cycle := 1 to cyc_count do begin
SAMPLE(PName,1);
ClrScr;
SAMPLE(PName,2);
seed:=4.0;
SAMPLE(PName,3);
get_data(x,y,n);
SAMPLE(PName,4);
write_data;
SAMPLE(PName,5);
sumx := 0; sumy := 0; sumxy := 0; sumx2 := 0;
for k:=1 to n do begin
sumx := sumx + x[k];
sumy := sumy + y[k];
sumxy := sumxy + x[k] * y[k];
sumx2 := sumx2 + x[k] * x[k];
end;
resa := (sumxy - sumx*sumy/n) / (sumx2 - sumx*sumx/n);
resb := (sumy - resa * sumx) / n;
SAMPLE(PName,6);
writeln('Approximated with y=ax+b where a = ',resa,', b=',resb);
SAMPLE(PName,7);
end;
END.
Результаты профилирования такой программы приведены ниже:
----------------------------------------------------------------------
Область программы Общее время Кол-во прох. Ср. время
----------------------------------------------------------------------
Вызов функции очистки экрана 206.19 20 10.31
----------------------------------------------------------------------
Подготовка к генерации данных 2.15 20 0.11
----------------------------------------------------------------------
Генерация данных 1554.47 20 77.72
----------------------------------------------------------------------
Вывод данных на экран 9328.03 20 466.40
----------------------------------------------------------------------
Расчёт результатов 271.66 20 13.58
----------------------------------------------------------------------
Вывод результатов на экран 331.51 20 16.58
----------------------------------------------------------------------
К данной программе применяется оптимизация, описанная в п. 4.1. Результаты оптимизации приведены в п. 3 настоящего отчёта. Исключение некоторых секций программы позволило сократить время выполнения программы с 6652.48 до 2123.90 микросекунд.
Выводы
Основным результатом работы стало профилирование и оптимизация программ лабораторной работы №1. Применение программы «Sampler» позволило сделать следующие выводы:
операции вывода на экран в Паскале реализованы эффективнее, нежели объектно-ориентированный вывод через потоки Си++;
расчётные операции реализованы в Си++ несколько эффективнее, нежели чем в Паскале;
программы на Си++ поддаются оптимизации охотнее, чем программы на Паскале, поскольку выводом на экран можно иногда пренебречь, а вычислительными операциями – нет.
высокая точность измерений, связанная с низким процентом накладных расходов на проведение замеров времени.