Оптимизация программного кода с использованием Turbo Profiler. Создание аннотированного листинга исходного текста программы

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение высшего профессионального образования

 «Комсомольский-на-Амуре Государственный Технический Университет»

Факультет компьютерных технологий

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

ЛАБОРАТОРНАЯ РАБОТА 2

по курсу «МСиС»

Студент группы 4ВС-1:                                                                                       Рогозин В.А.

Преподаватель:                                                                                                  Муратова Т.А.

Комсомольск-на-Амуре

2006

Тема: оптимизация программного кода с использованием Turbo Profiler.

Цель - научиться:

- обнаруживать, где и на что программа расходует время;

- создавать аннотированный листинг исходного текста программы и статистический отчет о профилировании;

- запоминать статистические данные, полученные в результате профилирования и затем, после перерыва, возвращаться к работе с этими данными;

- анализировать статистику профилирования и исходный текст программы, находящиеся в соседних окнах.

Задание: Оптимизировать с помощью системы Turbo Profiler программный модуль, написанный на языке СИ.

Мы рассмотрим программу, которая показывает число изолированных стран, которые заданы с помощью матрицы смежности.  Изолированными странами называются группы городов, такие, что между городами различных групп не существует летных сообщений. Найти число изолированных стран.

Исходный текст программы (msis2-0.cpp):

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int a[10][10]={0,0,1,0,1,0,0,0,0,0,

0,0,0,0,0,1,0,0,0,1,

1,0,0,0,1,0,0,0,0,0,

0,0,0,0,0,0,0,1,1,0,

1,0,1,0,0,0,0,0,0,0,

0,1,0,0,0,0,1,0,0,0,

0,0,0,0,0,1,0,0,0,1,

0,0,0,1,0,0,0,0,1,0,

0,0,0,1,0,0,0,1,0,0,

0,1,0,0,0,0,1,0,0,0};

int c[10]={0};

int b=1;

void recurs(int n)

{

for(int i=0;i<10;i++)

{

if((a[n][i]||a[i][n])&&(c[i]==0))

{

c[i]=b;

recurs(i);

}

}

}

void main()

{

clrscr();

c[0]=1;int i;

printf("изолированные страны состоят из вершин:\n");

for(i=0;i<10;i++)

{

recurs(i);

b++;

}

for(i=0;i<10;i++)

{int j;

for(j=0;j<10;j++)

{

if(c[j]==i) printf("%d ", j);

}

printf("\n");

}

}

Статистические данные исходной программы (msis2-0.cpp):

Turbo Profiler  Version 2.1  Wed Oct 25 11:43:39 2006

Program: D:\KNASTU\Њ‘€‘\LAB2\MSIS2-0.EXE

Execution Profile

Total time: 0.0838 sec

% of total: 90 %

Run: 15 of 15

Filter: All

Show: Time and counts

Sort: Frequency       Pass count: +++   Time: ***

#MSIS2-0#22            2850  46% |+++++++++++++++++++++++++++

0.0584 sec  76% |**********************************************

#MSIS2-0#44            1500  24% |++++++++++++++

0.0078 sec  10% |******

#MSIS2-0#46             150   2% |+

0.0067 sec   8% |*****

#MSIS2-0#34              15  <1% |

0.0010 sec   1% |

#MSIS2-0#37             150   2% |+

0.0003 sec  <1% |

recurs                  285   4% |++

0.0003 sec  <1% |

#MSIS2-0#28             285   4% |++

0.0003 sec  <1% |

#MSIS2-0#20             285   4% |++

0.0003 sec  <1% |

#MSIS2-0#25             135   2% |+

0.0001 sec  <1% |

#MSIS2-0#38             150   2% |+

0.0001 sec  <1% |

#MSIS2-0#42             150   2% |+

0.0001 sec  <1% |

#MSIS2-0#24             135   2% |+

0.0001 sec  <1% |

#MSIS2-0#32              15  <1% |

0.0000 sec  <1% |

#MSIS2-0#40              15  <1% |

0.0000 sec  <1% |

#MSIS2-0#35              15  <1% |

0.0000 sec  <1% |

#MSIS2-0#33              15  <1% |

0.0000 sec  <1% |

Обращение к файлам:

Первое изменение:

Неэффективной строкой является строка 22:

#MSIS2-0#22            2850  46% |+++++++++++++++++++++++++++

0.0584 sec  76% |**********************************************

В строке 22 задаётся условие проверки if((a[n][i]||a[i][n])&&(c[i]==0)). Заменим условие проверки матрицы. Т.е. если раньше мы на каждом шаге выполняли проверку матрицы и по столбцу, и по строке, то сейчас будем проверять только по строке.

Исходная строка:

if((a[n][i]||a[i][n])&&(c[i]==0))

Измененная строка:

if(a[i][n]&&c[i]==0)  

Статистические данные после первого изменения программы (msis2-1.cpp):

Turbo Profiler  Version 2.1  Wed Oct 25 12:04:34 2006

Program: D:\KNASTU\Њ‘€‘\LAB2\MSIS2-1.EXE

Execution Profile

Total time: 0.0299 sec

% of total: 74 %

Run: 15 of 15

Filter: All

Show: Time and counts

Sort: Frequency       Pass count: +++   Time: ***

#MSIS2-1#44            1500  24% |++++++++++++++++++++++++

0.0091 sec  40% |****************************************

#MSIS2-1#46             150   2% |++

0.0070 sec  31% |******************************

#MSIS2-1#22            2850  46% |++++++++++++++++++++++++++++++++++++++++++++++

0.0030 sec  13% |*************

#MSIS2-1#34              15  <1% |

0.0009 sec   4% |****

#MSIS2-1#37             150   2% |++

0.0003 sec   1% |*

#MSIS2-1#28             285   4% |++++

0.0002 sec   1% |*

recurs                  285   4% |++++

0.0002 sec   1% |*

#MSIS2-1#20             285   4% |++++

0.0002 sec   1% |*

#MSIS2-1#25             135   2% |++

0.0002 sec  <1% |

#MSIS2-1#42             150   2% |++

0.0001 sec  <1% |

#MSIS2-1#38             150   2% |++

0.0001 sec  <1% |

#MSIS2-1#24             135   2% |++

0.0001 sec  <1% |

#MSIS2-1#32              15  <1% |

0.0000 sec  <1% |

#MSIS2-1#48              15  <1% |

0.0000 sec  <1% |

#MSIS2-1#33              15  <1% |

0.0000 sec  <1% |

#MSIS2-1#35              15  <1% |

0.0000 sec  <1% |

#MSIS2-1#22            2850  46% |++++++++++++++++++++++++++++++++++++++++++++++

0.0030 sec  13% |*************

После первого изменения строка 22 стала работать быстрее, время её выполнения снизилось с 0.0584 sec до 0.0030 sec  , так же это сказалось на общем времени выполнения программы. Выполнение программы уменьшилось с 0.0838 sec до 0.0299 sec.

Похожие материалы

Информация о работе