Другие языки программирования и технологии

как узнать скорость работы программы

Есть скажем две программы на паскале и на ассемблере, как узнать какая из них бымтрее и на сколько, более точно. Скажем Hello world
Aleksandr Shkrob
Aleksandr Shkrob
3 332
вычисление времени выполнения:
для интеля юзай
http://ru.wikipedia.org/wiki/VTune
реализация от amd
http://ru.wikipedia.org/wiki/CodeAnalyst
==
или же юзай asm втсавку
_asm
{

xor eax,eax

cpuid

rdtsc

mov [count],eax

//код, время выполнения которого меряем

xor eax,eax

cpuid

rdtsc

sub eax,[count]

// в eax - сколько намеряли

}
Алексей Авсиевич
Алексей Авсиевич
3 181
Лучший ответ
Смотря что там у тебя за паскаль и ассемблер.. . Если результирующие аппликухи 16-битные, они под виндозой запускаются на виртуальных машинах, и все, что ты можешь измерять, это время, которое виндоза соизволила этим виртуалкам выделить. Кстати, rdtsc в этом случае тоже не получится.
Если у тебя нормальные 32-64-битные виндозные аппликухи, опять же, встает вопрос приоритетов и текущей нагрузки.. .
В общем, на коротких программах неизбежно получится фигня, надо что-то трудоемкое делать.
RB
Rustem Baytenov
79 737
Антон Штефан На коротких программах можно построить статистику на 1000 случаях.
Или в самой программе встроить цикл на 1000 итераций. Или для надёжности пару миллионов.
посмотри время до обработки и после обработки и отними
Летяга Ххх
Летяга Ххх
95 107
Можно секундомером, как вариант…
Правильнее было бы, после точки входа в программу вызвать функцию - GetTickCount() – она возвращает количество миллисекунд после старта системы, поместить её в начале проги, и вызвать в конце, после вычислить разность… получится время выполнение проги в миллисекундах…

Желательно пока будите тестить проги, не запускайте других процессов, просто погрешность будет сильнее… ну там типа распределение процессорного времени и прочая лабуда выделенным временем на процесс-поток…
ну обычно типа хелловщрд толком не посчитаешь.. . это фактически интерфейс
меряют обычно скорость выполнения алгоритма (при разработке его с точностью до o())
а если в лоб, то можно просто выполнить N итераций алгоритма на одном наборе данных и засечь время, после это время поделить на N и получим с определенной долей вероятности фактичискую скорость выполнения алгоритма (но правда на кнкретной машине)
Для сравнения двух программ подойдет, но опять же, даже соотношения времен работы на разных конфигурациях могут быть немного отличны
Дима Валитов
Дима Валитов
4 573
Засеки секундомером ;)