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

2.3.1 Профилирование программы c1.С

Turbo Profiler Version 2.1 Wed Mar 28 23:18:27 2007

Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\C\C1.EXE

Time Counts

#include <stdlib.h>

#define size 20

0.0001 100 void linfit1(double x[size],double y[size], double* y_calc, double* a, double* b,int n

{

int i;

double sum_x,sum_y,sum_xy,sum_x2,sum_y2,xi,yi,sxy,sxx,syy;

0.0001 100 sum_x = 0;

0.0001 100 sum_y = 0;

0.0001 100 sum_xy = 0;

0.0001 100 sum_x2 = 0;

0.0001 100 sum_y2 = 0;

0.0001 100 for (i=0; i<n; i++)

{

0.0015 10000 xi=x[i];

0.0562 10000 yi=y[i];

0.0016 10000 sum_x += xi;

0.0566 10000 sum_y += yi;

0.0136 10000 sum_xy += xi*yi;

0.0570 10000 sum_x2 += xi*xi;

0.0567 10000 sum_y2 += yi*yi;

}

0.0001 100 sxx = sum_x2-sum_x*sum_x/n;

0.0001 100 sxy = sum_xy-sum_x*sum_y/n;

0.0003 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=0;i<n;i++)

0.0566 10000 *(y_calc+i) = *a + *b * x[i];

0.0001 100 }

0.0000 1 void main(void)

{

int i,k;

double a,b,x[size],y[size],y_calc[size];

0.0000 1 for(k=0; k<100; k++)

{

0.0656 100 randomize();

0.0000 100 for (i=0;i<size;i++)

{

0.0563 10000 x[i] = 10+i*10;

0.1113 10000 y[i] = 10+i*10 + random(20) - 10;

}

0.0001 100 linfit1(x,y,&y_calc[0],&a,&b,size);

}

0.0000 1 }

Профилирование по времени и частоте

Turbo Profiler Version 2.1 Wed Mar 28 23:19:56 2007

Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\C\C1.EXE

Execution Profile

Total time: 0.4904 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time and counts

Sort: Frequency Pass count: +++ Time: ***

#LINEFIT1#41 10000 7% │++++++++++++

0.1113 sec 25% │*************

#LINEFIT1#36 100 <1% │

0.0656 sec 11% │*******

#LINEFIT1#19 10000 7% │++++++++++++

0.0570 sec 10% │******

#LINEFIT1#20 10000 7% │++++++++++++

0.0567 sec 10% │******

#LINEFIT1#17 10000 7% │++++++++++++

0.0566 sec 10% │******

#LINEFIT1#28 10000 7% │++++++++++++

0.0566 sec 10% │******

#LINEFIT1#40 10000 7% │++++++++++++

0.0563 sec 10% │******

#LINEFIT1#15 10000 7% │++++++++++++

0.0562 sec 10% │******

#LINEFIT1#18 10000 7% │++++++++++++

0.0136 sec 2% │*

#LINEFIT1#45 100 <1% │

0.0084 sec <1% │*

#LINEFIT1#37 100 <1% │

0.0079 sec <1% │

#LINEFIT1#16 10000 7% │++++++++++++

0.0016 sec <1% │

#LINEFIT1#14 10000 7% │++++++++++++

0.0015 sec <1% │

#LINEFIT1#24 100 <1% │

0.0002 sec <1% │

#LINEFIT1#44 100 <1% │

0.0001 sec <1% │

_linfit1 100 <1% │

0.0001 sec <1% │

#LINEFIT1#7 100 <1% │

0.0001 sec <1% │

#LINEFIT1#27 100 <1% │

0.0001 sec <1% │

#LINEFIT1#25 100 <1% │

0.0001 sec <1% │

#LINEFIT1#38 100 <1% │

0.0001 sec <1% │

#LINEFIT1#26 100 <1% │

0.0001 sec <1% │

#LINEFIT1#29 100 <1% │

0.0001 sec <1% │

#LINEFIT1#46 100 <1% │

0.0001 sec <1% │

#LINEFIT1#23 100 <1% │

Turbo Profiler Version 2.1 Wed Mar 28 23:19:56 2007

0.0001 sec <1% │

#LINEFIT1#8 100 <1% │

0.0001 sec <1% │

#LINEFIT1#22 100 <1% │

0.0001 sec <1% │

#LINEFIT1#12 100 <1% │

0.0001 sec <1% │

