我想优化一个朋友给我的代码块,但是我的平均执行时间的基线非常不稳定,我失去了为什么/如何修复它。C函数的平均执行时间不稳定
代码:
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include "wall.h" /* Where his code is */
int main()
{
int average;
struct timeval tv;
int i;
for(i = 0; i < 1000; i++) /* Running his code 1,000 times */
{
gettimeofday(&tv, NULL); /* Starting time */
start(); /* Launching his code */
int ret = tv.tv_usec; /* Finishing time */
ret /= 1000; /* Converting to milliseconds */
average += ret; /* Adding to the average */
}
printf("Average execution time: %d milliseconds\n", average/1000);
return 0;
}
5次不同的运行的输出:
- 804毫秒
- 702毫秒
- 394毫秒
- 642毫秒
- 705毫秒
我已经尝试了多种不同的方式来获得平均执行时间,但每个人都没有给我一个足够精确的答案,或给了我一个完全不稳定的答案。我失去了现在该做什么,任何帮助将不胜感激!
我知道这些类型的基准测试都非常依赖于系统的,所以我在下面列出了我的系统规格:
- 的Ubuntu 12.10 64
- 7.8吉布RAM
- 英特尔酷睿i7-3770 CPU @ 3.40GHz×8
- 的GeForce GT 620 /的PCIe/SSE2
编辑
谢谢大家的意见,但我决定用gprof来代替构建我自己的。再一次感谢你!
虽然测试基准确实是针对您所运行的硬件和操作系统的,但它更依赖于您所使用的代码 评估。在这种情况下,我们无法看到该代码。我会问,是否有任何文件IO发生。 –
整个循环的时间如何? – nhahtdh
'timeval'结构的'tv_usec'成员包含当前时间的微秒部分,而不是自Epoch起的微秒数。您不是在测量执行时间,而是在采样微秒部分。观察到的价值分布是非常正常的(没有双关意图)。 –