我正在尝试使用 clock_getres 和 clock_gettime 以及 CLOCK_MONOTONIC 时钟来测量程序的一部分。
如果我理解正确,clock_gettime 通过测量某种外部时钟(而不是 cpu)来获取耗时,并在他引用的 struct timespec 实例中更新它作为参数。(即它返回结果以纳秒分辨率)
我需要知道的不是实际时间,而是时钟 (CLOCK_MONOTONIC) 的周期数。
我该怎么做?这可能与 clock_getres 有关,但我不明白它究竟是如何工作的。
有谁知道如何获取循环数?
Clock_gettime 为您提供纪元(或过去的其他固定时间,具体取决于平台上的具体实现)和所选时钟的当前时间(在您的情况下为 CLOCK_MONOTONIC)之间耗时。
要衡量一个过程需要多长时间,您需要调用它两次并计算差异。像这样的东西:
int main()
{
timespec start, finish;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
//code you want to profile
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish);
//calculate the difference between start and finish
return 0;
}
注意,这会给你一个时间值,如果你想知道 CPU 周期,那么你必须使用类似 rdtsc 的东西:
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(__rdtsc)
int main()
{
unsigned __int64 i;
i = __rdtsc();
printf_s("%I64d ticks\n", i);
}
我是一名优秀的程序员,十分优秀!