小编Eri*_*_DE的帖子

浮点数组的abs-max速度更快

我需要实时绘制音频峰值表.每秒最少44100个样本,最少40个流.每个缓冲区介于64到1024个样本之间.我需要从每个缓冲区中获取最大值.(然后通过一种低通滤波器馈送,并以约20ms的间隔绘制.)

for(int i = 0; i < numSamples; i++)
{ 
      absMaxOfBuffer = MAX( fabs( buffer[i] ), absMaxOfBuffer);
}
Run Code Online (Sandbox Code Playgroud)

这就是我现在这样做的方式.我想更快地做到这一点.缓冲区的浮点数在-1到1范围内,因此是晶圆厂.

问题,是否有一些棘手的comp-sci quicksort-esque方式更快地做到这一点?

如果不这样,无分支ABS和MAX用于浮点数,它们是否存在?

编辑:主要平台是Linux/gcc,但计划一个Windows端口(可能是mingw).

编辑,第二个:
我接受了onebyone,因为关于实际的算法结构,这是问题的核心.
我会尝试将循环展开到四个,将符号位置零,然后使用SSE(maxps指令)获取最大值,看看是否不会剥离香蕉.感谢您的建议,我已经投票给了你们中的一些人,作为参赛者.:)

c++ optimization performance signal-processing

9
推荐指数
1
解决办法
3500
查看次数