Получить текущее значение счетчика циклов
#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().
Данный вызов является неблокируемым.
Для корректной интерпретации возвращенного значения необходимо учитывать количество секунд до переполнения счетчика циклов:
|
См. SYSPAGE_ENTRY()
ЗОСРВ «Нейтрино»
Предыдущий раздел: Описание API системной библиотеки