所以,我想看一下我的代码中的某个函数需要多长时间才能运行(实时)。
最初我的代码是这样的:
clock_t begin = clock();
my_function();
clock_t end = clock();
double time_spent = (double)(end - begin);
但显然,这种方法存在一些问题。
- 它仅测量CPU处理我的应用程序所花费的时间。
- 从我所看到的来看,它只以微秒为单位进行测量,这对我的情况不够精确。
那么,获取函数运行所需时间的正确方法是什么?CPU时间真的是正确的方法吗?我能测量多精确?我在考虑纳秒级别?
gettimeofday
,但无法达到纳秒级别,而且您可能不在实时系统上,因此即使是毫秒级别实际上也超出了您可以期望的有效精度。 - brunogettimeofday
已经被弃用,而是使用clock_gettime
(它具有纳秒分辨率,但测量诸如几十ns之类的实际开销)。而乱序执行意味着您无法可靠地计时小于该时间的定时区域,除非您了解您的CPU,并使用x86lfence
;rdtsc
来控制OoO exec。请参见Idiomatic way of performance evaluation?关于微小定时区域的内容。 - Peter Cordes