Пособие по практике программирования

       

В приводимой далее таблице показан





В приводимой далее таблице показан профиль, сгенерированный рабочей версией спам-фильтра, которую мы создали специально для того, чтобы разобраться в его поведении. В ней используется фиксированное сообщение и фиксированный набор из 217 фраз, который сравнивается с сообщением 10 000 раз. Запуск производился на машине MIPS R10000 250 MHz; использовалась изначальная версия st rst r — с вызовами других стандартных функций. Результаты были переформатированы для более удачного размещения на странице. Обратите внимание на то, что размер ввода (217 фраз) и количество запусков (10 000) можно использовать для проверки правильности работы — эти числа появляются в колонке "calls" (вызовы), в которой показано количество вызовов каждой функции.
12234768552: Total number of instructions executed
13961810001: Total computed cycles
55.847: Total computed execution time (sees.)
1.141: Average cycles / instruction



secs % cum% cycles instructions calls function
45.260 81.0 81.0 11314990000 9440110000 48350000 strchr
6.081 10.9 91.9 1520280000 1566460000 46180000 strncmp
2.592 4.6 96.6 648080000 854500000 2170000 strstr
1.825 3.3 99.8 456225559 344882213 2170435 strlen
0.088 0.2 100.0 21950000 28510000 10000 isspam
0.000 0.0 100.0 100025 100028 1 main
0.000 0.0 100.0 53677 70268 219 memccpy
0.000 0.0 100.0 48888 46403 217 memcmp
0.000 0.0 100.0 17989 19894 219 isspam
0.000 0.0 100.0 16798 17547 230 strlen
0.000 0.0 100.0 10305 10900 204 realfree
0.000 0.0 100.0 6293 7161 217 estrdup
0.000 0.0 100.0 6032 8575 231 cleanfree
0.000 0.0 100.0 5932 5729 1 readpat
0.000 0.0 100.0 5899 6339 219 getline
0.000 0.0 100.0 5500 5720 220 malloc

Очевидно, что в затратах времени доминируют две функции: strchr и strncmp, причем обе вызываются из strstr. Итак, Кнут ориентирует нас правильно: небольшая часть программы поглощает большую часть времени ее исполнения.

Содержание раздела