From 2847dff64a7af27cd0120616e2d818e5fd7bdfa3 Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Sun, 27 Dec 2020 06:48:37 -0500 Subject: [PATCH] #1021 Updates FIR filter to use the java Math.fma floating point multiply and accumulate instruction for more efficient processing. (#1022) Co-authored-by: Denny --- .../io/github/dsheirer/dsp/filter/fir/real/RealFIRFilter2.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/dsheirer/dsp/filter/fir/real/RealFIRFilter2.java b/src/main/java/io/github/dsheirer/dsp/filter/fir/real/RealFIRFilter2.java index 75e209b0..87e86734 100644 --- a/src/main/java/io/github/dsheirer/dsp/filter/fir/real/RealFIRFilter2.java +++ b/src/main/java/io/github/dsheirer/dsp/filter/fir/real/RealFIRFilter2.java @@ -85,7 +85,8 @@ public class RealFIRFilter2 extends FIRFilter //Use vector dot product to leverage SIMD intrinsics for(int x = 0; x < mCoefficients.length; x++) { - mAccumulator += mData[x] * mCoefficients[x]; + //Note: Math.fma() is 2.5x faster than explicit multiply then accumulate + Math.fma(mData[x], mCoefficients[x], mAccumulator); } /* Apply gain and return the filtered value */