Лабы по МПО / Lap_2 / Lap_2
.doc}
void main (void)
{
for (int i=0; i<1000; i++)
{
float x;
float ordr;
int done;
done = 0;
ordr = 1;
do{
if (ordr<0.0) {done = 1;}
else
{
do{
x = 5;
}while (x < 0.0);
printf("%f",bessy(x,ordr));
ordr = -1;
}
}while (done == 0);
}
}
Результаты профилирования по времени bessy.c
Turbo Profiler Version 2.1 Sun Mar 21 11:56:47 2004
Program: G:\TC\LAB1_1.EXE
Execution Profile
Total time: 1.6833 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time
Sort: Frequency
#LAB1_1#31 0.2836 sec 17% |**********************************************
#LAB1_1#37 0.2303 sec 14% |*************************************
#LAB1_1#28 0.2287 sec 14% |*************************************
#LAB1_1#38 0.1763 sec 10% |****************************
#LAB1_1#39 0.1755 sec 10% |****************************
#LAB1_1#40 0.0655 sec 4% |**********
#LAB1_1#41 0.0655 sec 4% |**********
#LAB1_1#30 0.0641 sec 3% |**********
#LAB1_1#26 0.0637 sec 3% |**********
#LAB1_1#27 0.0637 sec 3% |**********
#LAB1_1#76 0.0566 sec 3% |*********
#LAB1_1#7 0.0557 sec 3% |*********
#LAB1_1#21 0.0557 sec 3% |*********
#LAB1_1#42 0.0113 sec <1% |*
#LAB1_1#29 0.0088 sec <1% |*
#LAB1_1#87 0.0017 sec <1% |
#LAB1_1#83 0.0017 sec <1% |
#LAB1_1#73 0.0015 sec <1% |
#LAB1_1#17 0.0014 sec <1% |
#LAB1_1#24 0.0014 sec <1% |
#LAB1_1#46 0.0009 sec <1% |
#LAB1_1#80 0.0009 sec <1% |
#LAB1_1#18 0.0009 sec <1% |
#LAB1_1#35 0.0009 sec <1% |
#LAB1_1#9 0.0009 sec <1% |
#LAB1_1#63 0.0008 sec <1% |
#LAB1_1#6 0.0008 sec <1% |
#LAB1_1#44 0.0008 sec <1% |
#LAB1_1#32 0.0008 sec <1% |
#LAB1_1#20 0.0008 sec <1% |
#LAB1_1#19 0.0008 sec <1% |
#LAB1_1#34 0.0008 sec <1% |
#LAB1_1#85 0.0008 sec <1% |
#LAB1_1#8 0.0008 sec <1% |
#LAB1_1#74 0.0008 sec <1% |
#LAB1_1#60 0.0008 sec <1% |
#LAB1_1#22 0.0008 sec <1% |
#LAB1_1#43 0.0008 sec <1% |
#LAB1_1#45 0.0008 sec <1% |
bessy 0.0008 sec <1% |
#LAB1_1#81 0.0008 sec <1% |
#LAB1_1#23 0.0008 sec <1% |
#LAB1_1#33 0.0008 sec <1% |
#LAB1_1#67 0.0000 sec <1% |
_main 0.0000 sec <1% |
#LAB1_1#89 0.0000 sec <1% |
Результаты профилирования по частоте bessy.c
Turbo Profiler Version 2.1 Sun Mar 21 12:02:38 2004
Program: G:\TC\LAB1_1.EXE
Execution Profile
Total time: 1.6833 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Counts
Sort: Frequency
#LAB1_1#39 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#37 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#38 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#41 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#42 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#40 12000 7% |++++++++++++++++++++++++++++++++++++++++++++++
#LAB1_1#27 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#26 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#28 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#31 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#29 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#30 10000 6% |++++++++++++++++++++++++++++++++++++++
#LAB1_1#87 2000 1% |+++++++
#LAB1_1#76 2000 1% |+++++++
bessy 1000 <1% |+++
#LAB1_1#24 1000 <1% |+++
#LAB1_1#23 1000 <1% |+++
#LAB1_1#22 1000 <1% |+++
#LAB1_1#21 1000 <1% |+++
#LAB1_1#32 1000 <1% |+++
#LAB1_1#33 1000 <1% |+++
#LAB1_1#34 1000 <1% |+++
#LAB1_1#35 1000 <1% |+++
#LAB1_1#20 1000 <1% |+++
#LAB1_1#85 1000 <1% |+++
#LAB1_1#18 1000 <1% |+++
#LAB1_1#17 1000 <1% |+++
#LAB1_1#9 1000 <1% |+++
#LAB1_1#8 1000 <1% |+++
#LAB1_1#43 1000 <1% |+++
#LAB1_1#44 1000 <1% |+++
#LAB1_1#45 1000 <1% |+++
#LAB1_1#46 1000 <1% |+++
#LAB1_1#60 1000 <1% |+++
#LAB1_1#63 1000 <1% |+++
#LAB1_1#19 1000 <1% |+++
#LAB1_1#6 1000 <1% |+++
#LAB1_1#73 1000 <1% |+++
#LAB1_1#74 1000 <1% |+++
#LAB1_1#7 1000 <1% |+++
#LAB1_1#81 1000 <1% |+++
#LAB1_1#80 1000 <1% |+++
#LAB1_1#83 1000 <1% |+++
#LAB1_1#67 1 <1% |
_main 1 <1% |
#LAB1_1#89 1 <1% |
Результаты профилирования по средним временам на 1 вызов bessy.c
Turbo Profiler Version 2.1 Sun Mar 21 12:07:23 2004
Program: G:\TC\LAB1_1.EXE
Execution Profile
Total time: 1.6833 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time per call
Sort: Frequency
#LAB1_1#20 0.0001 sec/call |**********************************************
#LAB1_1#7 0.0000 sec/call |***********************
#LAB1_1#34 0.0000 sec/call |***********************
#LAB1_1#60 0.0000 sec/call |***********************
#LAB1_1#76 0.0000 sec/call |***********
#LAB1_1#87 0.0000 sec/call |***********
#LAB1_1#31 0.0000 sec/call |******
#LAB1_1#38 0.0000 sec/call |*****
#LAB1_1#37 0.0000 sec/call |*****
#LAB1_1#41 0.0000 sec/call |*****
#LAB1_1#39 0.0000 sec/call |*****
#LAB1_1#29 0.0000 sec/call |****
#LAB1_1#27 0.0000 sec/call |****
#LAB1_1#40 0.0000 sec/call |**
#LAB1_1#42 0.0000 sec/call |**
#LAB1_1#83 0.0000 sec/call |
bessy 0.0000 sec/call |
#LAB1_1#30 0.0000 sec/call |
#LAB1_1#28 0.0000 sec/call |
#LAB1_1#32 0.0000 sec/call |
#LAB1_1#33 0.0000 sec/call |
#LAB1_1#26 0.0000 sec/call |
#LAB1_1#35 0.0000 sec/call |
#LAB1_1#24 0.0000 sec/call |
#LAB1_1#23 0.0000 sec/call |
#LAB1_1#22 0.0000 sec/call |
#LAB1_1#21 0.0000 sec/call |
#LAB1_1#19 0.0000 sec/call |
#LAB1_1#18 0.0000 sec/call |
#LAB1_1#43 0.0000 sec/call |
#LAB1_1#44 0.0000 sec/call |
#LAB1_1#45 0.0000 sec/call |
#LAB1_1#46 0.0000 sec/call |
#LAB1_1#17 0.0000 sec/call |
#LAB1_1#63 0.0000 sec/call |
_main 0.0000 sec/call |
#LAB1_1#67 0.0000 sec/call |
#LAB1_1#73 0.0000 sec/call |
#LAB1_1#74 0.0000 sec/call |
#LAB1_1#9 0.0000 sec/call |
#LAB1_1#80 0.0000 sec/call |
#LAB1_1#81 0.0000 sec/call |
#LAB1_1#8 0.0000 sec/call |
#LAB1_1#6 0.0000 sec/call |
#LAB1_1#85 0.0000 sec/call |
#LAB1_1#89 0.0000 sec/call |
Выводы: в результате анализа полученных данных можно сделать следующие выводы
-
Алгоритм в работает достаточно быстро и не требует модернизации (различные «усовершенствования» кода дают только ухудшение результатов)
-
У программы есть узкое место – это вывод на печать данных (Для паскаля удаление вывода на печать увеличило быстродействие в 20 раз (от 48,366 до 1,9175), для Си в 2 раза (от 3,7118 до 1,6833) )
-
Программа на С показывает лучшие результаты по быстродействию по сравнению с программой на Pascalе.
-
Были проведены 3 вида профилирования для С и Pascalя для более точной оценки быстродействия программ. Было проведено профилирование по времени выполнения
всей программы, по частоте вызова строк и по среднему времени на 1 вызов. Все виды профилирования дали приблизительно равнозначные результаты.
-
Программа Turbo Profiler дает не совсем верные результаты. Например 2 одинаковые операции по суммированию двух чисел, стоящие в одном цикле, имеют разную продолжительность (причем разница почти в 20 раз). Это связано с тем, что у Turbo Profiler слишком маленькая точность для современных машин. Так как сбор информации идет о каждой строке, то при различном размещении текста получаются разные результаты времени выполнения программы. Операторы ввода/вывода затеняют вычислительные операции. Но в то же время Turbo Profiler легко освоить.