clock_t是否计算所有线程、c++、pthreads的时间?
Does clock_t calculate the time of all threads, c++, pthreads?
假设我的代码是由 main() 组成的,在 main 中我调用了 2 个 运行 并行的线程。
假设 main 需要 5 秒才能完成,每个线程需要 10 秒才能完成。
如果我使用 clock_t 对主程序计时,假设 2 个线程 运行 并行,则程序实际花费的时间为 15 秒。
现在,如果我使用 clock_t 计时,我的时间是 15 秒还是 25 秒?
虽然线程 1 和线程 2 运行 并行,但是 clock_t() 会计算线程 1 和线程 2 使用的每个周期和 return 使用的周期总数?
我使用 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;
}
函数 clock
在不同的实现中做不同的事情(特别是在不同的 OS 中)。 Windows 中的 clock
函数给出了程序启动时的时钟滴答数,与线程数无关,也与机器是否忙碌无关[我相信这个设计决定源于古时候DOS和Windows2.x是时髦的东西,OS没办法"not running"东西]。
在 Linux 中,它给出了 CPU 使用的时间,据我所知,所有类 Unix 操作系统都是如此。
编辑澄清:我的 Linux 系统是这样说的:
In glibc 2.17 and earlier, clock() was implemented on top of times(2).
For improved precision, since glibc 2.18, it is implemented on top of
clock_gettime(2) (using the CLOCK_PROCESS_CPUTIME_ID clock).
也就是说,时间是给进程的,不是给当前线程的。
如果您使用 Windows,要获得进程实际使用的 CPU 时间,您可以(并且应该)使用 GetProcessTimes
假设我的代码是由 main() 组成的,在 main 中我调用了 2 个 运行 并行的线程。
假设 main 需要 5 秒才能完成,每个线程需要 10 秒才能完成。
如果我使用 clock_t 对主程序计时,假设 2 个线程 运行 并行,则程序实际花费的时间为 15 秒。
现在,如果我使用 clock_t 计时,我的时间是 15 秒还是 25 秒?
虽然线程 1 和线程 2 运行 并行,但是 clock_t() 会计算线程 1 和线程 2 使用的每个周期和 return 使用的周期总数?
我使用 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;
}
函数 clock
在不同的实现中做不同的事情(特别是在不同的 OS 中)。 Windows 中的 clock
函数给出了程序启动时的时钟滴答数,与线程数无关,也与机器是否忙碌无关[我相信这个设计决定源于古时候DOS和Windows2.x是时髦的东西,OS没办法"not running"东西]。
在 Linux 中,它给出了 CPU 使用的时间,据我所知,所有类 Unix 操作系统都是如此。
编辑澄清:我的 Linux 系统是这样说的:
In glibc 2.17 and earlier, clock() was implemented on top of times(2). For improved precision, since glibc 2.18, it is implemented on top of clock_gettime(2) (using the CLOCK_PROCESS_CPUTIME_ID clock).
也就是说,时间是给进程的,不是给当前线程的。
如果您使用 Windows,要获得进程实际使用的 CPU 时间,您可以(并且应该)使用 GetProcessTimes