2.3.2 Профилирование программы linefit1.Pas
Turbo Profiler Version 2.1 Sun Apr 03 14:39:31 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\PAS\LINEFIT1.EXE File D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~
Time Counts
const max = 20;
type ary = array[1..max] of real;
procedure linfit1(x,y: ary; var y_calc: ary; var a,b:real; n:integer);
{ fit a straight line (y_calc) through n sets of x and y pairs of points }
var i : integer;
sum_x,sum_y,sum_xy,sum_x2,
sum_y2,xi,yi,sxy,sxx,
syy: real;
0.0000 80 begin { linfit }
0.0000 80 sum_x:=0.0;
0.0000 80 sum_y:=0.0;
0.0000 80 sum_xy:=0.0;
0.0000 80 sum_x2:=0.0;
0.0000 80 sum_y2:=0.0;
0.0000 80 for i:=1 to n do
begin
0.1118 1600 xi:=x[i];
0.0566 1600 yi:=y[i];
0.0563 1600 sum_x:=sum_x+xi;
0.1115 1600 sum_y:=sum_y+yi;
0.0018 1600 sum_xy:=sum_xy+xi*yi;
0.0019 1600 sum_x2:=sum_x2+xi*xi;
0.1113 1600 sum_y2:=sum_y2+yi*yi;
0.0594 1600 end;
0.0000 80 sxx:=sum_x2-sum_x*sum_x/n;
0.0000 80 sxy:=sum_xy-sum_x*sum_y/n;
0.0000 80 syy:=sum_y2-sum_y*sum_y/n;
0.0000 80 b:=sxy/sxx;
0.0000 80 a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx;
0.0001 80 for i:=1 to n do
0.1114 1600 y_calc[i]:=a+b*x[i]
0.0000 80 end; { LINFIT }
var x,y,y_calc:ary;
i,k:integer;
a,b:real;
0.0014 1 begin
{creating new mass x and y}
0.0000 1 for k:=1 to 80 do
begin
0.0628 80 randomize;
0.0079 80 writeln('Input Data: ');
0.0000 80 for i:=1 to max do
begin
0.1115 1600 x[i] := i*10;
0.0019 1600 y[i] := i*10 + random(20) - 10;
0.4494 1600 writeln('x[',i:2,'] = ',x[i]:3:0,' y[',i:2,'] = ',y[i]:3:0);
0.0565 1600 end;
0.0000 80 linfit1(x,y,y_calc,a,b,max);
0.0085 80 writeln('a: ',a:3:1,' b: ',b:3:1);
0.0000 80 for i:=1 to max do
0.3909 1600 writeln('y_calc: ',y_calc[i]:3:1);
0.0000 80 end;
0.0012 1 end.
Turbo Profiler Version 2.1 Sun Apr 03 14:39:31 2005
Профилирование по времени и частоте
Turbo Profiler Version 2.1 Sun Apr 03 14:39:41 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\PAS\LINEFIT1.EXE
Execution Profile
Total time: 1.7162 sec
% of total: 100%
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
PROGRAM.49 1600 6% |+++++++++++++++
0.4494 sec 26% |******************************************************************
PROGRAM.57 1600 6% |+++++++++++++++
0.3909 sec 22% |*********************************************************
PROGRAM.19 1600 6% |+++++++++++++++
0.1118 sec 6% |****************
PROGRAM.22 1600 6% |+++++++++++++++
0.1115 sec 6% |****************
PROGRAM.47 1600 6% |+++++++++++++++
0.1115 sec 6% |****************
PROGRAM.33 1600 6% |+++++++++++++++
0.1114 sec 6% |****************
PROGRAM.25 1600 6% |+++++++++++++++
0.1113 sec 6% |****************
PROGRAM.43 80 <1% |
0.0628 sec 3% |*********
PROGRAM.26 1600 6% |+++++++++++++++
0.0594 sec 3% |********
PROGRAM.20 1600 6% |+++++++++++++++
0.0566 sec 3% |********
PROGRAM.50 1600 6% |+++++++++++++++
0.0565 sec 3% |********
PROGRAM.21 1600 6% |+++++++++++++++
0.0563 sec 3% |********
PROGRAM.54 80 <1% |
0.0085 sec <1% |*
PROGRAM.44 80 <1% |
0.0079 sec <1% |*
PROGRAM.48 1600 6% |+++++++++++++++
0.0019 sec <1% |
PROGRAM.24 1600 6% |+++++++++++++++
0.0019 sec <1% |
PROGRAM.23 1600 6% |+++++++++++++++
0.0018 sec <1% |
PROGRAM.39 1 <1% |
0.0014 sec <1% |
PROGRAM.59 1 <1% |
0.0012 sec <1% |
PROGRAM.32 80 <1% |
0.0001 sec <1% |
PROGRAM.28 80 <1% |
0.0000 sec <1% |
PROGRAM.30 80 <1% |
0.0000 sec <1% |
PROGRAM.12 80 <1% |
0.0000 sec <1% |
PROGRAM.29 80 <1% |
0.0000 sec <1% |
PROGRAM.52 80 <1% |
0.0000 sec <1% |
PROGRAM.31 80 <1% |
Turbo Profiler Version 2.1 Sun Apr 03 14:39:41 2005
0.0000 sec <1% |
PROGRAM.15 80 <1% |
0.0000 sec <1% |
PROGRAM.16 80 <1% |
0.0000 sec <1% |
PROGRAM.27 80 <1% |
0.0000 sec <1% |
PROGRAM.14 80 <1% |
0.0000 sec <1% |
PROGRAM.17 80 <1% |
0.0000 sec <1% |
PROGRAM.34 80 <1% |
0.0000 sec <1% |
PROGRAM.LINFIT1 80 <1% |
0.0000 sec <1% |
PROGRAM.45 80 <1% |
0.0000 sec <1% |
PROGRAM.56 80 <1% |
0.0000 sec <1% |
PROGRAM.58 80 <1% |
0.0000 sec <1% |
PROGRAM.13 80 <1% |
0.0000 sec <1% |
PROGRAM.41 1 <1% |
0.0000 sec <1% |
Попробуем оптимизировать программу путем уменьшением вывода количества символов на экран во все функциях writeln, удалим вывод входных данных для расчетов на экран и описать тело функции внутри «main».
Оптимизированная программа LINEFIT1.PAS:
Turbo Profiler Version 2.1 Sun Apr 03 14:40:28 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\PAS\LINEFIT0.EXE File D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~
Time Counts
const max = 20;
type ary = array[1..max] of real;
var x,y,y_calc:ary;
i,k:integer;
a,b:real;
sum_x,sum_y,sum_xy,sum_x2,
sum_y2,xi,yi,sxy,sxx,
syy: real;
0.0014 1 begin
{creating new mass x and y}
0.0000 1 for k:=1 to 80 do
begin
0.0093 80 randomize;
0.0630 80 writeln('Input Data: ');
0.0000 80 for i:=1 to max do
begin
0.1118 1600 x[i] := i*10;
0.0026 1600 y[i] := i*10 + random(20) - 10;
0.1112 1600 end;
{ linfit1(x,y,y_calc,a,b,max);}
0.0000 80 sum_x:=0.0;
0.0000 80 sum_y:=0.0;
0.0000 80 sum_xy:=0.0;
0.0000 80 sum_x2:=0.0;
0.0000 80 sum_y2:=0.0;
0.0000 80 for i:=1 to max do
begin
0.0565 1600 xi:=x[i];
0.0189 1600 yi:=y[i];
0.0566 1600 sum_x:=sum_x+xi;
0.0014 1600 sum_y:=sum_y+yi;
0.1120 1600 sum_xy:=sum_xy+xi*yi;
0.2761 1600 sum_x2:=sum_x2+xi*xi;
0.1112 1600 sum_y2:=sum_y2+yi*yi;
0.0016 1600 end;
0.0000 80 sxx:=sum_x2-sum_x*sum_x/max;
0.0000 80 sxy:=sum_xy-sum_x*sum_y/max;
0.0000 80 syy:=sum_y2-sum_y*sum_y/max;
0.0000 80 b:=sxy/sxx;
0.0000 80 a:=((sum_x2*sum_y-sum_x*sum_xy)/max)/sxx;
0.0000 80 for i:=1 to max do
0.0564 1600 y_calc[i]:=a+b*x[i];
0.0087 80 writeln('a: ',a:3:1,' b: ',b:3:1);
0.0000 80 for i:=1 to max do
0.3262 1600 writeln('yn',y_calc[i]:3:1);
0.0000 80 end;
0.0012 1 end.
Профилирование по времени и частоте оптимизированной программы:
Turbo Profiler Version 2.1 Sun Apr 03 14:40:10 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\PAS\LINEFIT0.EXE
Execution Profile
Total time: 1.3279 sec
% of total: 100%
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
PROGRAM.49 1600 7% |+++++++++++++++++++
0.3262 sec 24% |******************************************************************
PROGRAM.36 1600 7% |+++++++++++++++++++
0.2761 sec 20% |*******************************************************
PROGRAM.35 1600 7% |+++++++++++++++++++
0.1120 sec 8% |**********************
PROGRAM.18 1600 7% |+++++++++++++++++++
0.1118 sec 8% |**********************
PROGRAM.37 1600 7% |+++++++++++++++++++
0.1112 sec 8% |**********************
PROGRAM.20 1600 7% |+++++++++++++++++++
0.1112 sec 8% |**********************
PROGRAM.15 80 <1% |
0.0630 sec 4% |************
PROGRAM.33 1600 7% |+++++++++++++++++++
0.0566 sec 4% |***********
PROGRAM.31 1600 7% |+++++++++++++++++++
0.0565 sec 4% |***********
PROGRAM.45 1600 7% |+++++++++++++++++++
0.0564 sec 4% |***********
PROGRAM.32 1600 7% |+++++++++++++++++++
0.0189 sec 1% |***
PROGRAM.14 80 <1% |
0.0093 sec <1% |*
PROGRAM.47 80 <1% |
0.0087 sec <1% |*
PROGRAM.19 1600 7% |+++++++++++++++++++
0.0026 sec <1% |
PROGRAM.38 1600 7% |+++++++++++++++++++
0.0016 sec <1% |
PROGRAM.10 1 <1% |
0.0014 sec <1% |
PROGRAM.34 1600 7% |+++++++++++++++++++
0.0014 sec <1% |
PROGRAM.51 1 <1% |
0.0012 sec <1% |
PROGRAM.28 80 <1% |
0.0000 sec <1% |
PROGRAM.39 80 <1% |
0.0000 sec <1% |
PROGRAM.41 80 <1% |
0.0000 sec <1% |
PROGRAM.43 80 <1% |
0.0000 sec <1% |
PROGRAM.42 80 <1% |
0.0000 sec <1% |
PROGRAM.29 80 <1% |
0.0000 sec <1% |
PROGRAM.16 80 <1% |
0.0000 sec <1% |
PROGRAM.48 80 <1% |
Turbo Profiler Version 2.1 Sun Apr 03 14:40:10 2005
0.0000 sec <1% |
PROGRAM.40 80 <1% |
0.0000 sec <1% |
PROGRAM.25 80 <1% |
0.0000 sec <1% |
PROGRAM.44 80 <1% |
0.0000 sec <1% |
PROGRAM.27 80 <1% |
0.0000 sec <1% |
PROGRAM.26 80 <1% |
0.0000 sec <1% |
PROGRAM.50 80 <1% |
0.0000 sec <1% |
PROGRAM.24 80 <1% |
0.0000 sec <1% |
PROGRAM.12 1 <1% |
0.0000 sec <1% |
Вывод: Оптимизировав программу написанную на языке программирования Паскаль, нам удалось сократить время ее выполнения с 1.7162 секунды до 1.3279 секунды (выигрыш по времени примерно составил 22 %).