3

我试图通过测量以毫秒为单位的实际经过时间与以毫秒为单位的 cpu 时间来在 c++ 中进行一些性能测量。这就是我的代码的样子:

auto start = std::chrono::high_resolution_clock::now();
unsigned begin = clock();

// some computationally expensive task

auto finish = std::chrono::high_resolution_clock::now();
unsigned end = clock();

(finish - start).count();

int duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
int cpu_duration = 1000*(end - begin)/(CLOCKS_PER_SEC);

现在我希望 cpu 时间值低于系统时间,因为线程可能会被中断。但是,cpu时间比实际时间高2-3倍。我做错了什么还是我误解了cpu时间的概念?

4

1 回答 1

5

简而言之:

  • 实时:用墙上的普通时钟测量的时间
  • cpu-time:CPU 忙/忙的总时间

如果您有多个 CPU,那么它们的时间会加起来,例如,在 1 秒的实时时间中,您可以使用 4 秒的 CPU 时间。

cppreference 的文档std::clock明确区分了挂钟和 cpu 时间:

[...]如果 CPU 被其他进程共享,std::clock 时间可能会比挂钟慢。另一方面,如果当前进程是多线程的并且有多个执行内核可用,则 std::clock 时间可能会比挂钟提前得更快。

有关更多详细信息,请参见此处

于 2019-06-04T13:48:28.107 回答