ClockCycles()

Получить текущее значение счетчика циклов

Прототип:

#include <sys/neutrino.h>
#include <inttypes.h>
uint64_t ClockCycles( void );

Библиотека:

libc

Описание:

Системный вызов ClockCycles() возвращает текущее значение "свободно идущего" (free-running) 64-битного счетчика циклов. Такой счетчик реализован во всех процессорах и является высокоточным механизмом для синхронизации коротких временных интервалов.

В некоторых CPU архитектурах ЦП есть инструкция для получения значения счетчика (например, в x86 это инструкция RDTSC). Для процессоров, которые не реализуют такую инструкцию аппаратно, ее эмулирует ядро. Эмуляция обеспечивает более низкое разрешение, чем при аппаратной поддержке (838,095345 наносекунд для совместимой с IBM PC системы).

Замечание для систем с симметричной мультипроцессорностью

Данная функция, в зависимости от CPU архитектуры, возвращает значение из регистра, уникального для каждого CPU ядра в SMP, например, TSC (счетчик меток времени) для x86. Эти регистры не синхронизированы между CPU ядрами. В данном случае, если выполнен вызов ClockCycles(), а затем поток смигрировал на другое CPU ядро и снова вызвал ClockCycles(), то будет невозможным корректно интерпретировать результат сравнения возвращенных значений.

В связи с этим для использования функции ClockCycles() в SMP системе необходимо "привязать" выполнение потока к определенному CPU ядру с помощью вызова:

ThreadCtl( _NTO_TCTL_RUNMASK, ... )

Дополнительная информация приведена в описании ThreadCtl().

Состояния блокировки:

Данный вызов является неблокируемым.


Caution: Для корректной интерпретации возвращенного значения необходимо учитывать количество секунд до переполнения счетчика циклов:

(~(uint64_t)0) / SYSPAGE_ENTRY( qtime )->cycles_per_sec


Примеры:

См. SYSPAGE_ENTRY()

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

SYSPAGE_ENTRY(), ThreadCtl()




Предыдущий раздел: Описание API системной библиотеки