__PPC_GET_TIMEBASE(3)

ИМЯ
__ppc_get_timebase, __ppc_get_timebase_freq - возвращают текущее значение базового регистра времени на архитектуре Power и его частоту

ОБЗОР
#include <sys/platform/ppc.h>

uint64_t __ppc_get_timebase(void)

uint64_t __ppc_get_timebase_freq(void);

ОПИСАНИЕ
Функция __ppc_get_timebase() читает текущее значение базового регистра времени (Time Base Register) и возвращает его значение, а __ppc_get_timebase_freq() возвращает частоту обновления базового регистра времени.

Базовый регистр времени — это 64-битный регистр процессоров с архитектурой Power. В нём хранится монотонно увеличивающееся значение, которое обновляется с зависимой от системы частотой, которая может отличаться от частоты процессора.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция __ppc_get_timebase() возвращает 64-битное беззнаковое целое, которое представляет собой текущее значение базового регистра времени.

Функция __ppc_get_timebase_freq() возвращает 64-битное беззнаковое целое, которое представляет собой частоту, с которой изменяется базовый регистр времени.

ВЕРСИИ
Поддержка __ppc_get_timebase() в библиотеку GNU C было добавлена в версию 2.16, а __ppc_get_timebase_freq() доступна начиная с версии 2.17.

СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции являются расширениями GNU.

ПРИМЕР
Следующая программа вычисляет время в микросекундах, прошедшее между двумя вызовами __ppc_get_timebase().

  Исходный код программы
    #include <inttypes.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/platform/ppc.h>
    /* максимальное значение базового регистра времени: 2^60 - 1.
       Источник: POWER ISA.  */
    #define MAX_TB 0xFFFFFFFFFFFFFFF
    int
    main(void)
    {
        uint64_t tb1, tb2, diff;
        uint64_t freq = __ppc_get_timebase_freq();
        printf("Базовая частота времени = %"PRIu64" Hz\n", freq);
        tb1 = __ppc_get_timebase();
        // что-то делаем…
        tb2 = __ppc_get_timebase();
        if (tb2 > tb1) {
            diff = tb2 - tb1;
        } else {
            /* базовый регистр времени переполнился */
            diff = (MAX_TB - tb2) + tb1;
        }
        printf("Прошло  = %1.2f мкс\n",
                (double) diff * 1000000 / freq );
        exit(EXIT_SUCCESS);
    }

СМОТРИТЕ ТАКЖЕ
time(2), usleep(3)