![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
Хочу посчитать количество тактов процессора в 1 ms и далее на этой базе засекать временные интервалы в цикле. (Redrow)
Есть вот такой код: Код:
ms с последнего вызова GetStepTime (в формате float). Всё вроде-бы здорово, но при работе в одном "бесконечном" цикле результаты расходятся со значениями, полученными GetTickCount (сильно расходятся, раза в 1,5) Цикл Redrow: Код:
TaktInMS - значение, полученное функцией GetTimeConst На экран вывожу значения [I_temp_LOC] и [step_time]. Вот собственно и не понимаю, почему между ними такая большая разница и кому больше верить.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
т.е. проблема в том что значения расходятся?
в принципе не надо верить ни тому, ни тому! потому что когда ты вызываешь, к примеру Sleep(1000), то не факт что программа будет спать ровно 1 секунду, ведь в этот промежуток процессор может занять поток с высоким приоритетом и не отпускать его в течении 2-3 секунд. Поэтому в Windows, НЕЛЬЗЯ утверждать что прошла именно 1 секунда. Да и вообще любое измерение времени (вернее задержка) в Windows будет не точно, как и в любой системе с использованием планирования потоков с учётом приоритетов. |
![]() |
![]() |
![]() |
#3 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
Но, что характерно, значения полученные моим GetTimeConst достаточно стабильны для одного и того же процессора (к примеру у меня это примерно 3.500.000 тактов в мс, на полноценном двухядернике ~5.100.000 тактов). К тому же я там считаю среднее арифметическое из 20-ти измерений.
В архиве исходники и *.exe сверху вниз: первое значение - полученное моим GetTimeConst (типа кол-во тактов в мс) второе значение - то, что возвращает rdtsc в eax третье значение - то, что возвращает rdtsc в edx четвёртое значение - засекаемое моим GetStepTime пятое значение - засекаемое GetTickCount
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
![]() |
![]() |
![]() |
#4 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
Вот всё-таки чем хорош ассемблер, виноват всегда САМ.
![]() Нашёл ошибку в функции GetStepTime fidiv [GLOBHIGH_EXT], а надо fidiv[TAKTINMS_EXT]. Сейчас получилось ~11.4 мс/кадр (колышется от 11.3 до 11.4), что примерно и соответствует 85 кадрам в секунду (хотя всё-таки чуть больше). Но зато гораздо стабильнее, нежели значение, получаемое от GetTickCount. Если кому не лень, погоняйте пожалуйста вот этот вариант на разных частотах кадровой развёртки (обязательно со включенной принудительно вертикальной синхронизацией). То что посередине беленьким шрифтом рисуется - это период м/у кадрами (в мс), посчитанный моими функциями. Поидее, если поделить 1000 на это значение, то должна получиться частота вертикальной развёртки. Если кто займётся, напишите мне пожалуйста - чего из этого получилось. Заранее Спасибо.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru Последний раз редактировалось rpy3uH; 05.09.2008 в 20:52. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Есть ли у вас свой сайт? | Delpher | Свободное общение | 43 | 23.05.2009 07:55 |
Свой hint | Altera | Общие вопросы Delphi | 3 | 14.05.2008 15:01 |
Как определить Свой ip адрес! | Marsik | Помощь студентам | 4 | 10.04.2008 20:41 |
Как создать свой формат? | Rahim1993 | Общие вопросы Delphi | 2 | 04.03.2008 17:04 |
Свой натуральный логарифм | RIO | Помощь студентам | 8 | 12.02.2008 01:59 |