2010-02-26 2 views
9
Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution); 
    Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency); 

Результат: (! С 2005 года)Почему мой секундомер. Частота низкая?

Timer is high-resolution: True 
    Timer frequency: 2597705 

This статье упоминается Частота 3579545, на миллион больше, чем у меня. This В блоге упоминается частота 3 325 040 000, что является безумным.

Почему моя частота значительно ниже? Я нахожусь на машине i7 920, так что не должно быть быстрее?

+1

Это ноутбук? Часто частота тактовой частоты машины масштабируется в зависимости от состояния батареи/мощности. – Nick

+0

Это рабочий стол. У меня настройки мощности установлены в режим высокой производительности; тактовая частота процессора по умолчанию (2,66 ГГц). –

ответ

22

3,579,545 - это магическое число , Это частота в Hertz, прежде чем делить ее на 3 и подавать в микросхему таймера 8053 в оригинальном IBM PC. Нечетный номер был выбран случайно, это частота color burst signal в системе NTSC TV, используемой в США и Японии. Инженеры IBM искали дешевый кристалл для создания осциллятора, ничто не было дешевле, чем тот, который используется в каждом телевизоре.

Как только клоны IBM стали широко доступными, для их дизайнеров по-прежнему важно выбирать одну и ту же частоту. Многие программы MS-DOS полагались на таймер, тикающий с такой скоростью. Прямое обращение к чипу было обычным преступлением.

Это изменилось после появления Windows. Версия Windows 2 была первой, которая виртуализировала таймер-чип. Другими словами, программному обеспечению не разрешалось напрямую обращаться к таймерному чипу. Процессор был настроен для работы в защищенном режиме и перехватил попытку использовать инструкцию ввода-вывода. Вместо этого запускается код ядра, позволяющий подделать возвращаемое значение инструкции. Теперь было возможно иметь несколько программ, используя таймер без их наступления на пальцы друг друга. Важным первым шагом для устранения зависимости от того, как аппаратное обеспечение фактически реализовано.

Win32 API (Windows NT 3.1 и Windows 95) формализовал доступ к таймеру с API, QueryPerformanceCounter() и QueryPerformanceFrequency(). Компонент уровня ядра, уровень адаптации оборудования, позволяет BIOS передавать эту частоту. Теперь разработчикам аппаратных средств удалось действительно снизить зависимость от точной частоты. Это заняло много времени, примерно в 2000 году подавляющее большинство машин по-прежнему имели прежний уровень.

Но нескончаемый квест, чтобы сократить расходы в дизайне ПК, положил конец этому.В настоящее время разработчик аппаратного обеспечения просто выбирает любую частоту, которая, как оказалось, легко доступна в наборе микросхем. 3,325,040,000 будет таким числом, это, скорее всего, тактовая частота процессора. Такие высокие частоты распространены в дешевых дизайнах, особенно те, у которых есть ядро ​​AMD. Ваш номер довольно необычный, некоторые шансы на то, что ваша машина не дешевая. И что таймер намного более точен, часы процессора имеют типичные допуски электронных компонентов.

+0

nobugz, спасибо за подробный ответ. Не могли бы вы расширить свой последний абзац? Мне кажется, что более высокая частота даст повышенную точность: с частотой таймера. 3,3 тыс., я на 0,3-наносекундном разрешении, тогда как с моей частотой, я нахожусь в 385 нс. –

+3

Ну, у вас гораздо меньше разрешения. Но ваш таймер, вероятно, намного точнее. Тактовая частота процессора 3,3 ГГц, как правило, только точна на 10%. Я не знаю, факт, это зависит от того, как генерируется сигнал. Все, что работает на одном мегагерце или лучше, достаточно хорош для программного обеспечения для синхронизации, дрожание из-за потоковой передачи намного хуже. –

+0

@SamPearson Итак, возможно, парень со второго поста, с 3,325,040,000 тиков в секунду, установил «Stopwatch.IsHighResolution» в False, так как его система использовала «часы» процессора напрямую, что привело к ± 10% точности в соответствии с Гансом. Если это то, что подразумевается под «IsHighResolution», я считаю, что выбор термина «разрешение» является неудачным, так как отчетность 3,325,040,000 отсчетов в секунду является более высоким «разрешением», чем 2 597 705 отсчетов в секунду. Разрешение - это нечто иное, чем точность или неопределенность. –

6

Частота зависит от HAL (уровень абстракции оборудования). Вернувшись в пентийные дни, было обычным использовать тик процессора (который был основан на тактовой частоте процессора), поэтому у вас были действительно высокочастотные таймеры.

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

1

Секундомер. Частота в секунду, поэтому ваша частота 2597 705 означает, что у вас более 2,5 миллионов тиков в секунду. Насколько точно вам нужна точность?

Что касается вариаций частоты, это аппаратно-зависимая вещь. Некоторые из наиболее распространенных различий в оборудовании - это количество ядер, частота каждого ядра, текущее состояние мощности вашего процессора (или ядер), независимо от того, включена ли вы для динамической настройки частоты процессора и т. Д. Ваша частота не будет всегда будет одинаковым, и в зависимости от того, в каком состоянии ваш процессор находится, когда вы его проверяете, он может быть ниже или выше, но, как правило, примерно одинаковый (для вас, вероятно, около 2,5 миллиона.)

1

Я думаю, что 2,597,705 = ваша частота процессора. Майне - 2737822. i7 930

+2

Вряд ли. В настоящее время 2,6 МГц будет довольно медленной частотой процессора;) –

+0

Yeap, вы правы! Простите за это. Парень сделал что-то не так. Я думаю, что секундомер не работает очень хорошо в режиме отладки. – Pedro77

+0

:). Секундомер и отладка ... так много статей, на которые я хотел бы обратить внимание ... это сводится к тому, что -> измерение производительности ** очень сложно. Просто для удовольствия: Моя частота: 3,320,390, I7 2600k. – Noctis