Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №22.doc
Скачиваний:
15
Добавлен:
01.05.2014
Размер:
183.3 Кб
Скачать

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

15