#IZ1#15 60 8% |++++++++++
0.0011 sec <1% |
#IZ1#14 60 8% |++++++++++
0.0009 sec <1% |
#IZ1#5 10 1% |+
0.0002 sec <1% |
Рис.2 Окно файлы (после первого изменения)
Оптимизированные строки стали работать значительно быстрее. Надо заметить, что они по-прежнему являются узкими местами программы, но оптимизировать их больше не представляется возможным. Также в результате первого изменения удалось избежать обращения программы к файлам, не повлияв при этом на результат ее работы (рис. 2). Оптимизация положительно сказалась на времени работы всей программы, которое сократилось с 3.2320 до 0.7090 секунд.
Второе изменение (iz2.cpp)
Обратим внимание на строку:
#IZ1#9 d=pow(b,2)-4*a*c[i];
Время, затраченное на выполнение этой области достаточно мало (0.0020 сек), однако нельзя упускать возможности оптимизировать данную строку. Предположим, что операция умножения b*b будет работать быстрее оператора возведения в степень pow(b,2). Итак, заменим строку 9 строкой:
#IZ2#9 d=b*b-4*a*c[i];
Статистика после второго изменения(iz2.cpp)
Execution Profile
Total time: 0.6607 sec
% of total: 87 %
Run: 10 of 10
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
#IZ2#10 100 14% |+++++++++++++++++
0.2172 sec 37% |*******************************************
#IZ2#16 60 8% |++++++++++
0.1805 sec 31% |**************************************
#IZ2#11 100 14% |+++++++++++++++++
0.1111 sec 19% |***********************
#IZ2#20 10 1% |+
0.0677 sec 11% |**************
#IZ2#18 100 14% |+++++++++++++++++
0.0001 sec <1% |
#IZ2#7 110 15% |++++++++++++++++++
0.0000 sec <1% |
#IZ2#9 100 14% |+++++++++++++++++
0.0000 sec <1% |
#IZ2#14 60 8% |++++++++++
0.0000 sec <1% |
#IZ2#15 60 8% |++++++++++
0.0000 sec <1% |
#IZ2#5 10 1% |+
0.0000 sec <1% |
Строка 9 после оптимизации стала работать незначительно быстрее. Изменение также лишь немного уменьшило время работы всей программы, которое сократилось до 0.6607 секунд. Согласно статистике после второго изменения, узким местом в программе является строка 20. Содержание этой строки – это завершение программы «}». Очевидно, что оптимизировать эту строку не удастся.
Третье изменение (iz3.cpp)
Заметим, что строки 18 (увеличение счетчика i++) и 7 (голова цикла while), хотя и являются эффективными, вызываются достаточно часто. Попробуем заменить цикл while, используемый при подсчете и выводе результатов в программе, циклом for. Измененный код выглядит следующим образом:
#include<conio.h>
#include<math.h>
void main(void)
{
int a=1,b=-3,c[10] = {1, 3, -2, 5, -4, 0, 6, 8, -1, -3},i;
float x1,x2,d;
for (i=0; i<10; i++)
{
d=b*b-4*a*c[i];
cprintf("a = %d, b = %d, c = %d: ", a, b, c[i]);
if (d<0) cprintf("Дискриминант меньше нуля! ");
else
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
cprintf("Результат: x1=%.3f, x2=%.3f ",x1 ,x2);
}
}
}
Статистика после третьего изменения (iz3.cpp)
Execution Profile
Total time: 0.4238 sec
% of total: 96 %
Run: 10 of 10
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
#IZ3#10 100 19% |+++++++++++++++++++
0.1906 sec 46% |*******************************************
#IZ3#11 100 19% |+++++++++++++++++++
0.0937 sec 22% |**********************
#IZ3#19 10 1% |+
0.0622 sec 15% |***************
#IZ3#16 60 11% |+++++++++++
0.0609 sec 14% |**************
#IZ3#9 100 19% |+++++++++++++++++++
0.0001 sec <1% |
#IZ3#14 60 11% |+++++++++++
0.0000 sec <1% |
#IZ3#15 60 11% |+++++++++++
0.0000 sec <1% |
#IZ3#7 10 1% |+
0.0000 sec <1% |
#IZ3#5 10 1% |+
0.0000 sec <1% |
Теперь строчка 7 (голова цикла) выполняется значительно реже (процент от общего числа вызовов сократился с 15% до 1%). Необходимость в отдельной строке с командой i++ при использовании цикла for отпала. Это привело к улучшению эффективности работы всей программы, время выполнения которой уменьшилось до 0.4238 секунд.
Вывод
В ходе оптимизации программного кода с помощью системы Turbo Profiler были поэтапно произведены изменения в программе, сравнены статистические данные. Это помогло обнаружить малоэффективные места программы и, если это было возможно, улучшить их. В итоге, в результате трех изменений, время работы программы уменьшилось с 3.2320 секунд до 0.4238 секунд, т.е. примерно в 7,6 раз.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.