C2H5OH
AutoIT Гуру
- Сообщения
- 1,473
- Репутация
- 333
Бухгалтер Вася озабочен вопросом быстродействия своих скриптов. Вася решил заняться проблемой всерьёз и разработать метод измерения времени выполнения различных участков скрипта. Поскольку Вася - бухгалтер, а у бухгалтера должно быть всё точно, то Вася хочет измерять время в тактах процессора, то есть Вася хочет точно посчитать сколько тактов процессора прошло между началом измерений и концом измерений.
Васин старый корешь работает системным программистом. Во время последней пьянки Вася поделился с ним своими мыслями и тот расказал Васе умную вещь.
То есть Вася может теперь спокойно посчитать количество тактов процессора, за которое выполнится его функция.
И всё бы хорошо, но 16-битного счетчика хватит для измерения всего лишь 65535 тактов (для процессора с 2 ГГц это всего лишь 65,5 микросекунд)
Помоги Васе разработать алгоритм измерения периодов времени длинной в несколько часов.
Васин старый корешь работает системным программистом. Во время последней пьянки Вася поделился с ним своими мыслями и тот расказал Васе умную вещь.
За две бутылки пива Васин корешь даже написал dll-ку и соответственно библиотеку AutuIt с двумя функциямиНа системной плате находится микросхема системного таймера. У этой микросхемы есть три 16-битных счётчика, один из режимов работы которых следующий.
В счётчики загружаются некоторые числа N1, N2 и N3.
За каждый такт процессора значение счётчиков уменьшается на 1.
По достижении нуля каждый счётчик проводит автозагрузку начального значения Nx.
...
В какой-то момент времени можно прочитать текущие значения всех счётчиков.
Код:
SystemTimersInit(N1,N2,N3)
; загружает в счётчики таймеров значения
; N1 - значение для автозагрузки первого таймера
; N2 - значение для автозагрузки второго таймера
; N3 - значение для автозагрузки третьего таймера
; и даёт старт началу отсчета
SystemTimersRead()
; возвращает массив из трёх элементов
; [n1,n2,n3]
; n1 - текущее значение первого таймера
; n2 - текущее значение второго таймера
; n3 - текущее значение третьего таймера
То есть Вася может теперь спокойно посчитать количество тактов процессора, за которое выполнится его функция.
Код:
SystemTimersInit(N1,N2,N3)
myfunc()
$N_array = SystemTimersRead()
И всё бы хорошо, но 16-битного счетчика хватит для измерения всего лишь 65535 тактов (для процессора с 2 ГГц это всего лишь 65,5 микросекунд)
Помоги Васе разработать алгоритм измерения периодов времени длинной в несколько часов.