【发布时间】:2020-08-19 20:30:43
【问题描述】:
我有 4 个测试函数 - foo1()、foo2()、foo3() 和 foo4()。 对于测量,我使用以下程序:
unsigned __int64 start;
unsigned __int64 stop;
unsigned __int64 sum;
unsigned __int64 orig;
sum = 0;
for (int i = 0; i < 10000; i++)
{
start = __rdtsc();
foo1();
stop = __rdtsc();
sum += (stop - start);
}
orig=sum;
cout << "foo1() \taverage: " << (sum / 10000.0) << ", \tratio: " << ((double)orig / sum) << endl << endl;
sum = 0;
for (int i = 0; i < 10000; i++)
{
start = __rdtsc();
foo2();
stop = __rdtsc();
sum += (stop - start);
}
cout << "foo2() \taverage: " << (sum / 10000.0) << ", \tratio: " << ((double)orig / sum) << endl << endl;
等等,对于 foo3() 和 foo4()。
我在控制台上有这个日志:
foo1() average: 401495, ratio: 1
foo2() average: 24251.2, ratio: 16.5557
foo3() average: 11497.7, ratio: 34.9195
foo4() average: 7439.06, ratio: 53.9713
这是否意味着使用 foo4 () 比使用 foo1 () 快约 50 倍(实时)?
或者这是否意味着 foo4() 的性能肯定比 foo1() 好?
【问题讨论】:
-
进行基准测试时,是否确保 CPU 频率保持恒定?
-
如果您以交错方式(即在同一个循环中)执行
foo函数会产生什么结果?我还建议您放弃第一次迭代以减少可能的偏差(例如,内存/缓存延迟对第一次调用的影响)。此外,计算时间的标准偏差(而不仅仅是平均值)可以帮助您跟踪可能的基准测试/性能问题,还可以提供有关您是否可以安全地比较平均值的提示。
标签: c++ performance tsc measurement rdtsc