2.3.2 Профилирование программы pas1.Pas
Turbo Profiler Version 2.1 Wed Mar 28 23:33:48 2007
Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\PAS\PAS1.EXE
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);
var i : integer;
sum_x,sum_y,sum_xy,sum_x2,
sum_y2,xi,yi,sxy,sxx,
syy: real;
0.0001 100 begin { linfit }
0.0001 100 sum_x:=0.0;
0.0001 100 sum_y:=0.0;
0.0001 100 sum_xy:=0.0;
0.0001 100 sum_x2:=0.0;
0.0001 100 sum_y2:=0.0;
0.0001 100 for i:=1 to n do
begin
0.1118 10000 xi:=x[i];
0.0566 10000 yi:=y[i];
0.0563 10000 sum_x:=sum_x+xi;
0.1115 10000 sum_y:=sum_y+yi;
0.0018 10000 sum_xy:=sum_xy+xi*yi;
0.0019 10000 sum_x2:=sum_x2+xi*xi;
0.1113 10000 sum_y2:=sum_y2+yi*yi;
0.0594 10000 end;
0.0001 100 sxx:=sum_x2-sum_x*sum_x/n;
0.0001 100 sxy:=sum_xy-sum_x*sum_y/n;
0.0001 100 syy:=sum_y2-sum_y*sum_y/n;
0.0001 100 b:=sxy/sxx;
0.0001 100 a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx;
0.0001 100 for i:=1 to n do
0.1114 10000 y_calc[i]:=a+b*x[i]
0.0001 100 end; { LINFIT }
var x,y,y_calc:ary;
i,k:integer;
a,b:real;
0.0014 1 begin
0.0000 1 for k:=1 to 100 do
begin
0.0628 100 randomize;
0.0001 100 for i:=1 to max do
begin
0.1115 10000 x[i] := i*10;
0.0019 10000 y[i] := i*10 + random(20) - 10;
0.0565 10000 end;
0.0001 100 linfit1(x,y,y_calc,a,b,max);
0.0001 100 end;
0.0012 1 end.
Turbo Profiler Version 2.1 Wed Mar 28 23:33:48 2007
Профилирование по времени и частоте
Turbo Profiler Version 2.1 Wed Mar 28 23:33:58 2007
Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\PAS\PAS1.EXE
Execution Profile
Total time: 0.7162 sec
% of total: 100%
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
PROGRAM.19 10000 6% │+++++++++++++++
0.1118 sec 16% │****************
PROGRAM.22 10000 6% │+++++++++++++++
0.1115 sec 16% │****************
PROGRAM.47 10000 6% │+++++++++++++++
0.1115 sec 16% │****************
PROGRAM.33 10000 6% │+++++++++++++++
0.1114 sec 16% │****************
PROGRAM.25 10000 6% │+++++++++++++++
0.1113 sec 16% │****************
PROGRAM.43 100 <1% │
0.0628 sec 8% │*********
PROGRAM.26 10000 6% │+++++++++++++++
0.0594 sec 8% │********
PROGRAM.20 10000 6% │+++++++++++++++
0.0566 sec 8% │********
PROGRAM.50 10000 6% │+++++++++++++++
0.0565 sec 8% │********
PROGRAM.21 10000 6% │+++++++++++++++
0.0563 sec 8% │********
PROGRAM.54 100 <1% │
0.0085 sec <1% │*
PROGRAM.44 100 <1% │
0.0079 sec <1% │*
PROGRAM.48 10000 6% │+++++++++++++++
0.0019 sec <1% │
PROGRAM.24 10000 6% │+++++++++++++++
0.0019 sec <1% │
PROGRAM.23 10000 6% │+++++++++++++++
0.0018 sec <1% │
PROGRAM.39 1 <1% │
0.0014 sec <1% │
PROGRAM.59 1 <1% │
0.0012 sec <1% │
PROGRAM.32 100 <1% │
0.0001 sec <1% │
PROGRAM.28 100 <1% │
0.0001 sec <1% │
PROGRAM.30 100 <1% │
0.0001 sec <1% │
PROGRAM.12 100 <1% │
0.0001 sec <1% │
PROGRAM.29 100 <1% │
0.0001 sec <1% │
PROGRAM.52 100 <1% │
0.0001 sec <1% │
PROGRAM.31 100 <1% │
Turbo Profiler Version 2.1 Wed Mar 28 23:33:58 2007
0.0001 sec <1% │
PROGRAM.15 100 <1% │
0.0001 sec <1% │
PROGRAM.16 100 <1% │
0.0001 sec <1% │
PROGRAM.27 100 <1% │
0.0001 sec <1% │
PROGRAM.14 100 <1% │
0.0001 sec <1% │
PROGRAM.17 100 <1% │
0.0001 sec <1% │
PROGRAM.34 100 <1% │
0.0001 sec <1% │
PROGRAM.LINFIT1 100 <1% │
0.0001 sec <1% │
PROGRAM.45 100 <1% │
0.0001 sec <1% │
PROGRAM.56 100 <1% │
0.0001 sec <1% │
PROGRAM.58 100 <1% │
0.0001 sec <1% │
PROGRAM.13 100 <1% │
0.0001 sec <1% │
PROGRAM.41 1 <1% │
0.0000 sec <1% │
Попробуем оптимизировать программу путем описания тела функции внутри «main».
Оптимизированная программа PAS2.PAS:
Turbo Profiler Version 2.1 Wed Mar 28 23:42:45 2007
Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\PAS\PAS2.EXE
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
0.0000 1 for k:=1 to 100 do
begin
0.0093 100 randomize;
0.0001 100 for i:=1 to max do
begin
0.1118 10000 x[i] := i*10;
0.0026 10000 y[i] := i*10 + random(20) - 10;
0.1112 10000 end;
{ linfit1(x,y,y_calc,a,b,max);}
0.0001 100 sum_x:=0.0;
0.0001 100 sum_y:=0.0;
0.0001 100 sum_xy:=0.0;
0.0001 100 sum_x2:=0.0;
0.0001 100 sum_y2:=0.0;
0.0001 100 for i:=1 to max do
begin
0.0565 10000 xi:=x[i];
0.0189 10000 yi:=y[i];
0.0566 10000 sum_x:=sum_x+xi;
0.0014 10000 sum_y:=sum_y+yi;
0.1120 10000 sum_xy:=sum_xy+xi*yi;
0.2761 10000 sum_x2:=sum_x2+xi*xi;
0.1112 10000 sum_y2:=sum_y2+yi*yi;
0.0016 10000 end;
0.0001 100 sxx:=sum_x2-sum_x*sum_x/max;
0.0001 100 sxy:=sum_xy-sum_x*sum_y/max;
0.0001 100 syy:=sum_y2-sum_y*sum_y/max;
0.0001 100 b:=sxy/sxx;
0.0001 100 a:=((sum_x2*sum_y-sum_x*sum_xy)/max)/sxx;
0.0001 100 for i:=1 to max do
0.0564 10000 y_calc[i]:=a+b*x[i];
0.0001 100 end;
0.0012 1 end.
Профилирование по времени и частоте оптимизированной программы:
Turbo Profiler Version 2.1 Wed Mar 28 23:42:27 2007
Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\PAS\PAS2.EXE
Execution Profile
Total time: 0.3279 sec
% of total: 100%
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
PROGRAM.35 10000 7% │+++++++++++++++++++
0.1120 sec 18% │**********************
PROGRAM.18 10000 7% │+++++++++++++++++++
0.1118 sec 18% │**********************
PROGRAM.37 10000 7% │+++++++++++++++++++
0.1112 sec 18% │**********************
PROGRAM.20 10000 7% │+++++++++++++++++++
0.1112 sec 18% │**********************
PROGRAM.15 100 <1% │
0.0630 sec 9% │************
PROGRAM.33 10000 7% │+++++++++++++++++++
0.0566 sec 9% │***********
PROGRAM.31 10000 7% │+++++++++++++++++++
0.0565 sec 9% │***********
PROGRAM.45 10000 7% │+++++++++++++++++++
0.0564 sec 9% │***********
PROGRAM.32 10000 7% │+++++++++++++++++++
0.0189 sec 2% │***
PROGRAM.14 100 <1% │
0.0093 sec <1% │*
PROGRAM.47 100 <1% │
0.0087 sec <1% │*
PROGRAM.19 10000 7% │+++++++++++++++++++
0.0026 sec <1% │
PROGRAM.38 10000 7% │+++++++++++++++++++
0.0016 sec <1% │
PROGRAM.10 1 <1% │
0.0014 sec <1% │
PROGRAM.34 10000 7% │+++++++++++++++++++
0.0014 sec <1% │
PROGRAM.51 1 <1% │
0.0012 sec <1% │
PROGRAM.28 100 <1% │
0.0001 sec <1% │
PROGRAM.39 100 <1% │
0.0001 sec <1% │
PROGRAM.41 100 <1% │
0.0001 sec <1% │
PROGRAM.43 100 <1% │
0.0001 sec <1% │
PROGRAM.42 100 <1% │
0.0001 sec <1% │
PROGRAM.29 100 <1% │
0.0001 sec <1% │
PROGRAM.16 100 <1% │
0.0001 sec <1% │
PROGRAM.48 100 <1% │
Turbo Profiler Version 2.1 Wed Mar 28 23:42:27 2007
0.0001 sec <1% │
PROGRAM.40 100 <1% │
0.0001 sec <1% │
PROGRAM.25 100 <1% │
0.0001 sec <1% │
PROGRAM.44 100 <1% │
0.0001 sec <1% │
PROGRAM.27 100 <1% │
0.0001 sec <1% │
PROGRAM.26 100 <1% │
0.0001 sec <1% │
PROGRAM.50 100 <1% │
0.0001 sec <1% │
PROGRAM.24 100 <1% │
0.0001 sec <1% │
PROGRAM.12 1 <1% │
0.0000 sec <1% │
Вывод: Оптимизировав программу написанную на языке программирования Паскаль, нам удалось сократить время ее выполнения с 0.7162 секунды до 0.3279 секунды (выигрыш по времени примерно составил 57 %).