5

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

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);

我的程序中定义的函数在哪里conv3_dec(),我想找到这个函数的运行时。

现在的问题是,当我的程序运行时,conv3_dec()函数运行了将近 2 个小时,但输出printf("DECODING TIME = %f\n",duration)显示函数的执行仅在半秒 ( DECODING TIME = 0.455443) 内完成。这让我很困惑。

我以前曾使用该clock_t技术来测量程序的运行时间,但差异从未如此巨大。这是由交叉编译器引起的吗?顺便说一句,模拟器模拟了一个运行频率仅为 500MHz 的 DSP 处理器,因此 DSP 处理器的时钟速度差异和我的 CPU 导致错误是测量 CLOCKS_PER_SEC。

4

3 回答 3

5

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

于 2012-10-05T09:11:15.663 回答
4

对于像两个小时这样的持续时间,我不会太担心clock(),它对于测量亚秒级持续时间要有用得多。

time()如果您想要实际经过的时间,只需使用,例如(为丢失的内容提供的虚拟内容):

#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
于 2012-10-05T09:18:25.943 回答
2

gettimeofday()功能也可以考虑。


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


以毫秒为单位计算 C 程序中经过的时间

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

于 2012-10-05T09:31:12.277 回答