Почему мой Секундомер. Частота настолько низко?

  Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution);
  Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency);

Результат:

  Timer is high-resolution: True
  Timer frequency: 2597705

Эта статья (с 2005!) упоминает Частоту 3579545, еще миллион, чем мой. Это сообщение в блоге упоминает Частоту 3,325,040,000, который безумен.

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

11
задан xofz 26 February 2010 в 23:55
поделиться

3 ответа

3,579,545 - это магическое число. Это частота в герцах до деления ее на 3 и передачи ее в микросхему таймера 8053 в оригинальном IBM PC. Странное число было выбрано не случайно, это частота сигнала цветовой синхронизации в телевизионной системе NTSC, используемой в США и Японии. Инженеры 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. Ваш номер довольно необычный, есть вероятность, что ваша машина была не из дешевых. И что таймер намного точнее, тактовые частоты процессора имеют типичные допуски электронных компонентов.

25
ответ дан 3 December 2019 в 02:10
поделиться

Значение Stopwatch.Frequency задается в секунду, поэтому ваша частота 2 597 705 означает, что у вас более 2,5 миллионов тактов в секунду. Какая именно точность вам нужна?

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

1
ответ дан 3 December 2019 в 02:10
поделиться

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

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

7
ответ дан 3 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: