提问者:小点点

使用clock()测量执行时间


我正在运行一个C程序,使用GCC和一个专有的DSP交叉编译器来模拟一些功能。我正在使用以下代码来测量我的程序的特定部分的执行时间:

clock_t start,end;
printf("DECODING DATA:\n");
start=clock();
conv3_dec(encoded, decoded,3*length,0);
end=clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("DECODING TIME = %f\n",duration);

其中是在我的程序中定义的函数,我想找到这个函数的运行时。

现在的问题是,当我的程序运行时,函数运行了近2个小时,但的输出显示函数的执行仅在半秒内完成(codeDecoding TIME=0.455443/code>)。这对我来说很困惑。

我以前使用技术来度量程序的运行时间,但是差别从来没有这么大过。这是由交叉编译器引起的吗。顺便说一句,模拟器模拟的是一个仅以500MHz运行的DSP处理器,因此,DSP处理器和我的CPU的时钟速度之间的差异导致了错误,即测量clocks_per_sec。


共3个答案

匿名用户

对于两小时这样的持续时间,我不会太在意,它对于测量亚秒的持续时间要有用得多。

如果您想要实际经过的时间,只需使用,类似于(为缺少的内容提供的虚拟内容):

#include <stdio.h>
#include <time.h>

// Dummy stuff starts here
#include <unistd.h>
#define encoded 0
#define decoded 0
#define length 0
static void conv3_dec (int a, int b, int c, int d) {
    sleep (20);
}
// Dummy stuff ends here

int main (void) {
    time_t start, end, duration;
    puts ("DECODING DATA:");
    start = time (0);
    conv3_dec (encoded, decoded, 3 * length, 0);
    end = time (0);
    duration = end - start;
    printf ("DECODING TIME = %d\n", duration);
    return 0;
}

它生成:

DECODING DATA:
DECODING TIME = 20

匿名用户

测量cpu时间,而不是壁钟时间。由于您不是在cpu上运行您的大部分代码,因此这不是正确的工具。

匿名用户

也可以考虑使用函数。

gettimeofday()函数应获取当前时间,表示为Epoch以来的秒和微秒,并将其存储在TP指向的timeval结构中。未指定系统时钟的分辨率。

计算C程序中的运行时间(以毫秒为单位)

http://www.ccplusplus.com/2011/11/gettimeofday-example.html