Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №21.doc
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
1.02 Mб
Скачать

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 */

 

 

 

 

С увеличением количества повторений тела цикла примерно пропорционально увеличивается количество точек контроля, пришедшихся на строку кода. При этом процентное соотношение времен выполнения операторов остается прежним, как и следовало ожидать, потому что логика их выполнения не зависит от числа повторений. Также это свидетельствует о том, что при первом запуске точность профилирования уже была достаточной.