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

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 %).

Соседние файлы в папке suleiman