- •_________________________
- •1. Профилирование prost0.Exe
- •1.1. Отчет по модулям
- •1.2. Отчет по процессам
- •1.3. Представление результатов в исходном коде
- •1.4. Граф вызова функций
- •2. Профилирование test_cyc.C
- •2.1. Отчет по процессам
- •2.2. Отчет по модулям
- •2.3. Представление результатов в исходном коде
- •2.4 Граф вызова функций
- •3. Профилирование test_sub.C
- •3.3 Исследование влияния параметров циклов на точность профилировки
- •4. Профилирование программы из лабораторной работы 1
- •4.1. Отчет по модулям
- •4.2. Отчет по процессам
- •4.3. Представление результатов в исходном коде
- •4.4 Граф вызова функций
1.4. Граф вызова функций
Время выполнения модуля prost0.exe 296112
2. Профилирование test_cyc.C
2.1. Отчет по процессам
2.2. Отчет по модулям
Модуль test_cyc.exeзанимает около 45% времени ЦП.
Process |
Module |
CPU% |
Samples |
PID |
32-bit |
16-bit |
V8086 |
test_cyc.exe |
test_cyc.exe |
44,5 |
255 |
532 |
255 |
0 |
0 |
test_cyc.exe |
ntoskrnl.exe |
2,3 |
13 |
532 |
13 |
0 |
0 |
test_cyc.exe |
hal.dll |
0,7 |
4 |
532 |
4 |
0 |
0 |
test_cyc.exe |
LTSMT.sys |
0,7 |
4 |
532 |
4 |
0 |
0 |
test_cyc.exe |
win32k.sys |
0,3 |
2 |
532 |
2 |
0 |
0 |
test_cyc.exe |
SYMEVENT.SYS |
0,2 |
1 |
532 |
1 |
0 |
0 |
test_cyc.exe |
stmatm.sys |
0,2 |
1 |
532 |
1 |
0 |
0 |
2.3. Представление результатов в исходном коде
Address |
Line |
counts |
absolute |
relative |
Source |
|
1 |
|
|
|
#define Size 1000000 |
|
2 |
|
|
|
int i, tmp, dim[Size]; |
|
3 |
|
|
|
|
|
4 |
|
|
|
void main() |
01:0010 |
5 |
|
|
|
{ |
01:0013 |
6 |
5 |
0,87% |
1,96% |
for(i=0;i<Size/10;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:006B |
7 |
10 |
1,75% |
3,92% |
for(i=0;i<Size/5;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:00C3 |
8 |
27 |
4,71% |
10,59% |
for(i=0;i<Size/2;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:011B |
9 |
44 |
7,68% |
17,25% |
for(i=0;i<Size;i++) { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:0173 |
10 |
2 |
0,35% |
0,78% |
for(i=0;i<Size/10;i++) |
01:0198 |
11 |
3 |
0,52% |
1,18% |
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:01CB |
12 |
|
|
|
for(i=0;i<Size/5;i++) |
01:01F0 |
13 |
9 |
1,57% |
3,53% |
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:0223 |
14 |
1 |
0,17% |
0,39% |
for(i=0;i<Size/2;i++) |
01:0248 |
15 |
21 |
3,66% |
8,24% |
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:027B |
16 |
10 |
1,75% |
3,92% |
for(i=0;i<Size;i++) |
01:02A0 |
17 |
36 |
6,28% |
14,12% |
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; }; |
01:02D3 |
18 |
|
|
|
for(i=0;i<Size/10;i++) |
01:02F8 |
19 |
|
|
|
{ tmp=dim[0]; |
01:0304 |
20 |
3 |
0,52% |
1,18% |
dim[0]=dim[i]; |
01:0316 |
21 |
2 |
0,35% |
0,78% |
dim[i]=tmp; |
01:0329 |
22 |
|
|
|
}; |
01:032B |
23 |
2 |
0,35% |
0,78% |
for(i=0;i<Size/5;i++) |
01:0350 |
24 |
|
|
|
{ tmp=dim[0]; |
01:035C |
25 |
5 |
0,87% |
1,96% |
dim[0]=dim[i]; |
01:036E |
26 |
3 |
0,52% |
1,18% |
dim[i]=tmp; |
01:0381 |
27 |
|
|
|
}; |
01:0383 |
28 |
3 |
0,52% |
1,18% |
for(i=0;i<Size/2;i++) |
01:03A8 |
29 |
|
|
|
{ tmp=dim[0]; |
01:03B4 |
30 |
21 |
3,66% |
8,24% |
dim[0]=dim[i]; |
01:03C6 |
31 |
1 |
0,17% |
0,39% |
dim[i]=tmp; |
01:03D9 |
32 |
|
|
|
}; |
01:03DB |
33 |
7 |
1,22% |
2,75% |
for(i=0;i<Size;i++) |
01:0400 |
34 |
1 |
0,17% |
0,39% |
{ tmp=dim[0]; |
01:040C |
35 |
35 |
6,11% |
13,73% |
dim[0]=dim[i]; |
01:041E |
36 |
2 |
0,35% |
0,78% |
dim[i]=tmp; |
01:0431 |
37 |
2 |
0,35% |
0,78% |
}; |
01:0433 |
38 |
|
|
|
} |
Сравним времена выполнения циклов, полученные после профилирования разных форм записи циклов в тексте программы.
|
1 |
2 |
3 |
Size/10 |
1,96 |
1,96 |
1,96 |
Size/5 |
3,92 |
3,53 |
3,92 |
Size/2 |
10,59 |
8,63 |
9,81 |
Size |
17,25 |
18,04 |
18,43 |
Количество точек контроля, приходящихся на один цикл, напрямую зависит от количества итераций этого цикла. При этом их распределение не зависит от форматирования: для циклов, записанных тремя способами, получаем примерно одинаковые времена выполнения.