Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по МПО / Anton / Otchet_Lab2_Metr.doc
Скачиваний:
24
Добавлен:
01.05.2014
Размер:
167.94 Кб
Скачать

Профилирование программы Prost0 test_cyc.Cpp

Turbo Profiler Version 2.1 Sat Apr 16 21:58:06 2005

Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\2_TEST~1\TEST_CYC.EXE File TEST_CYC.CPP

Time Counts

#define Size 10000

int i, tmp, dim[Size];

0.0000 1 void main()

{

0.0000 1 for(i=0;i<Size/10;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp

0.0000 1 for(i=0;i<Size/5;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp;

0.0000 1 for(i=0;i<Size/2;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp;

0.0001 1 for(i=0;i<Size;i++) { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp;

0.0000 1 for(i=0;i<Size/10;i++)

0.0569 1000 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

0.0000 1 for(i=0;i<Size/5;i++)

0.0732 2000 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

0.0000 1 for(i=0;i<Size/2;i++)

0.1220 5000 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

0.0000 1 for(i=0;i<Size;i++)

0.3466 10000 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

0.0000 1 for(i=0;i<Size/10;i++)

0.0010 1000 { tmp=dim[0];

0.0029 1000 dim[0]=dim[i];

0.0010 1000 dim[i]=tmp;

};

0.0000 1 for(i=0;i<Size/5;i++)

0.1683 2000 { tmp=dim[0];

0.0599 2000 dim[0]=dim[i];

0.0040 2000 dim[i]=tmp;

};

0.0000 1 for(i=0;i<Size/2;i++)

0.3385 5000 { tmp=dim[0];

0.1713 5000 dim[0]=dim[i];

0.1710 5000 dim[i]=tmp;

};

0.0000 1 for(i=0;i<Size;i++)

0.1767 10000 { tmp=dim[0];

0.3415 10000 dim[0]=dim[i];

0.1211 10000 dim[i]=tmp;

};

0.0000 1 }

Вывод: Структура операторов цикла влияет на качество профилирования. Чем больше строк, тем хуже время профилирования.

Профилирование программы Prost0 test_sub.Cpp

Turbo Profiler Version 2.1 Sat Apr 16 15:57:42 2005

Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\TEST\TEST_SUB.EXE File TEST_SUB.CPP

Time Counts

const unsigned Size = 1000;

0.0000 4 void TestLoop(int nTimes)

{

static int TestDim[Size];

int tmp;

int iLoop;

0.0009 909 while (nTimes > 0)

{

0.0035 906 nTimes --;

0.0016 906 iLoop = Size;

32.517 906332 while (iLoop > 0)

{

31.093 905427 iLoop -- ;

27.610 905427 tmp = TestDim[0];

33.148 905426 TestDim[0] = TestDim[nTimes];

29.234 905426 TestDim[nTimes] = tmp;

}

}

0.0000 3 } /* TestLoop */

0.0000 1 void main()

{

0.0000 1 TestLoop(Size / 10); // 100 * 1000 Ї®ўв®аҐ­Ё©

0.0000 1 TestLoop(Size / 5); // 200 * 1000 Ї®ўв®аҐ­Ё©

0.0000 1 TestLoop(Size / 2); // 500 * 1000 Ї®ўв®аҐ­Ё©

0.0000 1 TestLoop(Size / 1); // 1000* 1000 Ї®ўв®аҐ­Ё©

0 0 }

Вывод: Процедуры и функции плохо влияет на качество профилирования.

Профилирование программы интегрирования методом Симпсона

Для того чтобы время профилирования участков программы было не слишком мало, я ввел зацикливание. При первом профилировании оператор ввода с клавиатуры потреблял огромное количество времени, поэтому нижеприведенный код программы лишен этого оператора, что значительно улучшило характеристики программы.

На С++

Turbo Profiler Version 2.1 Sat Apr 16 22:40:47 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.0006 500 return exp(-x * x);

0.0006 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.0001 100 pieces = 2;

0.0000 100 delta_x = (upper - lower) / pieces;

0.0549 100 odd_sum = fx(lower + delta_x);

0.0000 100 even_sum = 0.0;

0.0001 100 end_sum = fx(lower) + fx(upper);

0.0001 100 sum = (end_sum + 4.0 * odd_sum) * delta_x / 3.0;

0.0058 100 printf("%d", pieces);

0.0062 100 printf("%f", sum);

do

{

0.0000 100 pieces = pieces * 2;

0.0000 100 sum1 = sum;

0.0001 100 delta_x = (upper - lower) / pieces;

0.0553 100 even_sum = even_sum + odd_sum;

0.0001 100 odd_sum = 0.0;

0.0001 100 for (i = 1; i <= (pieces / 2); i++)

{

0.0002 200 x = lower + delta_x * (2.0 * i - 1.0);

0.0002 200 odd_sum = odd_sum + fx(x);

}

0.0000 100 sum = (end_sum + 4.0 * odd_sum + 2.0 * even_sum) *

}

0.0014 100 while (abs(sum - sum1) > abs(tol * sum1));

0.0001 100 return sum;

0.0000 100 }

void main ()

{

double res;

int j;

0.0000 1 double pi = 3.14159265359;

0.0000 1 for (j = 1; j <= 100; j++)

{

0.0000 100 twopi = 2.0 / sqrt(pi);

0.0001 100 lower = 0.0;

//cin >> upper;

0.0001 100 upper = 1;

Turbo Profiler Version 2.1 Sat Apr 16 22:40:47 2005

0.0001 100 if (upper >= 0.0)

{

0.0000 100 res = simps(lower,upper,tol);

0.0001 100 erf = twopi * res;

0.0630 100 printf("%f", upper);

0.0063 100 printf("%f", erf);

}

}

0.0008 1 }

Профилирование по времени.

Turbo Profiler Version 2.1 Sat Apr 16 22:39:50 2005

Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE

Execution Profile

Total time: 0.1977 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time

Sort: Frequency

#LABMET#64 0.0630 sec 31% |**********************************************

#LABMET#34 0.0553 sec 27% |****************************************

#LABMET#23 0.0549 sec 27% |****************************************

#LABMET#65 0.0063 sec 3% |****

#LABMET#28 0.0062 sec 3% |****

#LABMET#27 0.0058 sec 2% |****

#LABMET#43 0.0014 sec <1% |*

#LABMET#69 0.0008 sec <1% |

#LABMET#11 0.0006 sec <1% |

#LABMET#12 0.0006 sec <1% |

#LABMET#38 0.0002 sec <1% |

#LABMET#39 0.0002 sec <1% |

#LABMET#58 0.0001 sec <1% |

#LABMET#44 0.0001 sec <1% |

#LABMET#60 0.0001 sec <1% |

#LABMET#26 0.0001 sec <1% |

#LABMET#36 0.0001 sec <1% |

#LABMET#63 0.0001 sec <1% |

#LABMET#21 0.0001 sec <1% |

#LABMET#35 0.0001 sec <1% |

#LABMET#25 0.0001 sec <1% |

#LABMET#56 0.0001 sec <1% |

#LABMET#33 0.0001 sec <1% |

#LABMET#45 0.0000 sec <1% |

#LABMET#32 0.0000 sec <1% |

#LABMET#31 0.0000 sec <1% |

#LABMET#41 0.0000 sec <1% |

#LABMET#62 0.0000 sec <1% |

#LABMET#24 0.0000 sec <1% |

#LABMET#55 0.0000 sec <1% |

#LABMET#22 0.0000 sec <1% |

#LABMET#51 0.0000 sec <1% |

#LABMET#53 0.0000 sec <1% |

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

Turbo Profiler Version 2.1 Sat Apr 16 22:41:47 2005

Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE

Execution Profile

Total time: 0.1977 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Counts

Sort: Frequency

#LABMET#12 500 12% |++++++++++++++++++++++++++++++++++++++++++++++

#LABMET#11 500 12% |++++++++++++++++++++++++++++++++++++++++++++++

#LABMET#38 200 4% |++++++++++++++++++

#LABMET#39 200 4% |++++++++++++++++++

#LABMET#22 100 2% |+++++++++

#LABMET#24 100 2% |+++++++++

#LABMET#25 100 2% |+++++++++

#LABMET#26 100 2% |+++++++++

#LABMET#27 100 2% |+++++++++

#LABMET#28 100 2% |+++++++++

#LABMET#31 100 2% |+++++++++

#LABMET#64 100 2% |+++++++++

#LABMET#33 100 2% |+++++++++

#LABMET#34 100 2% |+++++++++

#LABMET#35 100 2% |+++++++++

#LABMET#36 100 2% |+++++++++

#LABMET#21 100 2% |+++++++++

#LABMET#23 100 2% |+++++++++

#LABMET#41 100 2% |+++++++++

#LABMET#43 100 2% |+++++++++

#LABMET#44 100 2% |+++++++++

#LABMET#45 100 2% |+++++++++

#LABMET#32 100 2% |+++++++++

#LABMET#65 100 2% |+++++++++

#LABMET#55 100 2% |+++++++++

#LABMET#56 100 2% |+++++++++

#LABMET#58 100 2% |+++++++++

#LABMET#62 100 2% |+++++++++

#LABMET#60 100 2% |+++++++++

#LABMET#63 100 2% |+++++++++

#LABMET#53 1 <1% |

#LABMET#51 1 <1% |

#LABMET#69 1 <1% |

Профилирование по средним временам на 1 вызов:

Turbo Profiler Version 2.1 Sat Apr 16 22:42:34 2005

Program: D:\ETU\8‘…Њ…‘~1\Њ…’ђЋ‹~1\LAB2\3_PART~1\LABMET.EXE

Execution Profile

Total time: 0.1977 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time per call

Sort: Frequency

#LABMET#69 0.0008 sec/call |**********************************************

#LABMET#64 0.0006 sec/call |*********************************

#LABMET#34 0.0005 sec/call |*****************************

#LABMET#23 0.0005 sec/call |*****************************

#LABMET#65 0.0000 sec/call |***

#LABMET#28 0.0000 sec/call |***

#LABMET#27 0.0000 sec/call |***

#LABMET#43 0.0000 sec/call |

#LABMET#51 0.0000 sec/call |

#LABMET#11 0.0000 sec/call |

#LABMET#31 0.0000 sec/call |

#LABMET#32 0.0000 sec/call |

#LABMET#33 0.0000 sec/call |

#LABMET#26 0.0000 sec/call |

#LABMET#35 0.0000 sec/call |

#LABMET#36 0.0000 sec/call |

#LABMET#25 0.0000 sec/call |

#LABMET#39 0.0000 sec/call |

#LABMET#41 0.0000 sec/call |

#LABMET#24 0.0000 sec/call |

#LABMET#44 0.0000 sec/call |

#LABMET#45 0.0000 sec/call |

#LABMET#22 0.0000 sec/call |

#LABMET#53 0.0000 sec/call |

#LABMET#55 0.0000 sec/call |

#LABMET#56 0.0000 sec/call |

#LABMET#58 0.0000 sec/call |

#LABMET#60 0.0000 sec/call |

#LABMET#62 0.0000 sec/call |

#LABMET#63 0.0000 sec/call |

#LABMET#12 0.0000 sec/call |

#LABMET#21 0.0000 sec/call |

#LABMET#38 0.0000 sec/call |

Вывод: Основное время тратится на вывод символов на экран (printf). Попробуем оптимизировать программу за счет удаления вывода printf.

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