- •Задание
- •Ознакомиться с документацией на TurboProfiler и выполнить для программ prost0.C и prost0_p.Pas следующее задание:
- •Реализация
- •На Паскале
- •Профилирование программы Prost0 test_cyc.Cpp
- •Профилирование программы Prost0 test_sub.Cpp
- •Оптимизированная программа
- •На Паскале
- •Оптимизированная программа
Оптимизированная программа
Тurbo Profiler Version 2.1 Sat Apr 16 23:00:06 2005
Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE File LABMET.CPP
Time Counts
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
const double tol = 1.0E-4;
double sum, upper, lower, erf, twopi;
double fx(double x)
{
0.0565 500 return exp(-x * x);
0.0029 500 }
double simps(double lower,double upper,double tol)
{
int i;
double x,delta_x,even_sum,odd_sum,end_sum, sum1;
int pieces;
double sum;
0.0003 100 pieces = 2;
0.0000 100 delta_x = (upper - lower) / pieces;
0.0000 100 odd_sum = fx(lower + delta_x);
0.0001 100 even_sum = 0.0;
0.0005 100 end_sum = fx(lower) + fx(upper);
0.0004 100 sum = (end_sum + 4.0 * odd_sum) * delta_x / 3.0;
do
{
0.0001 100 pieces = pieces * 2;
0.0003 100 sum1 = sum;
0.0000 100 delta_x = (upper - lower) / pieces;
0.0001 100 even_sum = even_sum + odd_sum;
0.0001 100 odd_sum = 0.0;
0.0000 100 for (i = 1; i <= (pieces / 2); i++)
{
0.0002 200 x = lower + delta_x * (2.0 * i - 1.0);
0.0003 200 odd_sum = odd_sum + fx(x);
}
0.0003 100 sum = (end_sum + 4.0 * odd_sum + 2.0 * even_sum) *
}
0.0002 100 while (abs(sum - sum1) > abs(tol * sum1));
0.0024 100 return sum;
0.0002 100 }
void main ()
{
double res;
int j;
0.0000 1 double pi = 3.14159265359;
0.0000 1 for (j = 1; j <= 100; j++)
{
0.0005 100 twopi = 2.0 / sqrt(pi);
0.0001 100 lower = 0.0;
0.0000 100 upper = 1;
0.0000 100 if (upper >= 0.0)
{
0.0001 100 res = simps(lower,upper,tol);
Turbo Profiler Version 2.1 Sat Apr 16 23:00:06 2005
0.0002 100 erf = twopi * res;
}
}
0.0010 1 }
Профилирование по времени
Turbo Profiler Version 2.1 Sat Apr 16 23:00:59 2005
Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE
Execution Profile
Total time: 0.0680 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time
Sort: Frequency
#LABMET#11 0.0565 sec 83% |**********************************************
#LABMET#12 0.0029 sec 4% |**
#LABMET#42 0.0024 sec 3% |*
#LABMET#64 0.0010 sec 1% |
#LABMET#53 0.0005 sec <1% |
#LABMET#25 0.0005 sec <1% |
#LABMET#26 0.0004 sec <1% |
#LABMET#37 0.0003 sec <1% |
#LABMET#39 0.0003 sec <1% |
#LABMET#21 0.0003 sec <1% |
#LABMET#30 0.0003 sec <1% |
#LABMET#43 0.0002 sec <1% |
#LABMET#60 0.0002 sec <1% |
#LABMET#36 0.0002 sec <1% |
#LABMET#41 0.0002 sec <1% |
#LABMET#32 0.0001 sec <1% |
#LABMET#24 0.0001 sec <1% |
#LABMET#59 0.0001 sec <1% |
#LABMET#33 0.0001 sec <1% |
#LABMET#54 0.0001 sec <1% |
#LABMET#29 0.0001 sec <1% |
#LABMET#23 0.0000 sec <1% |
#LABMET#31 0.0000 sec <1% |
#LABMET#57 0.0000 sec <1% |
#LABMET#55 0.0000 sec <1% |
#LABMET#22 0.0000 sec <1% |
#LABMET#34 0.0000 sec <1% |
#LABMET#49 0.0000 sec <1% |
#LABMET#51 0.0000 sec <1% |
Профилирование по частоте
Turbo Profiler Version 2.1 Sat Apr 16 23:01:24 2005
Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE
Execution Profile
Total time: 0.0680 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Counts
Sort: Frequency
#LABMET#12 500 13% |++++++++++++++++++++++++++++++++++++++++++++++
#LABMET#11 500 13% |++++++++++++++++++++++++++++++++++++++++++++++
#LABMET#36 200 5% |++++++++++++++++++
#LABMET#37 200 5% |++++++++++++++++++
#LABMET#22 100 2% |+++++++++
#LABMET#24 100 2% |+++++++++
#LABMET#25 100 2% |+++++++++
#LABMET#26 100 2% |+++++++++
#LABMET#29 100 2% |+++++++++
#LABMET#30 100 2% |+++++++++
#LABMET#31 100 2% |+++++++++
#LABMET#59 100 2% |+++++++++
#LABMET#33 100 2% |+++++++++
#LABMET#34 100 2% |+++++++++
#LABMET#21 100 2% |+++++++++
#LABMET#23 100 2% |+++++++++
#LABMET#39 100 2% |+++++++++
#LABMET#41 100 2% |+++++++++
#LABMET#42 100 2% |+++++++++
#LABMET#43 100 2% |+++++++++
#LABMET#32 100 2% |+++++++++
#LABMET#60 100 2% |+++++++++
#LABMET#53 100 2% |+++++++++
#LABMET#55 100 2% |+++++++++
#LABMET#54 100 2% |+++++++++
#LABMET#57 100 2% |+++++++++
#LABMET#51 1 <1% |
#LABMET#49 1 <1% |
#LABMET#64 1 <1% |
Профилирование по средним временам на 1 вызов:
Turbo Profiler Version 2.1 Sat Apr 16 23:01:50 2005
Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE
Execution Profile
Total time: 0.0680 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time per call
Sort: Frequency
#LABMET#64 0.0010 sec/call |**********************************************
#LABMET#11 0.0001 sec/call |*****
#LABMET#42 0.0000 sec/call |*
#LABMET#12 0.0000 sec/call |
#LABMET#25 0.0000 sec/call |
#LABMET#53 0.0000 sec/call |
#LABMET#26 0.0000 sec/call |
#LABMET#39 0.0000 sec/call |
#LABMET#30 0.0000 sec/call |
#LABMET#60 0.0000 sec/call |
#LABMET#21 0.0000 sec/call |
#LABMET#43 0.0000 sec/call |
#LABMET#37 0.0000 sec/call |
#LABMET#49 0.0000 sec/call |
#LABMET#41 0.0000 sec/call |
#LABMET#34 0.0000 sec/call |
#LABMET#31 0.0000 sec/call |
#LABMET#32 0.0000 sec/call |
#LABMET#29 0.0000 sec/call |
#LABMET#24 0.0000 sec/call |
#LABMET#33 0.0000 sec/call |
#LABMET#51 0.0000 sec/call |
#LABMET#23 0.0000 sec/call |
#LABMET#54 0.0000 sec/call |
#LABMET#55 0.0000 sec/call |
#LABMET#57 0.0000 sec/call |
#LABMET#22 0.0000 sec/call |
#LABMET#59 0.0000 sec/call |
#LABMET#36 0.0000 sec/call |
Вывод: Время работы программы уменьшилось с 0.1977 секунды до 0.0680 секунды (выигрыш по времени составил примерно 65 %), не считая удаления ввода с клавиатуры.