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

Министерство общего и профессионального образования РФ

───────────────────────────

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

Электротехнический Университет

“ЛЭТИ”

──────────────

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

Отчёт

к лабораторной работе № 2

«Измерение характеристик

динамической сложности программ с помощью стандартного профилировщика TurboProfiler»

по дисциплине

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

за VIII семестр.

ВАРИАНТ 15

Проверила: Боханова Е. В.

Выполнил: студент гр. № 3305

Мещеряков А. А.

2007 Г.

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

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

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

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

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

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

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

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

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

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

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

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:25:59 2007

    Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART1_~1\CPPVER~1\PROST0_C.EXE F

    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.0001 1 printf("prime %d = %d\n", 0, primes[0]);

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

    0.0009 500 while(curprime < MAXPRIMES)

    {

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

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

    {

    0.0015 333 curprime += 2;

    0.0006 333 break;

    }

    0.0010 499 if(j <= lastprime)

    0.0004 333 continue;

    0.0001 166 lastprime++;

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

    0.0001 166 primes[lastprime] = curprime;

    0.0001 166 curprime += 2;

    }

    0.0000 1 }

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:26:32 2007

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

    Execution Profile

    Total time: 0.6592 sec

    % of total: 99 %

    Run: 1 of 1

    Filter: All

    Show: Time

    Sort: Frequency

    #PROST0_C#22 0.4668 sec 70% │==============================================

    #PROST0_C#31 0.1300 sec 19% │============

    #PROST0_C#21 0.0561 sec 8% │=====

    #PROST0_C#24 0.0015 sec <1% │

    #PROST0_C#28 0.0010 sec <1% │

    #PROST0_C#19 0.0009 sec <1% │

    #PROST0_C#26 0.0006 sec <1% │

    #PROST0_C#29 0.0004 sec <1% │

    #PROST0_C#33 0.0001 sec <1% │

    #PROST0_C#30 0.0001 sec <1% │

    #PROST0_C#16 0.0001 sec <1% │

    #PROST0_C#32 0.0001 sec <1% │

    #PROST0_C#17 0.0001 sec <1% │

    #PROST0_C#11 0.0000 sec <1% │

    _main 0.0000 sec <1% │

    #PROST0_C#14 0.0000 sec <1% │

    #PROST0_C#12 0.0000 sec <1% │

    #PROST0_C#13 0.0000 sec <1% │

    #PROST0_C#35 0.0000 sec <1% │

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:33:27 2007

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

    Execution Profile

    Total time: 1.3578 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 Wed Mar 28 22:34:12 2007

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

    Execution Profile

    Total time: 1.3578 sec

    % of total: 99 %

    Run: 1 of 1

    Filter: All

    Show: Time per call

    Sort: Frequency

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

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

    #PROST0_C#17 0.0020 sec/call │==================

    #PROST0_C#28 0.0002 sec/call │=

    #PROST0_C#26 0.0001 sec/call │=

    #PROST0_C#22 0.0000 sec/call │

    #PROST0_C#29 0.0000 sec/call │

    #PROST0_C#19 0.0000 sec/call │

    #PROST0_C#30 0.0000 sec/call │

    #PROST0_C#24 0.0000 sec/call │

    #PROST0_C#32 0.0000 sec/call │

    #PROST0_C#21 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#12 0.0000 sec/call │

    #PROST0_C#11 0.0000 sec/call │

    #PROST0_C#33 0.0000 sec/call │

    #PROST0_C#35 0.0000 sec/call │

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

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

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:35:41 2007

    Program: C:\ЛЭТИ\SEM_8\МЕТРОЛ~1\LABS\MY\LAB2_1\PART1_~1\PASVER~1\PROST0_P.EXE F

    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.0019 1 writeln('prime0 = ', primes[0]);

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

    0.0010 499 while(curprime < MAXPRIME) do

    begin

    0.0007 498 for j := 0 to lastprime do

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

    then begin

    0.0006 333 curprime := curprime +2;

    0.0555 333 break;

    0.6878 14787 end;

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

    0.0001 166 lastprime:= lastprime+1;

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

    0.0003 166 primes[lastprime] := curprime;

    0.0001 166 curprime := curprime +2;

    0.0003 166 end

    0.0013 1 end.

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:36:06 2007

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

    Execution Profile

    Total time: 2.3756 sec

    % of total: 100%

    Run: 1 of 1

    Filter: All

    Show: Time

    Sort: Frequency

    PROST.27 0.8760 sec 36% │==============================================

    PROST.20 0.7454 sec 31% │=======================================

    PROST.24 0.6878 sec 28% │====================================

    PROST.23 0.0555 sec 2% │==

    PROST.15 0.0019 sec <1% │

    PROST.16 0.0019 sec <1% │

    PROST.9 0.0015 sec <1% │

    PROST.31 0.0013 sec <1% │

    PROST.17 0.0010 sec <1% │

    PROST.19 0.0007 sec <1% │

    PROST.22 0.0006 sec <1% │

    PROST.25 0.0005 sec <1% │

    PROST.30 0.0003 sec <1% │

    PROST.28 0.0003 sec <1% │

    PROST.26 0.0001 sec <1% │

    PROST.29 0.0001 sec <1% │

    PROST.12 0.0000 sec <1% │

    PROST.11 0.0000 sec <1% │

    PROST.13 0.0000 sec <1% │

    PROST.10 0.0000 sec <1% │

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

    Turbo Profiler Version 2.1 Wed Mar 28 22:36:26 2007

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

    Execution Profile

    Total time: 2.3756 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 Wed Mar 28 22:36:50 2007

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

    Execution Profile

    Total time: 2.3756 sec

    % of total: 100%

    Run: 1 of 1

    Filter: All

    Show: Time per call

    Sort: Frequency

    PROST.27 0.0052 sec/call │==============================================

    PROST.15 0.0019 sec/call │=================

    PROST.16 0.0019 sec/call │=================

    PROST.9 0.0015 sec/call │=============

    PROST.31 0.0013 sec/call │===========

    PROST.23 0.0001 sec/call │=

    PROST.20 0.0000 sec/call │

    PROST.24 0.0000 sec/call │

    PROST.22 0.0000 sec/call │

    PROST.28 0.0000 sec/call │

    PROST.17 0.0000 sec/call │

    PROST.30 0.0000 sec/call │

    PROST.19 0.0000 sec/call │

    PROST.25 0.0000 sec/call │

    PROST.26 0.0000 sec/call │

    PROST.10 0.0000 sec/call │

    PROST.12 0.0000 sec/call │

    PROST.11 0.0000 sec/call │

    PROST.29 0.0000 sec/call │

    PROST.13 0.0000 sec/call │

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

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