clock_t是否计算所有线程的时间,c ++,pthreads?

时间:2015-09-05 09:49:06

标签: c++ benchmarking

让我们说我的代码是由main()构成的,在main中我调用了2个并行运行的线程。

假设main需要5秒才能完成,每个线程需要10秒才能完成。

如果我使用clock_t计时主程序,假设2个线程并行运行,程序的实际时间为15秒。

现在,如果我使用clock_t计时,那会给​​我一个15秒或25秒的时间吗?

虽然线程1和线程2并行运行,但clock_t()会计算线程1和线程2使用的每个周期并返回使用的总周期数吗?

我使用windows mingw32和pthreads。

示例代码:

main(){
 clock_t begin_time ;

  for (unsigned int id = 0; id < 2; ++id)
  {
     pthread_create(&(threads[id]), NULL, thread_func, (void *) &(data[id]));
  }


  for (unsigned int id = 0; id < 2; ++id)
  {
      pthread_join(threads[id], NULL);
  }

time = double( clock () - begin_time )/CLOCKS_PER_SEC;
}

1 个答案:

答案 0 :(得分:2)

函数clock在不同的实现中做了不同的事情(特别是在不同的OS中)。 Windows中的clock函数给出了程序启动时的时钟周期数,无论线程数是多少,无论机器是否忙碌[我相信这个设计决定源于古代的时候DOS和Windows 2.x是时髦的东西,操作系统没有办法“不运行”的东西]。

在Linux中,它提供了所使用的CPU时间,就像所有类Unix操作系统中的情况一样,据我所知。

编辑澄清:我的Linux系统说:

  

在glibc 2.17及更早版本中,clock()是在时间(2)之上实现的。   为了提高精度,从glibc 2.18开始,它实现在   clock_gettime(2)(使用CLOCK_PROCESS_CPUTIME_ID时钟)。

换句话说,时间是进程,而不是当前线程。

要获取进程使用的实际CPU时间,您可以(并且应该)使用GetProcessTimes