Подсчет циклов для нано-сна с использованием RDTSC
Я пытаюсь увидеть, сколько циклов занимает 1 наносекунда на моем ноутбуке.
Конфигурация ноутбука:
- Процессор: Intel Centrino Duo 2,0 ГГц ( T7200)
- Память: 2 ГБ
Ниже приведены показатели:
- 1 секунда занимает: 1995198000 (что близко к 2 миллиардам тиков, что нормально)
- 1 миллисекунда: 2 159 460 (около 2 миллионов, что нормально)
- 1 микросекунда: 507 408 (почему?)
- 1 нано секунда: 139 000 (почему?)
До 1 микросекунд тики соответствуют частоте. Однако, ниже этого, это не так. Кроме того, я могу различать 100 нсек и 200 нсек, используя достоверное количество циклов, не ниже этого.
Настройка для измерения:
- Процесс измерения привязан к одному процессору.
- Приоритет процесса установлен наивысшим.
- Процессор настроен на постоянную работу на максимальной частоте.
Кто-нибудь может объяснить причину? Это из-за того, что сон (я использую nanosleep) реализован таким образом.?
2 ответа
Самое близкое, что вы получите, используя аппаратное обеспечение ПК, - это использование статистического анализа более длительных периодов времени. Измерение времени с помощью RDTSC: анализ теста ZeroMQ занимает больше наносекунды
Время приостановки может быть больше, чем запрошено, потому что значение аргумента округлено до целого числа, кратного разрешению ожидания, или из-за планирования другой активности системой.