c ++线程运行时间

时间:2010-04-29 04:56:11

标签: c++ multithreading performance

我想知道我是否可以计算每个线程的运行时间。 我使用pthread在C ++中实现了一个多线程程序。 众所周知,每个线程都会与CPU竞争。 我可以使用clock()函数计算每个线程消耗的实际CPU时钟数吗?

我的程序看起来像:

Class Thread ()
{
Start();
Run();
Computing();
};

Start()是启动多个线程。然后每个线程都会运行Computing函数来做某事。我的问题是如何计算计算功能的每个线程的运行时间

3 个答案:

答案 0 :(得分:3)

不,你不能使用clock。处理器可以在StartComputing调用之间切换到另一个线程,因此您将计算多个线程的时间。你需要在一个线程中使用tick计数器本地。

答案 1 :(得分:1)

您使用的是什么平台?如果您正在使用Linux并且在内核上> 2.6.26您可以使用RUSAGE_THREAD标记getrusage

struct rusage usage
getrusage(RUSAGE_THREAD, &usage);
struct rusage

,您会发现ru_utimeru_stime分别跟踪用户时间和系统时间。在开始时调用一次,然后调用一次,即可获得增量。

答案 2 :(得分:1)

根据clock_gettime(3)

  

GNU libc和Linux内核的最新版本支持以下时钟:   CLOCK_REALTIME   系统范围的实时时钟。设置此时钟需要适当的权限。

     

CLOCK_MONOTONIC   无法设置的时钟,表示从某个未指定的起点开始的单调时间。

     

CLOCK_PROCESS_CPUTIME_ID   来自CPU的高分辨率每进程计时器。

     

CLOCK_THREAD_CPUTIME_ID   特定于线程的CPU时钟。

所以你可以试试 CLOCK_THREAD_CPUTIME_ID