--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Как измерить время выполнения процедуры?

5
13
С друзьями на NN.RU
В социальных сетях
Поделиться
mikl
11.11.2003
Сабж, в Delphi 5.0 или выше? В общих чератх понятно как - береться системное время перед началом исполения и после исполнеия, разница значений - искомая величина... НО! На практике не работает :-(( Поскольку процедура не сложная, на исполнение уходят доли секунды. И хотя прописано, что время должно выводиться с точностью до милисекунд, начальное и конечное значения выводятся равными. Если несложно, пример кода или ссылку, а? Сдавать в пятницу, а еще полдела не сделано из за этой заморочки с измерением...
Dushevno
11.11.2003
ае сли чуть-чуть подумать ? например:
процедуру запустить в цикле N-ное кол-во раз а потом интервал времени разделить на N ? (например N=1000000)
mikl
11.11.2003
идейно, но... Может я неправильно объяснил? Выводиться время начала процедуры и время ее окончаия, с точностью до милисекунд, и эти значения равны... Вот в чем вся засада!!! Не может же быть такого, чтобы на исполнение процедуры время вообще не затрачивалось, или затрачивалось, но менее 1 мсек? Нужен непостредственный пример, как организовать измерение времени... рабочий код. Может мы вообще не правильно меряем :-((
Dushevno
11.11.2003
mikl писал(а)
-------------------------
Не может же быть такого, чтобы на исполнение процедуры время вообще не затрачивалось, или затрачивалось, но менее 1 мсек?

может ! Все зависит от процедуры

я на дельфях не писал, так объясняю концептуально

1. записать в переменную А системное время
2. запустить в цикле твою процедуру, ну скажем, 1000000 раз
3. в переменную В записать системное время
4. вывести (В-А)/1000000

Заметь - можно записывать системное время джаже с точностью до секунды, а не до миллисекунды и получать точный результат - все зависит от числа запусканий процедуры - если миллион запусков пролетят слишком быстро, можно взять 1 000 000 000 , 1 000 000 000 000 и т.д. ...

Удачи.
Negoro
11.11.2003
при наличии кэшей подход это некорректный... пример - пентиум с выключенными кэшами ведёт себя примерно как 386..
Этот алгоритм измерения может дать время в десятки раз ниже, чем в реальности - в многозадачной среде с некэшированными данными и сегментом кода... так что профайлер нужен... или будильники какие пользовать - в процессоре или ртц..
mikl
11.11.2003
это все конечно умно очень, и может быть даже правильно, НО... прога - елиментарная, и всеми этими заморочками можно пренебречь, т.к. имеет значение лишь практическое исполнение счетчика времени. Главное чтобы он был и работал... как - не сильно критично. Фишка в том, что сейчас он не работает совсем :-((
Negoro
11.11.2003
Системное время тикает с темпом порядка 19 мс.. хм.. или как-то так примерно.. поэтому если тебе надо дискрет 1 мс - надо использовать таймер RTC. Позволит ли тебе билдер и виндус этим заниматься - программировать таймер на 1 кГц и считывать оттуда время - я не знаю.. Попробуй в Билдере поискать RTC - может что и найдёшь. Кроме того, во всех современных процессорах тоже есть таймеры подобные - они считают натурально клоки процессора - но как с ними работать я тоже не знаю:-)))
sergey101bin
11.11.2003
__asm{rdtsc} спасет.
считает клоки проца
Более подробно поищи доку на инструкцию в инете
sergey101bin
11.11.2003
Вообще, предложенный подход к решению поставленной задачи - неправильный. Как будешь учитывать многозадачность?

Тебе профайлер нужен. Им и измеряй. Есть он в дельфи?
mikl
11.11.2003
>Тебе профайлер нужен. Им и измеряй. Есть он в дельфи?
шо за зверь?
Это все померит и подскажет, как лучше оптимизировать
Intel VTune, описание и пробник на 30 дней см. www.intel.com/software/products
Denarius
11.11.2003
WinAPI QueryPerformanceCounter()
или
Rational Quantify
Попробуй:

var IniTime, ElapsedTime: DWord;
begin
IniTime := GetTickCount;

// Твоя процедура

ElapsedTime := GetTickCount - IniTime;
// Далее смотришь ElapsedTime (мс)
end;
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.

Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.