__PPC_GET_TIMEBASE - Linux手册页

时间:2019-08-20 17:59:49  来源:igfitidea点击:

Section: Linux Programmer's
Manual (3)
更新日期: 2020-06-09

名称

__ppc_get_timebase,__ppc_get_timebase_freq-获取电源架构上的时间基准寄存器的当前值及其频率。

语法

#包括

uint64_t __ppc_get_timebase(void)

uint64_t __ppc_get_timebase_freq(void);

说明

__ppc_get_timebase()读取时基寄存器的当前值并返回其值,而__ppc_get_timebase_freq()返回时基寄存器的更新频率。

时基寄存器是Power Architecture处理器提供的64位寄存器。它存储单调递增的值,该值以与系统相关的频率更新,该频率可能与处理器频率不同。

返回值

__ppc_get_timebase()返回一个64位无符号整数,该整数表示时基寄存器的当前值。

__ppc_get_timebase_freq()返回一个64位无符号整数,该整数表示更新时基寄存器的频率。

版本

自2.16版以来,已提供__ppc_get_timebase()的GNU C库支持,而自2.17版以来,已提供__ppc_get_timebase_freq()的支持。

遵循规范

这两个函数都是非标准的GNU扩展。

示例

下面的程序将计算两次调用__ppc_get_timebase()所花费的时间(以微秒为单位)。

Program source

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/platform/ppc.h>

/* Maximum value of the Time Base Register: 2ha60 - 1.
   Source: POWER ISA.  */
#define MAX_TB 0xFFFFFFFFFFFFFFF

int
main(void)
{
    uint64_t tb1, tb2, diff;

    uint64_t freq = __ppc_get_timebase_freq();
    printf("Time Base frequency = %"PRIu64" Hz\n", freq);

    tb1 = __ppc_get_timebase();

    // Do some stuff...

    tb2 = __ppc_get_timebase();

    if (tb2 > tb1) {
        diff = tb2 - tb1;
    } else {
        /* Treat Time Base Register overflow.  */
        diff = (MAX_TB - tb2) + tb1;
    }

    printf("Elapsed time  = %1.2f usecs\n",
            (double) diff * 1000000 / freq );

    exit(EXIT_SUCCESS);
}

另外参见

时间(2),睡眠(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/