- •Министерство образования
- •Выполнение работы
- •Профилирование программы prost0.C
- •Tbs (Time Based Sampling)1
- •Ebs (Event Based Sampling)
- •Профилирование программы test_cyc.C tbs (Time Based Sampling)
- •Профилирование программы test_sub.C tbs (Time Based Sampling)
- •Ebs (Event Based Sampling)
- •Профилирование программы sort.C tbs (Time Based Sampling)
- •Ebs (Event Based Sampling)
- •Профилирование программы sort.Pas tbs (Time Based Sampling)
- •Ebs (Event Based Sampling)
Ebs (Event Based Sampling)
Address Line Clockticks Source
6 main()
01:0010 7 {
8 int j;
9 " int lastprime, curprime;"
10
01:0028 11 primes[0] = 2;
01:0032 12 primes[1] = 3;
01:003C 13 lastprime = 1;
01:0043 14 curprime = 3;
15
01:004A 16 1 " printf("prime %d = %d\n", 0, primes[0]);"
01:005F 17 1 " printf("prime %d = %d\n", 1, primes[1]);"
18
01:0075 19 while(curprime < MAXPRIMES)
20 {
01:007E 21 11 for(j = 0; j <= lastprime; j++)
01:0098 22 28 if((curprime % primes[j]) == 0)
23 {
01:00AA 24 1 curprime += 2;
25
01:00B3 26 break;
27 }
01:00B5 28 4 if(j <= lastprime)
01:00BF 29 continue;
01:00C1 30 lastprime++;
01:00CA 31 13 " printf("prime %d = %d\n", lastprime, curprime);"
01:00DF 32 3 primes[lastprime] = curprime;
01:00EC 33 1 curprime += 2;
01:00F5 34 }
01:00FA 35 }
36
Как видно из результатов профилирования, событийное профилирование дает результаты намного точнее, чем профилирование по времени. Можно сказать, что наибольшее время занимают операции вывода, сравнения, обращения к элементу массива.
Профилирование программы test_cyc.C tbs (Time Based Sampling)
Address Line Clockticks Source
1 #define Size 1000000
2 " int i, tmp, dim[Size];"
3
4 void main()
01:0010 5 {
01:0028 6 1 for(i=0;i<Size/10;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:0080 7 2 for(i=0;i<Size/5;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:00D8 8 4 for(i=0;i<Size/2;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:0130 9 8 for(i=0;i<Size;i++) { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:0188 10 for(i=0;i<Size/10;i++)
01:01AD 11 1 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:01E0 12 for(i=0;i<Size/5;i++)
01:0205 13 1 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:0238 14 1 for(i=0;i<Size/2;i++)
01:025D 15 3 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:0290 16 2 for(i=0;i<Size;i++)
01:02B5 17 5 { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
01:02E8 18 1 for(i=0;i<Size/10;i++)
01:030D 19 { tmp=dim[0];
01:0319 20 dim[0]=dim[i];
01:032B 21 dim[i]=tmp;
01:033E 22 };
01:0340 23 for(i=0;i<Size/5;i++)
01:0365 24 { tmp=dim[0];
01:0371 25 1 dim[0]=dim[i];
01:0383 26 dim[i]=tmp;
01:0396 27 };
01:0398 28 2 for(i=0;i<Size/2;i++)
01:03BD 29 1 { tmp=dim[0];
01:03C9 30 dim[0]=dim[i];
01:03DB 31 dim[i]=tmp;
01:03EE 32 1 };
01:03F0 33 for(i=0;i<Size;i++)
01:0415 34 1 { tmp=dim[0];
01:0421 35 3 dim[0]=dim[i];
01:0433 36 2 dim[i]=tmp;
01:0446 37 2 };
01:0448 38 }
Как и следовало ожидать, существует прямо пропорциональная зависимость между временем выполнения цикла и числом повторений цикла. Также из результатов видно, что порядок и способ записи операторов не влияет на скорость выполнения программы.