在处理定点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
我做错了什么?有什么东西使探查器感到困惑吗?
立体声显然比单声道慢得多,即需要更多的周期。
以上两种情况下的输出相同,因此代码正常。
答案 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。