
- •_________________________
- •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 Граф вызова функций
2.4 Граф вызова функций
Время выполнения 9524
3. Профилирование test_sub.C
3.3 Исследование влияния параметров циклов на точность профилировки
1). 1000*10000 повторений
Address |
Line |
counts |
relative |
Source |
|
1 |
|
|
const unsigned Size = 10000; |
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
void TestLoop(int nTimes) |
01:0020 |
5 |
|
|
{ |
|
6 |
|
|
static int TestDim[Size]; |
|
7 |
|
|
int tmp; |
|
8 |
|
|
int iLoop; |
|
9 |
|
|
|
01:0038 |
10 |
|
|
while (nTimes > 0) |
|
11 |
|
|
{ |
01:003E |
12 |
|
|
nTimes --; |
|
13 |
|
|
|
01:0047 |
14 |
|
|
iLoop = Size; |
01:004E |
15 |
34 |
24,46% |
while (iLoop > 0) |
|
16 |
|
|
{ |
01:0054 |
17 |
14 |
10,07% |
iLoop -- ; |
01:005D |
18 |
14 |
10,07% |
tmp = TestDim[0]; |
01:0066 |
19 |
53 |
38,13% |
TestDim[0] = TestDim[nTimes]; |
01:0076 |
20 |
18 |
12,95% |
TestDim[nTimes] = tmp; |
01:0083 |
21 |
6 |
4,32% |
} |
01:0085 |
22 |
|
|
} |
01:0087 |
23 |
|
|
} /* TestLoop */ |
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
|
|
void main() |
01:00B0 |
27 |
|
|
{ |
01:00C8 |
28 |
|
|
TestLoop(Size / 10); // 100 * 1000 ?®?a®a??© |
|
29 |
|
|
//TestLoop(Size / 5); // 200 * 1000 ?®?a®a??© |
|
30 |
|
|
//TestLoop(Size / 2); // 500 * 1000 ?®?a®a??© |
|
31 |
|
|
//TestLoop(Size / 1); // 1000* 1000 ?®?a®a??© |
01:00D5 |
32 |
|
|
} |
2). 2000*10000 повторений
Address |
Line |
counts |
relative |
Source |
|
1 |
|
|
const unsigned Size = 10000; |
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
void TestLoop(int nTimes) |
01:0020 |
5 |
|
|
{ |
|
6 |
|
|
static int TestDim[Size]; |
|
7 |
|
|
int tmp; |
|
8 |
|
|
int iLoop; |
|
9 |
|
|
|
01:0038 |
10 |
|
|
while (nTimes > 0) |
|
11 |
|
|
{ |
01:003E |
12 |
|
|
nTimes --; |
|
13 |
|
|
|
01:0047 |
14 |
|
|
iLoop = Size; |
01:004E |
15 |
50 |
17,79% |
while (iLoop > 0) |
|
16 |
|
|
{ |
01:0054 |
17 |
28 |
9,96% |
iLoop -- ; |
01:005D |
18 |
27 |
9,61% |
tmp = TestDim[0]; |
01:0066 |
19 |
116 |
41,28% |
TestDim[0] = TestDim[nTimes]; |
01:0076 |
20 |
44 |
15,66% |
TestDim[nTimes] = tmp; |
01:0083 |
21 |
15 |
5,34% |
} |
01:0085 |
22 |
|
|
} |
01:0087 |
23 |
|
|
} /* TestLoop */ |
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
|
|
void main() |
01:00B0 |
27 |
|
|
{ |
|
28 |
|
|
//TestLoop(Size / 10); // 100 * 1000 ?®?a®a??© |
01:00C8 |
29 |
|
|
TestLoop(Size / 5); // 200 * 1000 ?®?a®a??© |
|
30 |
|
|
//TestLoop(Size / 2); // 500 * 1000 ?®?a®a??© |
|
31 |
|
|
//TestLoop(Size / 1); // 1000* 1000 ?®?a®a??© |
01:00D5 |
32 |
|
|
} |
3). 5000*10000 повторений
Address |
Line |
counts |
relative |
Source |
|
1 |
|
|
const unsigned Size = 10000; |
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
void TestLoop(int nTimes) |
01:0020 |
5 |
|
|
{ |
|
6 |
|
|
static int TestDim[Size]; |
|
7 |
|
|
int tmp; |
|
8 |
|
|
int iLoop; |
|
9 |
|
|
|
01:0038 |
10 |
|
|
while (nTimes > 0) |
|
11 |
|
|
{ |
01:003E |
12 |
|
|
nTimes --; |
|
13 |
|
|
|
01:0047 |
14 |
|
|
iLoop = Size; |
01:004E |
15 |
109 |
15,71% |
while (iLoop > 0) |
|
16 |
|
|
{ |
01:0054 |
17 |
67 |
9,65% |
iLoop -- ; |
01:005D |
18 |
73 |
10,52% |
tmp = TestDim[0]; |
01:0066 |
19 |
299 |
43,08% |
TestDim[0] = TestDim[nTimes]; |
01:0076 |
20 |
115 |
16,57% |
TestDim[nTimes] = tmp; |
01:0083 |
21 |
31 |
4,47% |
} |
01:0085 |
22 |
|
|
} |
01:0087 |
23 |
|
|
} /* TestLoop */ |
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
|
|
void main() |
01:00B0 |
27 |
|
|
{ |
|
28 |
|
|
//TestLoop(Size / 10); // 100 * 1000 ?®?a®a??© |
|
29 |
|
|
//TestLoop(Size / 5); // 200 * 1000 ?®?a®a??© |
01:00C8 |
30 |
|
|
TestLoop(Size / 2); // 500 * 1000 ?®?a®a??© |
|
31 |
|
|
//TestLoop(Size / 1); // 1000* 1000 ?®?a®a??© |
01:00D5 |
32 |
|
|
} |
4). 10000*10000 повторений
Address |
Line |
counts |
Clockticks |
Source |
|
1 |
|
|
const unsigned Size = 10000; |
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
void TestLoop(int nTimes) |
01:0020 |
5 |
|
|
{ |
|
6 |
|
|
static int TestDim[Size]; |
|
7 |
|
|
int tmp; |
|
8 |
|
|
int iLoop; |
|
9 |
|
|
|
01:0038 |
10 |
1 |
0,07% |
while (nTimes > 0) |
|
11 |
|
|
{ |
01:003E |
12 |
|
|
nTimes --; |
|
13 |
|
|
|
01:0047 |
14 |
|
|
iLoop = Size; |
01:004E |
15 |
227 |
16,31% |
while (iLoop > 0) |
|
16 |
|
|
{ |
01:0054 |
17 |
162 |
11,64% |
iLoop -- ; |
01:005D |
18 |
140 |
10,06% |
tmp = TestDim[0]; |
01:0066 |
19 |
562 |
40,37% |
TestDim[0] = TestDim[nTimes]; |
01:0076 |
20 |
228 |
16,38% |
TestDim[nTimes] = tmp; |
01:0083 |
21 |
72 |
5,17% |
} |
01:0085 |
22 |
|
|
} |
01:0087 |
23 |
|
|
} /* TestLoop */ |
|
24 |
|
|
|
|
25 |
|
|
|
|
26 |
|
|
void main() |
01:00B0 |
27 |
|
|
{ |
|
28 |
|
|
//TestLoop(Size / 10); // 100 * 1000 ?®?a®a??© |
|
29 |
|
|
//TestLoop(Size / 5); // 200 * 1000 ?®?a®a??© |
|
30 |
|
|
//TestLoop(Size / 2); // 500 * 1000 ?®?a®a??© |
01:00C8 |
31 |
|
|
TestLoop(Size / 1); // 1000* 1000 ?®?a®a??© |
01:00D5 |
32 |
|
|
} |
Сводная таблица для числа точек контроля
|
Size/10 |
Size/5 |
Size/2 |
Size |
while (nTimes > 0) |
|
|
|
1 |
{ |
|
|
|
|
nTimes --; |
|
|
|
|
|
|
|
|
|
iLoop = Size; |
|
|
|
|
while (iLoop > 0) |
34 |
50 |
109 |
227 |
{ |
|
|
|
|
iLoop -- ; |
14 |
28 |
67 |
162 |
tmp = TestDim[0]; |
14 |
27 |
73 |
140 |
TestDim[0] = TestDim[nTimes]; |
53 |
116 |
299 |
562 |
TestDim[nTimes] = tmp; |
18 |
44 |
115 |
228 |
} |
6 |
15 |
31 |
72 |
} |
|
|
|
|
} /* TestLoop */ |
|
|
|
|
Сводная таблица для времени выполнения
|
Size/10 |
Size/5 |
Size/2 |
Size |
while (nTimes > 0) |
|
|
|
0,07% |
{ |
|
|
|
|
nTimes --; |
|
|
|
|
|
|
|
|
|
iLoop = Size; |
|
|
|
|
while (iLoop > 0) |
24,46% |
15,71% |
15,71% |
16,31% |
{ |
|
|
|
|
iLoop -- ; |
10,07% |
9,65% |
9,65% |
11,64% |
tmp = TestDim[0]; |
10,07% |
10,52% |
10,52% |
10,06% |
TestDim[0] = TestDim[nTimes]; |
38,13% |
43,08% |
43,08% |
40,37% |
TestDim[nTimes] = tmp; |
12,95% |
16,57% |
16,57% |
16,38% |
} |
4,32% |
4,47% |
4,47% |
5,17% |
} |
|
|
|
|
} /* TestLoop */ |
|
|
|
|
С увеличением количества повторений тела цикла примерно пропорционально увеличивается количество точек контроля, пришедшихся на строку кода. При этом процентное соотношение времен выполнения операторов остается прежним, как и следовало ожидать, потому что логика их выполнения не зависит от числа повторений. Также это свидетельствует о том, что при первом запуске точность профилирования уже была достаточной.