如果我有以下代码
clock_t t;
t = clock();
//algorithm
t = clock() - t;
这个数值等于运行程序所需的时钟周期数。这与CPU时间相同吗?在C++中是否有其他测量CPU时间的方法?
操作系统 - Debian GNU/Linux 我可以接受任何可行的方法。我想比较两种算法的CPU时间。
clock_t t;
t = clock();
//algorithm
t = clock() - t;
这个数值等于运行程序所需的时钟周期数。这与CPU时间相同吗?在C++中是否有其他测量CPU时间的方法?
操作系统 - Debian GNU/Linux 我可以接受任何可行的方法。我想比较两种算法的CPU时间。
clock()
被指定用于测量CPU时间,但并非所有实现都是如此。特别是Microsoft的VS中的实现在多个线程运行时不会计算额外时间,或者在程序的线程处于睡眠/等待状态时计算更少时间。
还要注意,clock()
应该测量整个程序所使用的CPU时间,因此尽管多个线程在//algorithm
中使用的CPU时间将被测量,但不属于//algorithm
的其他线程也会被计算。
clock()
是标准中指定的唯一测量CPU时间的方法,但肯定有其他平台特定的方法来测量CPU时间。
std::chrono
不包括任何用于测量CPU时间的时钟。它仅有一个与系统时间同步的时钟,一个相对于真实时间以稳定速率前进的时钟和一个“高分辨率”时钟,但不一定测量CPU时间。
如何测量 CPU 使用时间?
#include <ctime>
std::clock_t c_start = std::clock();
// your_algorithm
std::clock_t c_end = std::clock();
long_double time_elapsed_ms = 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC;
std::cout << "CPU time used: " << time_elapsed_ms << " ms\n";
std::cout << "CPU time used: " << time_elapsed_ms / 1000.0 << " s\n";
这是一个关于C++中的时钟函数的文档。时钟函数提供了程序运行时间的信息,可以用来计算程序执行时间或者进行时间测量。它们在多线程环境下也非常有用。
使用pthread的非标准方法如下:
#include <pthread.h>
#include <time.h>
timespec cpu_time()
{
thread_local bool initialized(false);
thread_local clockid_t clock_id;
if (!initialized)
{
pthread_getcpuclockid(pthread_self(), &clock_id);
initialized = true;
}
timespec result;
clock_gettime(clock_id, &result);
return result;
}
补充说明:更标准的做法是:
#include <sys/resource.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
struct rusage r;
getrusage(RUSAGE_SELF, &r);
printf("CPU usage: %d.%06d\n", r.ru_utime.tv_sec, r.ru_utime.tv_usec);
}
C++有一个chrono库。请参见http://en.cppreference.com/w/cpp/chrono。此外,通常还有平台相关的方法来获取高分辨率计时器(显然因平台而异)。
chrono
库是 C++11 标准的一部分。 - NicholasMchrono
不测量 CPU 时间。 - user9414424