测量功能执行的时间



我一直在测量C++中函数的执行时间。我尝试了clock_t clock(void),但它只测量程序中一个函数的时间。在下面的简单示例中,我如何测量这两个函数的时间?

#include <iostream>
using namespace std;
int add(int a, int b)
{
return a+b;
}
int subtract(int a, int b)
{
return a - b;
}
int main()
{
int a,b;
cin >> a >> b;
int c = add(a,b);
int d = subtract(a,b);
cout << c << " " << d << "n";
return 0;
}

如果您想进行基准测试,而不是使用std::clock_t,您应该考虑使用time_point<high_resolution_clock>使用std::chrono:

using namespace std::chrono; 
high_resolution_clock::time_point t = high_resolution_clock::now();
//... do what is to be measured
high_resolution_clock::time_point t2 = high_resolution_clock::now();
cout << duration_cast<milliseconds>(t2 - t).count();

然而,定时总是一个不精确的衡量标准,它取决于时钟分辨率(例如,在窗口上,分辨率约为15ms(。因此,测量时间越短,测量的相对误差就越高。因此,如果您的函数需要15毫秒才能执行,那么在windows上,您将出现+/-100%的错误。

提高度量可靠性的唯一方法是通过大量迭代来测量更长的时间。因此,在这个例子中,在100万次迭代中,度量的相对误差为00001%。

如果你可以单独对你的函数进行基准测试,就这样做吧。但是,如果不能单独测量函数(例如,因为一个函数为另一个函数生成输入(,就不能使用这种方法。如果您想在这种情况下找到代码的瓶颈,那么您应该使用正确的工具:探查器

最新更新