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

Задание

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

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

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

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

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

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

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

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

    Реализация

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

    На С++

    Turbo Profiler Version 2.1 Sat Apr 16 15:14:05 2005

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

    Time Counts

    #include "stdio.h";

    int primes[1000];

    #define MAXPRIMES 1000

    0.0000 1 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]);

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

    0.0022 500 while(curprime < MAXPRIMES)

    {

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

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

    {

    0.0010 333 curprime += 2;

    0.0005 333 break;

    }

    0.0005 499 if(j <= lastprime)

    0.0003 333 continue;

    0.0002 166 lastprime++;

    0.0788 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 Sat Apr 16 21:21:25 2005

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

    Execution Profile

    Total time: 0.5841 sec

    % of total: 99 %

    Run: 1 of 1

    Filter: All

    Show: Time

    Sort: Frequency

    #PROST0_C#22 0.3755 sec 64% |**********************************************

    #PROST0_C#31 0.0861 sec 14% |**********

    #PROST0_C#21 0.0591 sec 10% |*******

    #PROST0_C#28 0.0587 sec 10% |*******

    #PROST0_C#26 0.0013 sec <1% |

    #PROST0_C#19 0.0010 sec <1% |

    #PROST0_C#30 0.0005 sec <1% |

    #PROST0_C#24 0.0004 sec <1% |

    #PROST0_C#29 0.0003 sec <1% |

    #PROST0_C#33 0.0002 sec <1% |

    #PROST0_C#32 0.0001 sec <1% |

    #PROST0_C#16 0.0001 sec <1% |

    #PROST0_C#17 0.0000 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 Sat Apr 16 21:24:05 2005

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

    Execution Profile

    Total time: 0.5841 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 Sat Apr 16 21:24:56 2005

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

    Execution Profile

    Total time: 0.5841 sec

    % of total: 99 %

    Run: 1 of 1

    Filter: All

    Show: Time per call

    Sort: Frequency

    #PROST0_C#31 0.0005 sec/call |**********************************************

    #PROST0_C#16 0.0001 sec/call |*************

    #PROST0_C#21 0.0001 sec/call |**********

    #PROST0_C#28 0.0001 sec/call |**********

    #PROST0_C#17 0.0000 sec/call |*******

    #PROST0_C#22 0.0000 sec/call |**

    #PROST0_C#26 0.0000 sec/call |

    #PROST0_C#30 0.0000 sec/call |

    #PROST0_C#19 0.0000 sec/call |

    _main 0.0000 sec/call |

    #PROST0_C#24 0.0000 sec/call |

    #PROST0_C#14 0.0000 sec/call |

    #PROST0_C#29 0.0000 sec/call |

    #PROST0_C#13 0.0000 sec/call |

    #PROST0_C#12 0.0000 sec/call |

    #PROST0_C#32 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) на 31 строке и на вычисление условия на 22 строке. Строка 22 выполняется 15 122 раза, так как в этой строке происходит проверка каждого числа в диапазоне от 4 до 1000 на делимость.

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