已删除,抱歉………………………………………………
user2121981
问问题
116 次
3 回答
1
使用n=30
,您的程序会做如此少量的工作,以至于它会以粗粒度显示为零时间clock
。在某些系统上,clock
每 10 毫秒滴答一次。假设您有相当快的控制台 I/O,您可能在数十或数百微秒范围内,并且可能有 99.99% 的时间花在printf
.
尝试输入一个更大的数字,比如 1000000。然后你应该得到一个非零的值。
于 2013-03-01T04:59:02.653 回答
0
尝试这个
struct timeval start, end;
long mtime, secs, usecs;
gettimeofday(&start, NULL);
// your processing.
gettimeofday(&end, NULL);
secs = end.tv_sec - start.tv_sec;
usecs = end.tv_usec - start.tv_usec;
mtime = ((secs) * 1000 + usecs/1000.0) + 0.5;
printf("Elapsed time: %ld millisecs\n", mtime);
于 2013-03-01T04:55:39.467 回答
-1
问题是您正在进行整数除法,然后将其转换为浮点数。否则,您的结果将向下舍入到最接近的秒数。您需要(y-x)
在划分之前转换为浮点数:
z = (float)(y-x) / CLOCKS_PER_SEC;
如果您的程序运行速度快于时钟粒度,那么无论您做什么,它都会出现为零(因为y
和x
将是相同的)。 但至少使用浮点除法,否则您可以获得小数秒。
[编辑]实际上,我的错误。出于某种原因,我认为x
andy
是整数(因为您使用它们来存储 的返回值clock
)。所以在这种情况下,你的运行速度可能比时钟周期快。
当您想要对快速操作进行基准测试时,您需要执行以下一项或两项操作:
- 多次重复操作(一千,一百万......)
- 使用更高分辨率的计时器
于 2013-03-01T04:53:54.623 回答