对使用不同参数调用的同一C函数进行性能分析

时间:2019-07-24 11:32:50

标签: c profiling gprof

在处理定点DSP代码时,使用探查器会产生一些混淆。

当我在以下代码上运行gprof时:

main()
{
    ...
    g_apply(  &g_mono, in_mono  );
    g_apply(  &g_stereo, in_stereo  );
    ...
}

我得到(自循环,子循环,函数名称):

16943.80, 4760.06 g_apply 

但是我想看到单声道和立体声的单独循环,所以我这样做了:

void g_apply_mono(g* g_mono, in* in_mono)
{
    g_apply( g_mono, in_mono );
}
void g_apply_stereo(g* g_stereo, in* in_stereo)
{
    g_apply( g_stereo, in_stereo );
}    
main()
{
    ...
    g_apply_mono  ( &g_mono  , in_mono   );
    g_apply_stereo( &g_stereo, in_stereo );
    ...
}

但是,探查器为g_apply_mono()g_apply_stereo()给出了完全相同的周期!

12.03 10851.93 g616_apply_mono
12.03 10851.93 g616_apply_stereo

我做错了什么?有什么东西使探查器感到困惑吗?

立体声显然比单声道慢得多,即需要更多的周期。

以上两种情况下的输出相同,因此代码正常。

1 个答案:

答案 0 :(得分:0)

我从不使用gprof进行性能分析。据我所记得,关于是否应将其用于此目的存在一些争议(我认为它的设计考虑了其他目标)。

但是,如果您对测量周期感兴趣,可以使用:

clock_t start = clock();

g_apply_mono  ( &g_mono  , in_mono   );

fprintf(stdout, "Clocks elapsed: %d\n", (int) (clock() - start));

请记住要包含在标题中。另外,如果您对测量时间感兴趣,可以将时钟数除以一秒的时钟数,即CLOCKS_PER_SEC。