Скачиваний:
13
Добавлен:
01.05.2014
Размер:
138 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет

Кафедра МО ЭВМ

Отчёт по лабораторной работе №2

Дисциплина: Метрология программного обеспечения

Название работы: “Измерение характеристик динамической сложности программ с помощью стандартного профилировщика TurboProfiler”

Выполнил: Ву Зуй Линь

Группа : 1305

Преподаватель: Кирьянчиков В.А.

Санкт - Петербург 2005 год

1. Формулировка задания

  1. Ознакомиться с документацией на TurboProfiler и выполнить для программ prost0.c и prost0_p.pas следующее задание:

    • компиляция с использованием автономного отладчика;

    • профилирование по времени;

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

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

    • запись результатов профилирования в файл для печати.

  2. Выполнить тестовые программы test_cyc.c, test_sub.c c анализом параметров повторения циклов и проверкой их влияния на точность и чувствительность профилирования.

  3. Скомпилировать и выполнить под управлением TurboProfiler'а программы на Паскале и С, разработанные в 1-ой лабораторной работе. Выполнить разбиение программы на функциональные участки, снять все виды профилей, выявить "узкие места", ввести в программы усовершенствования и получить новые профили. Сравнить результаты, полученные для Паскаля и С. Объяснить смысл введенных модификаций программ.

2. Выполнение работы

2.1. Профилирование с программы «Prost0»

Модуль программы на языке С:

Turbo Profiler Version 2.1 Tue Mar 29 16:41:32 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_C.EXE File C:\INSTIT~1\M

Time Counts

#include "stdio.h";

int primes[1000];

#define MAXPRIMES 1000

0.0000 1 void main()

{

int j;

int lastprime, curprime;

0.0000 1 primes[0] = 2;

0.0000 1 primes[1] = 3;

0.0000 1 lastprime = 1;

0.0000 1 curprime = 3;

0.0568 1 printf("prime %d = %d\n", 0, primes[0]);

0.0018 1 printf("prime %d = %d\n", 1, primes[1]);

0.0013 500 while(curprime < MAXPRIMES)

{

0.0023 499 for(j = 0; j <= lastprime; j++)

0.4554 15122 if((curprime % primes[j]) == 0)

{

0.0006 333 curprime += 2;

0.0013 333 break;

}

0.0025 499 if(j <= lastprime)

0.0008 333 continue;

0.0007 166 lastprime++;

0.6429 166 printf("prime %d = %d\n", lastprime, curprime);

0.0554 166 primes[lastprime] = curprime;

0.0009 166 curprime += 2;

}

0.0000 1 }

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

Turbo Profiler Version 2.1 Tue Mar 29 16:45:46 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_C.EXE

Execution Profile

Total time: 1.2249 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time

Sort: Frequency

#PROST0_C#31 0.6429 sec 52% │==============================================

#PROST0_C#22 0.4554 sec 37% │================================

#PROST0_C#16 0.0568 sec 4% │====

#PROST0_C#32 0.0554 sec 4% │===

#PROST0_C#28 0.0025 sec <1% │

#PROST0_C#21 0.0023 sec <1% │

#PROST0_C#17 0.0018 sec <1% │

#PROST0_C#26 0.0013 sec <1% │

#PROST0_C#19 0.0013 sec <1% │

#PROST0_C#33 0.0009 sec <1% │

#PROST0_C#29 0.0008 sec <1% │

#PROST0_C#30 0.0007 sec <1% │

#PROST0_C#24 0.0006 sec <1% │

_main 0.0000 sec <1% │

#PROST0_C#14 0.0000 sec <1% │

#PROST0_C#13 0.0000 sec <1% │

#PROST0_C#11 0.0000 sec <1% │

#PROST0_C#12 0.0000 sec <1% │

#PROST0_C#35 0.0000 sec <1% │

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

Turbo Profiler Version 2.1 Tue Mar 29 16:45:02 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_C.EXE

