- •Постановка задачи
- •Выполнение работы
- •Профилирование программы porost0.C
- •Профилирование программы test_cyc.C
- •Профилирование программы test_sub.C
- •1000*1000 Повторений
- •2000*1000 Повторений
- •5000*1000 Повторений
- •10000*1000 Повторений
- •Профилирование программы QuickSort.Cpp
- •Профилирование программы QuickSort.Pas
5000*1000 Повторений
Address |
Line |
Source |
Clockticks (EBS) |
Timer (TBS) |
|
1 |
const unsigned Size = 10000; |
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
void TestLoop(int nTimes) |
|
|
0x1000 |
5 |
{ |
|
|
|
6 |
static int TestDim[Size]; |
|
|
|
7 |
int tmp; |
|
|
|
8 |
int iLoop; |
|
|
|
9 |
|
|
|
0x101E |
10 |
while (nTimes > 0) |
|
|
|
11 |
{ |
|
|
0x1024 |
12 |
nTimes --; |
|
|
|
13 |
|
|
|
0x102D |
14 |
iLoop = Size; |
|
|
0x1034 |
15 |
while (iLoop > 0) |
134 |
61 |
|
16 |
{ |
|
|
0x103A |
17 |
iLoop -- ; |
93 |
35 |
0x1043 |
18 |
tmp = TestDim[0]; |
100 |
35 |
0x104B |
19 |
TestDim[0] = TestDim[nTimes]; |
205 |
86 |
0x105B |
20 |
TestDim[nTimes] = tmp; |
173 |
72 |
0x1068 |
21 |
} |
74 |
34 |
0x106A |
22 |
} |
|
|
0x106C |
23 |
} /* TestLoop */ |
|
|
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
void main() |
|
|
0x1080 |
27 |
{ |
|
|
|
28 |
//TestLoop(Size / 10); // 1000 * 1000 Ї®ўв®аҐЁ© |
|
|
|
29 |
//TestLoop(Size / 5); // 2000 * 1000 Ї®ўв®аҐЁ© |
|
|
0x109E |
30 |
TestLoop(Size / 2); // 5000 * 1000 Ї®ўв®аҐЁ© |
|
|
|
31 |
//TestLoop(Size / 1); // 10000* 1000 Ї®ўв®аҐЁ© |
|
|
0x10AB |
32 |
} |
|
|
10000*1000 Повторений
Address |
Line |
Source |
Clockticks (EBS) |
Timer (TBS) |
|
1 |
const unsigned Size = 10000; |
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
void TestLoop(int nTimes) |
|
|
0x1000 |
5 |
{ |
|
|
|
6 |
static int TestDim[Size]; |
|
|
|
7 |
int tmp; |
|
|
|
8 |
int iLoop; |
|
|
|
9 |
|
|
|
0x101E |
10 |
while (nTimes > 0) |
|
|
|
11 |
{ |
|
|
0x1024 |
12 |
nTimes --; |
|
|
|
13 |
|
|
|
0x102D |
14 |
iLoop = Size; |
|
|
0x1034 |
15 |
while (iLoop > 0) |
321 |
124 |
|
16 |
{ |
|
|
0x103A |
17 |
iLoop -- ; |
159 |
80 |
0x1043 |
18 |
tmp = TestDim[0]; |
172 |
60 |
0x104B |
19 |
TestDim[0] = TestDim[nTimes]; |
454 |
183 |
0x105B |
20 |
TestDim[nTimes] = tmp; |
300 |
136 |
0x1068 |
21 |
} |
145 |
60 |
0x106A |
22 |
} |
|
|
0x106C |
23 |
} /* TestLoop */ |
|
|
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
void main() |
|
|
0x1080 |
27 |
{ |
|
|
|
28 |
//TestLoop(Size / 10); // 1000 * 1000 Ї®ўв®аҐЁ© |
|
|
|
29 |
//TestLoop(Size / 5); // 2000 * 1000 Ї®ўв®аҐЁ© |
|
|
|
30 |
//TestLoop(Size / 2); // 5000 * 1000 Ї®ўв®аҐЁ© |
|
|
0x109E |
31 |
TestLoop(Size / 1); // 10000* 1000 Ї®ўв®аҐЁ© |
|
|
0x10AB |
32 |
} |
|
|
Сводная таблица по EBS
Address |
Line |
Source |
Size/10 |
Size/5 |
Size/2 |
Size/1 |
0x1034 |
15 |
while (iLoop > 0) |
30 |
55 |
134 |
321 |
|
16 |
{ |
|
|
|
|
0x103A |
17 |
iLoop -- ; |
25 |
44 |
93 |
159 |
0x1043 |
18 |
tmp = TestDim[0]; |
16 |
38 |
100 |
172 |
0x104B |
19 |
TestDim[0] = TestDim[nTimes]; |
36 |
85 |
205 |
454 |
0x105B |
20 |
TestDim[nTimes] = tmp; |
27 |
59 |
173 |
300 |
0x1068 |
21 |
} |
19 |
29 |
74 |
145 |
Сводная таблица по TBS
Address |
Line |
Source |
Size/10 |
Size/5 |
Size/2 |
Size/1 |
0x1034 |
15 |
while (iLoop > 0) |
20 |
29 |
61 |
124 |
|
16 |
{ |
|
|
|
|
0x103A |
17 |
iLoop -- ; |
12 |
14 |
35 |
80 |
0x1043 |
18 |
tmp = TestDim[0]; |
17 |
9 |
35 |
60 |
0x104B |
19 |
TestDim[0] = TestDim[nTimes]; |
36 |
39 |
86 |
183 |
0x105B |
20 |
TestDim[nTimes] = tmp; |
16 |
28 |
72 |
136 |
0x1068 |
21 |
} |
16 |
10 |
34 |
60 |
С увеличением количества повторений тела цикла примерно пропорционально увеличивается количество точек контроля, пришедшихся на строку кода. При этом процентное соотношение времен выполнения операторов остается прежним, как и следовало ожидать, потому что логика их выполнения не зависит от числа повторений. Также это свидетельствует о том, что при первом запуске точность профилирования уже была достаточной.