2.3.1 Профилирование программы linefit1.C
Turbo Profiler Version 2.1 Sun Apr 03 14:37:10 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\C\LINEFIT1.EXE File D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\
Time Counts
#include <stdlib.h>
#define size 20
0.0000 80 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.0000 80 sum_x = 0;
0.0000 80 sum_y = 0;
0.0000 80 sum_xy = 0;
0.0000 80 sum_x2 = 0;
0.0000 80 sum_y2 = 0;
0.0000 80 for (i=0; i<n; i++)
{
0.0015 1600 xi=x[i];
0.0562 1600 yi=y[i];
0.0016 1600 sum_x += xi;
0.0566 1600 sum_y += yi;
0.0136 1600 sum_xy += xi*yi;
0.0570 1600 sum_x2 += xi*xi;
0.0567 1600 sum_y2 += yi*yi;
}
0.0000 80 sxx = sum_x2-sum_x*sum_x/n;
0.0000 80 sxy = sum_xy-sum_x*sum_y/n;
0.0002 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.0000 80 for (i=0;i<n;i++)
0.0566 1600 *(y_calc+i) = *a + *b * x[i];
0.0000 80 }
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<80;k++)
{
0.0656 80 randomize();
0.0079 80 printf("Input Data: \n");
0.0000 80 for (i=0;i<size;i++)
{
0.0563 1600 x[i] = 10+i*10;
0.1113 1600 y[i] = 10+i*10 + random(20) - 10;
0.5569 1600 printf("x[%d] = %3.1f y[%d] = %3.1f\n",i,x[i],i,y[i]);
}
0.0001 80 linfit1(x,y,&y_calc[0],&a,&b,size);
0.0084 80 printf("a: %3.1f, b: %3.1f\n",a,b);
0.0000 80 for (i=0;i<size;i++)
0.3810 1600 printf("y_calc = %3.1f\n",y_calc[i]);
}
0.0000 1 }
Профилирование по времени и частоте
Turbo Profiler Version 2.1 Sun Apr 03 14:37:39 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\C\LINEFIT1.EXE
Execution Profile
Total time: 1.4904 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
#LINEFIT1#42 1600 7% |++++++++++++
0.5569 sec 37% |******************************************************************
#LINEFIT1#47 1600 7% |++++++++++++
0.3810 sec 25% |*********************************************
#LINEFIT1#41 1600 7% |++++++++++++
0.1113 sec 7% |*************
#LINEFIT1#36 80 <1% |
0.0656 sec 4% |*******
#LINEFIT1#19 1600 7% |++++++++++++
0.0570 sec 3% |******
#LINEFIT1#20 1600 7% |++++++++++++
0.0567 sec 3% |******
#LINEFIT1#17 1600 7% |++++++++++++
0.0566 sec 3% |******
#LINEFIT1#28 1600 7% |++++++++++++
0.0566 sec 3% |******
#LINEFIT1#40 1600 7% |++++++++++++
0.0563 sec 3% |******
#LINEFIT1#15 1600 7% |++++++++++++
0.0562 sec 3% |******
#LINEFIT1#18 1600 7% |++++++++++++
0.0136 sec <1% |*
#LINEFIT1#45 80 <1% |
0.0084 sec <1% |*
#LINEFIT1#37 80 <1% |
0.0079 sec <1% |
#LINEFIT1#16 1600 7% |++++++++++++
0.0016 sec <1% |
#LINEFIT1#14 1600 7% |++++++++++++
0.0015 sec <1% |
#LINEFIT1#24 80 <1% |
0.0002 sec <1% |
#LINEFIT1#44 80 <1% |
0.0001 sec <1% |
_linfit1 80 <1% |
0.0000 sec <1% |
#LINEFIT1#7 80 <1% |
0.0000 sec <1% |
#LINEFIT1#27 80 <1% |
0.0000 sec <1% |
#LINEFIT1#25 80 <1% |
0.0000 sec <1% |
#LINEFIT1#38 80 <1% |
0.0000 sec <1% |
#LINEFIT1#26 80 <1% |
0.0000 sec <1% |
#LINEFIT1#29 80 <1% |
0.0000 sec <1% |
#LINEFIT1#46 80 <1% |
0.0000 sec <1% |
#LINEFIT1#23 80 <1% |
Turbo Profiler Version 2.1 Sun Apr 03 14:37:39 2005
0.0000 sec <1% |
#LINEFIT1#8 80 <1% |
0.0000 sec <1% |
#LINEFIT1#22 80 <1% |
0.0000 sec <1% |
#LINEFIT1#12 80 <1% |
0.0000 sec <1% |
#LINEFIT1#10 80 <1% |
0.0000 sec <1% |
#LINEFIT1#11 80 <1% |
0.0000 sec <1% |
#LINEFIT1#9 80 <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» и удалим вывод входных значений на экран.
Оптимизированная программа LINEFIT1.С:
Turbo Profiler Version 2.1 Sun Apr 03 14:38:35 2005
Program: D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\ЛАБЫ\ЛАБ2\C\LINEFIT0.EXE File D:\_MYDOCS\LETI\8SEM\МЕТРОЛ~1\
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<80;k++)
{
0.0758 80 randomize();
0.0080 80 printf("Input Data: \n");
0.0549 80 for (i=0;i<size;i++)
{
0.1113 1600 x[i] = 10+i*10;
0.0564 1600 y[i] = 10+i*10 + random(20) - 10;
}
0.0000 80 for (i=0; i<size; i++)
{
0.0567 1600 xi=x[i];
0.1112 1600 yi=y[i];
0.0568 1600 sum_x += xi;
0.0562 1600 sum_y += yi;
0.1663 1600 sum_xy += xi*yi;
0.0563 1600 sum_x2 += xi*xi;
0.0566 1600 sum_y2 += yi*yi;
}
0.0000 80 sxx = sum_x2-sum_x*sum_x/size;
0.0550 80 sxy = sum_xy-sum_x*sum_y/size;
0.0000 80 syy = sum_y2-sum_y*sum_y/size;
0.0001 80 b=sxy/sxx;
0.0000 80 a=((sum_x2*sum_y-sum_x*sum_xy)/size)/sxx;
0.0000 80 for (i=0;i<size;i++)
0.0013 1600 y_calc[i] = a + b * x[i];
0.0087 80 printf("a: %3.1f, b: %3.1f\n",a,b);
0.0000 80 for (i=0;i<size;i++)
0.3290 1600 printf("y_calc = %3.1f\n",y_calc[i]);
}
0.0000 1 }
Профилирование по времени и частоте
Turbo Profiler Version 2.1 Sun Apr 03 14:38:58 2005
Program: D:\_MYDOCS\LETI\8SEM\оаЖЙДп~1\пЗь¢\пЗь2\C\LINEFIT0.EXE
Execution Profile
Total time: 1.2649 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
#LINEFIT0#40 1600 8% |++++++++++++++++++++
0.3290 sec 26% |******************************************************************
#LINEFIT0#26 1600 8% |++++++++++++++++++++
0.1663 sec 13% |*********************************
#LINEFIT0#16 1600 8% |++++++++++++++++++++
0.1113 sec 8% |**********************
#LINEFIT0#23 1600 8% |++++++++++++++++++++
0.1112 sec 8% |**********************
#LINEFIT0#12 80 <1% |+
0.0758 sec 6% |***************
#LINEFIT0#24 1600 8% |++++++++++++++++++++
0.0568 sec 4% |***********
#LINEFIT0#22 1600 8% |++++++++++++++++++++
0.0567 sec 4% |***********
#LINEFIT0#28 1600 8% |++++++++++++++++++++
0.0566 sec 4% |***********
#LINEFIT0#17 1600 8% |++++++++++++++++++++
0.0564 sec 4% |***********
#LINEFIT0#27 1600 8% |++++++++++++++++++++
0.0563 sec 4% |***********
#LINEFIT0#25 1600 8% |++++++++++++++++++++
0.0562 sec 4% |***********
#LINEFIT0#31 80 <1% |+
0.0550 sec 4% |***********
#LINEFIT0#14 80 <1% |+
0.0549 sec 4% |***********
#LINEFIT0#38 80 <1% |+
0.0087 sec <1% |*
#LINEFIT0#13 80 <1% |+
0.0080 sec <1% |*
#LINEFIT0#36 1600 8% |++++++++++++++++++++
0.0013 sec <1% |
#LINEFIT0#33 80 <1% |+
0.0001 sec <1% |
#LINEFIT0#20 80 <1% |+
0.0000 sec <1% |
#LINEFIT0#32 80 <1% |+
0.0000 sec <1% |
#LINEFIT0#35 80 <1% |+
0.0000 sec <1% |
#LINEFIT0#34 80 <1% |+
0.0000 sec <1% |
#LINEFIT0#30 80 <1% |+
0.0000 sec <1% |
#LINEFIT0#39 80 <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 Sun Apr 03 14:38:58 2005
0.0000 sec <1% |
Вывод: Время работы программы уменьшилось с 1.4904 секунды до 1.2649 секунды (выигрыш по времени составил примерно 15 %).