Подсчет циклов для нано-сна с использованием RDTSC

Я пытаюсь увидеть, сколько циклов занимает 1 наносекунда на моем ноутбуке.

Конфигурация ноутбука:

  1. Процессор: Intel Centrino Duo 2,0 ГГц ( T7200)
  2. Память: 2 ГБ

Ниже приведены показатели:

  1. 1 секунда занимает: 1995198000 (что близко к 2 миллиардам тиков, что нормально)
  2. 1 миллисекунда: 2 159 460 (около 2 миллионов, что нормально)
  3. 1 микросекунда: 507 408 (почему?)
  4. 1 нано секунда: 139 000 (почему?)

До 1 микросекунд тики соответствуют частоте. Однако, ниже этого, это не так. Кроме того, я могу различать 100 нсек и 200 нсек, используя достоверное количество циклов, не ниже этого.

Настройка для измерения:

  1. Процесс измерения привязан к одному процессору.
  2. Приоритет процесса установлен наивысшим.
  3. Процессор настроен на постоянную работу на максимальной частоте.

Кто-нибудь может объяснить причину? Это из-за того, что сон (я использую nanosleep) реализован таким образом.?

2 ответа

Самое близкое, что вы получите, используя аппаратное обеспечение ПК, - это использование статистического анализа более длительных периодов времени. Измерение времени с помощью RDTSC: анализ теста ZeroMQ занимает больше наносекунды

Из спецификации наноспала:

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

Другие вопросы по тегам