#LINEFIT1#10 100 <1% │

0.0001 sec <1% │

#LINEFIT1#11 100 <1% │

0.0001 sec <1% │

#LINEFIT1#9 100 <1% │

0.0000 sec <1% │

_main 1 <1% │

0.0000 sec <1% │

#LINEFIT1#34 1 <1% │

0.0000 sec <1% │

#LINEFIT1#49 1 <1% │

0.0000 sec <1% │

Вывод: Попробуем оптимизировать программу за счет переноса тела функции «Linefit1» в тело «main».

Оптимизированная программа С2.С:

Turbo Profiler Version 2.1 Wed Mar 28 23:22:52 2007

Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\C\C2.EXE

Time Counts

#include <stdlib.h>

#define size 20

0.0000 1 void main(void)

{

int i,k;

double a,b,x[size],y[size],y_calc[size];

double sum_x,sum_y,sum_xy,sum_x2,sum_y2,xi,yi,sxy,sxx,syy;

0.0000 1 for (k=0;k<100;k++)

{

0.0758 100 randomize();

0.0549 100 for (i=0;i<size;i++)

{

0.1113 10000 x[i] = 10+i*10;

0.0564 10000 y[i] = 10+i*10 + random(20) - 10;

}

0.0000 100 for (i=0; i<size; i++)

{

0.0567 10000 xi=x[i];

0.1112 10000 yi=y[i];

0.0568 10000 sum_x += xi;

0.0562 10000 sum_y += yi;

0.1663 10000 sum_xy += xi*yi;

0.0563 10000 sum_x2 += xi*xi;

0.0566 10000 sum_y2 += yi*yi;

}

0.0000 100 sxx = sum_x2-sum_x*sum_x/size;

0.0550 100 sxy = sum_xy-sum_x*sum_y/size;

0.0000 100 syy = sum_y2-sum_y*sum_y/size;

0.0001 100 b=sxy/sxx;

0.0000 100 a=((sum_x2*sum_y-sum_x*sum_xy)/size)/sxx;

0.0000 100 for (i=0;i<size;i++)

0.0013 10000 y_calc[i] = a + b * x[i];

}

0.0000 1 }

Профилирование по времени и частоте

Turbo Profiler Version 2.1 Wed Mar 28 23:23:15 2007

Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART3_~1\C\C2.EXE

Execution Profile

Total time: 0.2649 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time and counts

Sort: Frequency Pass count: +++ Time: ***

#LINEFIT0#16 10000 8% │++++++++++++++++++++

0.1113 sec 23% │**********************

#LINEFIT0#23 10000 8% │++++++++++++++++++++

0.1112 sec 23% │**********************

#LINEFIT0#12 100 <1% │+

0.0758 sec 6% │***************

#LINEFIT0#24 10000 8% │++++++++++++++++++++

0.0568 sec 4% │***********

#LINEFIT0#22 10000 8% │++++++++++++++++++++

0.0567 sec 4% │***********

#LINEFIT0#28 10000 8% │++++++++++++++++++++

0.0566 sec 4% │***********

#LINEFIT0#17 10000 8% │++++++++++++++++++++

0.0564 sec 4% │***********

#LINEFIT0#27 10000 8% │++++++++++++++++++++

0.0563 sec 4% │***********

#LINEFIT0#25 10000 8% │++++++++++++++++++++

0.0562 sec 4% │***********

#LINEFIT0#31 100 <1% │+

0.0550 sec 4% │***********

#LINEFIT0#14 100 <1% │+

0.0549 sec 4% │***********

#LINEFIT0#38 100 <1% │+

0.0087 sec <1% │*

#LINEFIT0#13 100 <1% │+

0.0080 sec <1% │|*

#LINEFIT0#36 10000 8% │++++++++++++++++++++

0.0013 sec <1% │

#LINEFIT0#33 100 <1% │+

0.0001 sec <1% │

#LINEFIT0#20 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#32 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#35 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#34 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#30 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#39 100 <1% │+

0.0000 sec <1% │

#LINEFIT0#10 1 <1% │

0.0000 sec <1% │

_main 1 <1% │

0.0000 sec <1% │

#LINEFIT0#42 1 <1% │

Turbo Profiler Version 2.1 Wed Mar 28 23:23:15 2007

0.0000 sec <1% │

Вывод: Время работы программы уменьшилось с 0.4904 секунды до 0.2649 секунды (выигрыш по времени составил примерно 50 %).