0

已删除,抱歉………………………………………………

4

3 回答 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;

如果您的程序运行速度快于时钟粒度,那么无论您做什么,它都会出现为零(因为yx将是相同的)。 但至少使用浮点除法,否则您可以获得小数秒。

[编辑]实际上,我的错误。出于某种原因,我认为xandy是整数(因为您使用它们来存储 的返回值clock)。所以在这种情况下,你的运行速度可能比时钟周期快。

当您想要对快速操作进行基准测试时,您需要执行以下一项或两项操作:

  • 多次重复操作(一千,一百万......)
  • 使用更高分辨率的计时器
于 2013-03-01T04:53:54.623 回答