Yuri Nefedov, Tue, Apr 08, 2003 14:58:48 +0200:
> > Я тут оптимизировал свою программу: получил выход gprof, переписал две
> > верхних функции и снова получил выход. Проблема в том, что они как
> > занимали почти 5% по времени так и занимают. Хотя после оптимизации
> > функция synt::SyntTokensSpliter::Clear()
> > _состоит_в_обнулении_3-х_счетчиков_ и в принципе не может занимать 2.03%
> > по времени от 441 секунды, т.е. почти 9 секунд.
> >
> > Правда общее время работы сократилось с 457.57 до 441.09 сек., но почему
> > эти функции наверху?
> > В чем может быть проблема?
> >
>  Подробнее смотрите: http://www.opennet.ru/docs/RUS/gprof/
>  раздел: Статистические неточности в выводе gprof
> 

правда-правда.

Если есть _однопроцессорный_пентиум_, можешь сравнить производительность
своей функции (до и после) через rdtsc:

#define rdtscll(val) \
     __asm__ __volatile__("rdtsc" : "=A" (val))

использовать так:

unsigned long long tsc1, tsc2;
rdtscll(tsc1);
...
rdtscll(tsc2);
printf("%Lu\n", tsc2 - tsc1);

Намного точнее (если сравнивать на одном и том же компе).
Больше эта штука ни на что не годится, к сожалению
(это количество процессорных циклов).


Ответить