测量 C 中经过的时间?

Kyu*_*u96 4 c time benchmarking timing microbenchmark

所以,我想看看我的代码中的函数需要多长时间才能运行。(实时)。最初,我有这个:

clock_t begin = clock();
my_function();
clock_t end = clock();
double time_spent = (double)(end - begin);
Run Code Online (Sandbox Code Playgroud)

但显然,这种方法存在一些问题。

  1. 它仅测量 CPU 处理我的应用程序所花费的时间。
  2. 从我所看到的来看,它仅在微秒级别上进行测量 - 这对于我的情况来说不够精确。

那么,获取函数运行时间的正确方法是什么?CPU 时间真的是正确的方法吗?我可以测量多精确?我在想纳秒级?

Puc*_*uck 5

所以,你应该问自己是否真的需要纳秒级。处理器以 GHz 数量级的时钟速率运行,这意味着执行一条指令需要纳秒数量级。这意味着纳秒精度的测量极其复杂(如果不是不可能的话)。

C11 附带了新的timespec_get,可以为您提供纳秒分辨率的时间,但它肯定不是那么准确。

如果您的目标是测量函数的执行时间,那么最好的选择肯定是在循环中调用函数,执行一千次,并以微秒精度测量它,这肯定比任何计时器更接近纳秒精度声称是纳秒。

  • 循环调用将测量吞吐量。或者,如果您使下一个输入依赖于上一个输出,请测量延迟。微基准测试是*困难的*,有时您必须小心以获得优化的代码,而不让编译器优化掉您想要测量的东西。相关:[绩效评估的惯用方式?](/sf/ask/4220439121/) (2认同)