Optimising IIR Filters Using ARM NEON
Sebastian Bentmar Holgersson · 2012
ARMs processorserie Cortex-A9 har stod for SIMD-instruktioner med hjalp av NEON MPE. Detta innebar att processorn kan anvanda sig av vektor-instruktioner som kan utfora operationer pa ett flertal element med varje instruktion. Malet med bruk av NEON MPE ar att oka prestandan, men da man forsoker optimera en speciell IIR-filtertyp som kallas for biquads kan man stota pa problem. Problemen med NEON-optimering av biquads beror pa att endast fem operationer kravs for varje iteration och att behandling av IIR-filter kraver att man behandlar en sampel i taget eftersom varje behandlat sampels varde beror pa tidigare behandlade samplar. Rapporten ger en kort beskrivning och genomgang av hur IIR-filter och NEON-optimering fungerar. For att analysera NEON-optimering av biquad-filter skapas fyra olika implementationer av en audioeffekt. De fyra implementationerna jamfor prestandan hos flyttalsaritmetik, fixpunkts-aritmetik och NEON-optimering samt en version som implementerar bade fixpunktsaritmetik och NEON-optimering. Problemen med optimering av biquad-filter med hjalp av NEON-instruktioner loses genom parallell behandling av ljudkanalerna. Eftersom kanalerna ar sjalvstandiga kan man fordubbla prestanda genom att utfora varje operation pa saval hoger- som vansterkanal. Vidare prestandaforbattring ges aven da effektiviteten hos minnesoperationer forbattras och med hjalp av fixpunkts-behandling. Resultaten visar att fixpunktsversionen som anvander sig av NEON-instruktioner ar snabbast, men flyttalsversionen med NEON-instruktioner ar bara marginellt langsammare och dessutom enklare att implementera. Anvandandet av NEON-instruktioner forbattrar prestandan med mellan 1,7-2,8 ganger i de fall som testas.