【问题标题】:Profiling the same C function called with different arguments分析使用不同参数调用的相同 C 函数
【发布时间】:2019-07-24 11:32:50
【问题描述】:

在处理定点 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

我做错了什么?有什么东西让分析器感到困惑吗?

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

以上两种情况的输出都是一样的,所以代码是OK的。

【问题讨论】:

  • 您可以尝试在其中一种方法中执行nothing,然后重试。看看时间是否相同。
  • 试过了,不,时间不一样了。

标签: c profiling gprof


【解决方案1】:

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

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

clock_t start = clock();

g_apply_mono  ( &g_mono  , in_mono   );

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

记得包含在您的标题中。此外,如果您对测量时间感兴趣,您可以将时钟数除以每秒的时钟数,即 CLOCKS_PER_SEC。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多