Execution Profile

Total time: 1.2249 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Counts

Sort: Frequency

#PROST0_C#22 15122 82% │

#PROST0_C#19 500 2% │

#PROST0_C#28 499 2% │

#PROST0_C#21 499 2% │

#PROST0_C#26 333 1% │

#PROST0_C#29 333 1% │

#PROST0_C#24 333 1% │

#PROST0_C#31 166 <1% │

#PROST0_C#32 166 <1% │

#PROST0_C#33 166 <1% │

#PROST0_C#30 166 <1% │

_main 1 <1% │

#PROST0_C#17 1 <1% │

#PROST0_C#16 1 <1% │

#PROST0_C#14 1 <1% │

#PROST0_C#13 1 <1% │

#PROST0_C#11 1 <1% │

#PROST0_C#12 1 <1% │

#PROST0_C#35 1 <1% │

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

Turbo Profiler Version 2.1 Tue Mar 29 16:43:28 2005

Program: C:\INSTIT~1\MYWORK~1\îÅÄ\LAB2\PART1_~1\PROST0_C.EXE

Execution Profile

Total time: 1.2249 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time per call

Sort: Frequency

#PROST0_C#16 0.0568 sec/call │==============================================

#PROST0_C#31 0.0038 sec/call │===

#PROST0_C#17 0.0018 sec/call │=

#PROST0_C#32 0.0003 sec/call │

#PROST0_C#22 0.0000 sec/call │

#PROST0_C#28 0.0000 sec/call │

#PROST0_C#33 0.0000 sec/call │

#PROST0_C#30 0.0000 sec/call │

#PROST0_C#21 0.0000 sec/call │

#PROST0_C#26 0.0000 sec/call │

#PROST0_C#19 0.0000 sec/call │

#PROST0_C#29 0.0000 sec/call │

#PROST0_C#24 0.0000 sec/call │

_main 0.0000 sec/call │

#PROST0_C#14 0.0000 sec/call │

#PROST0_C#13 0.0000 sec/call │

#PROST0_C#11 0.0000 sec/call │

#PROST0_C#12 0.0000 sec/call │

#PROST0_C#35 0.0000 sec/call │

Вывод: Основное время выполнения программы тратится на две трудоемкие операции: вывод значений на экран (printf) и на вычисления модуля (%) на 22 строке. Хотя 22 строка выполняется мгновенно, но ей передается управление 15122 раз.

Оптимизация: Уменьшить количество выводимых символов на экран.

Модуль программы на языке Pascal:

Turbo Profiler Version 2.1 Tue Mar 29 16:52:49 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_P.EXE File C:\INSTIT~1\M

Time Counts

program prost;

{ Программа генерации простых чисел при помощи алгоритма Эвклида }

const maxprime=1000;

type

intarr=array[0..maxprime] of integer;

var

primes: intarr;

j,lastprime, curprime: integer;

0.0015 1 begin

0.0000 1 primes[0] := 2;

0.0000 1 primes[1] := 3;

0.0000 1 lastprime := 1;

0.0000 1 curprime := 3;

0.0018 1 writeln('prime0 = ', primes[0]);

0.0017 1 writeln('prime1 = ', primes[1]);

0.0017 499 while(curprime < MAXPRIME) do

begin

0.0024 498 for j := 0 to lastprime do

0.6701 15120 if((curprime mod primes[j]) = 0)

then begin

0.0012 333 curprime := curprime +2;

0.1116 333 break;

0.8944 14787 end;

0.0579 498 if((j+1) <= lastprime) then continue;

0.0564 166 lastprime:= lastprime+1;

0.3638 166 writeln('prime ', lastprime,'=', curprime);

0.0015 166 primes[lastprime] := curprime;

0.0003 166 curprime := curprime +2;

0.0018 166 end

0.0014 1 end.

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

