我正在尝试使用clock_getres和clock_gettime来测量我的程序的一部分,使用CLOCK_MONOTONIC时钟。
如果我理解正确的话,clock_gettime会通过测量某种外部时钟(不是cpu)来获取通过的时间,并在他参考的struct timespec实例中更新它,作为paramer。(即它返回结果以纳秒为单位)
我需要知道的不是实际时间,而是时钟(CLOCK_MONOTONIC)的循环次数。
我该怎么做?这可能与clock_getres有关,但我无法理解它是如何工作的。
有谁知道如何获得周期数?
答案 0 :(得分:0)
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);
}