我该如何测量特定线程集的CPU时间?

14

我在Linux中运行C++程序。

有几个线程池(用于计算,I/O等)。

系统调用clock()可以让我测量所有CPU核心为该进程耗费的CPU时间。

然而,我想要测量仅由计算线程池中的线程耗费的CPU时间。

我应该如何实现?

谢谢:D


这并不是最理想的解决方案,但我认为最简单的方法是记录一些带有每个线程开始和结束时间戳的消息,并通过后处理这些日志来获取您的时间。 - K. Kirsz
1个回答

15

要获得每个线程的CPU时钟ID,您可以使用:pthread_getcpuclockid, 并且使用此CPU时钟ID,您可以使用clock_gettime检索当前线程的CPU时间。

以下是演示相同操作的示例代码:

struct timespec currTime;
clockid_t threadClockId;

//! Get thread clock Id
pthread_getcpuclockid(pthread_self(), &threadClockId);
//! Using thread clock Id get the clock time
clock_gettime(threadClockId, &currTime);

根据手册,似乎也可以调用clock_gettime(CLOCK_THREAD_CPUTIME_ID, &currTime),因此您不需要pthread依赖。 - Alexander Pivovarov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接