Turbo Profiler Version 2.1 Tue Mar 29 16:53:36 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_P.EXE

Execution Profile

Total time: 2.1703 sec

% of total: 100%

Run: 1 of 1

Filter: All

Show: Time

Sort: Frequency

PROST.24 0.8944 sec 41% |**********************************************

PROST.20 0.6701 sec 30% |**********************************

PROST.27 0.3638 sec 16% |******************

PROST.23 0.1116 sec 5% |*****

PROST.25 0.0579 sec 2% |**

PROST.26 0.0564 sec 2% |**

PROST.19 0.0024 sec <1% |

PROST.30 0.0018 sec <1% |

PROST.15 0.0018 sec <1% |

PROST.16 0.0017 sec <1% |

PROST.17 0.0017 sec <1% |

PROST.28 0.0015 sec <1% |

PROST.9 0.0015 sec <1% |

PROST.31 0.0014 sec <1% |

PROST.22 0.0012 sec <1% |

PROST.29 0.0003 sec <1% |

PROST.12 0.0000 sec <1% |

PROST.10 0.0000 sec <1% |

PROST.13 0.0000 sec <1% |

PROST.11 0.0000 sec <1% |

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

Turbo Profiler Version 2.1 Tue Mar 29 16:54:46 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_P.EXE

Execution Profile

Total time: 2.1703 sec

% of total: 100%

Run: 1 of 1

Filter: All

Show: Counts

Sort: Frequency

PROST.20 15120 45% |++++++++++++++++++++++++++++++++++++++++++++++

PROST.24 14787 44% |++++++++++++++++++++++++++++++++++++++++++++

PROST.17 499 1% |+

PROST.25 498 1% |+

PROST.19 498 1% |+

PROST.23 333 1% |+

PROST.22 333 1% |+

PROST.28 166 <1% |

PROST.26 166 <1% |

PROST.29 166 <1% |

PROST.30 166 <1% |

PROST.27 166 <1% |

PROST.9 1 <1% |

PROST.16 1 <1% |

PROST.15 1 <1% |

PROST.13 1 <1% |

PROST.12 1 <1% |

PROST.10 1 <1% |

PROST.11 1 <1% |

PROST.31 1 <1% |

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

Turbo Profiler Version 2.1 Tue Mar 29 16:55:27 2005

Program: C:\INSTIT~1\MYWORK~1\МПО\LAB2\PART1_~1\PROST0_P.EXE

Execution Profile

Total time: 2.1703 sec

% of total: 100%

Run: 1 of 1

Filter: All

Show: Time per call

Sort: Frequency

PROST.27 0.0021 sec/call |**********************************************

PROST.15 0.0018 sec/call |**************************************

PROST.16 0.0017 sec/call |*************************************

PROST.9 0.0015 sec/call |*******************************

PROST.31 0.0014 sec/call |******************************

PROST.26 0.0003 sec/call |*******

PROST.23 0.0003 sec/call |*******

PROST.25 0.0001 sec/call |**

PROST.24 0.0000 sec/call |*

PROST.20 0.0000 sec/call |

PROST.30 0.0000 sec/call |

PROST.28 0.0000 sec/call |

PROST.19 0.0000 sec/call |

PROST.22 0.0000 sec/call |

PROST.17 0.0000 sec/call |

PROST.29 0.0000 sec/call |

PROST.11 0.0000 sec/call |

PROST.12 0.0000 sec/call |

PROST.10 0.0000 sec/call |

PROST.13 0.0000 sec/call |

Вывод: Самая ресурсоемкая операция writeln

Оптимизация: Уменьшить количество выводимых символов на экран.

Соседние файлы в папке Лаб2
  • #
    01.05.2014248 б9LAP2.LST
  • #
    01.05.2014160 б9LINEFIT1.TFA
  • #
    01.05.2014138 Кб13OTCHET.doc
  • #
    01.05.20141 Кб9TFCONFIG.TF