我需要實時繪製音頻峯值表。每秒最少44100個採樣次,最少40個流。每個緩衝區介於64到1024個樣本之間。我需要從每個緩衝區中獲取最大值。 (然後通過一種低通濾波器饋送,並以大約20ms的間隔進行繪製)。浮動陣列的最大abs-max
for(int i = 0; i < numSamples; i++)
{
absMaxOfBuffer = MAX(fabs(buffer[i]), absMaxOfBuffer);
}
這就是我現在要做的。我想更快地做到這一點。緩衝區浮點數在-1到1範圍內,因此晶圓廠。
問題,是否有一些棘手的comp-sci quicksort-esque這樣做的方式更快?
失敗,浮點數的無分支ABS和MAX函數,它們是否存在?主要平臺是Linux/gcc,但Windows端口計劃(可能與mingw)。
編輯,第二個:
由於關於問題的中心問題的實際算法結構,我給了一個接受。
我會嘗試展開循環到四個時間,零符號位,然後得到最大與SSE(maxps指令),看看是否不剝離香蕉。感謝這些建議,我已經投票選出了幾名亞軍。 :)
什麼編譯器?什麼平臺?如果你使用gcc,你可能會對諸如__builtin_expect之類的東西感興趣。 – 2009-05-03 19:04:33