summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2024-02-06 17:40:14 -0800
committerAndy Hung <hunga@google.com>2024-03-12 14:08:51 -0700
commitbbb616de245be8fc48373622b520623c6450064f (patch)
tree8f72300f6ca4bf964c856265646a1d51fd859790
parent4a0897fd6085f6e2e1618d4c466982a4af4b445e (diff)
downloadmedia-bbb616de245be8fc48373622b520623c6450064f.tar.gz
audio_utils: Optimize power energy computation
Tweak the intrinsic choices to obtain better performance. Test: atest power_tests Test: atest audio_power_benchmark Bug: 323611666 Merged-In: I42d40372dac6a8f5fc6602f08a5fe1576142558d Change-Id: I42d40372dac6a8f5fc6602f08a5fe1576142558d
-rw-r--r--audio_utils/benchmarks/audio_power_benchmark.cpp369
-rw-r--r--audio_utils/power.cpp26
2 files changed, 203 insertions, 192 deletions
diff --git a/audio_utils/benchmarks/audio_power_benchmark.cpp b/audio_utils/benchmarks/audio_power_benchmark.cpp
index b355d976..13c3f758 100644
--- a/audio_utils/benchmarks/audio_power_benchmark.cpp
+++ b/audio_utils/benchmarks/audio_power_benchmark.cpp
@@ -28,193 +28,194 @@ Pixel 7 (USE_NEON code) 1024 frames
------------------------------------------------------------------------------------
Benchmark Time CPU Iteration
------------------------------------------------------------------------------------
- #BM_Power_PCM16/0 180.97891633448947 ns 180.1272276967831 ns 3885852
- #BM_Power_PCM16/1 180.947387663606 ns 180.12366729181554 ns 3886541
- #BM_Power_PCM16/2 366.788606340951 ns 365.0981633489325 ns 1915715
- #BM_Power_PCM16/3 548.7117372721175 ns 546.1077741464976 ns 1282070
- #BM_Power_PCM16/4 729.3091325787765 ns 725.8914895381871 ns 964460
- #BM_Power_PCM16/5 729.5107214636998 ns 725.9903921261499 ns 964001
- #BM_Power_PCM16/6 729.3142860987979 ns 725.7270789310516 ns 964462
- #BM_Power_PCM16/7 728.8285153846795 ns 725.6857445895254 ns 964518
- #BM_Power_PCM16/8 910.266543588675 ns 905.9784034899902 ns 773412
- #BM_Power_PCM16/9 909.7631943495237 ns 905.5980073450368 ns 773039
- #BM_Power_PCM16/10 909.4817518460887 ns 905.3046969675422 ns 773201
- #BM_Power_PCM16/11 1090.5752804035608 ns 1085.4067030965386 ns 645075
- #BM_Power_PCM16/12 1090.1430777061082 ns 1085.3985691918976 ns 645090
- #BM_Power_PCM16/13 1090.074475934731 ns 1085.1795632613716 ns 645054
- #BM_Power_PCM16/14 1271.0181027106237 ns 1265.0655742741403 ns 553342
- #BM_Power_PCM16/15 1450.921852464041 ns 1444.5727666390078 ns 484494
- #BM_Power_PCM16/16 1451.2240897596057 ns 1444.6554862570126 ns 484538
- #BM_Power_PCM16/17 1812.7695622285537 ns 1804.1137781191355 ns 387992
- #BM_Power_PCM16/18 1812.6019333363201 ns 1804.0487200830873 ns 388033
- #BM_Power_PCM16/19 2172.960068355248 ns 2163.5280680444976 ns 323553
- #BM_Power_PCM16/20 2896.932275617628 ns 2882.070808558297 ns 242852
- #BM_Power_PCM16/21 2354.0114820280833 ns 2343.273892215966 ns 298727
- #BM_Power_PCM16/22 4341.411563591838 ns 4320.3065557379705 ns 162026
- #BM_Power_PCM24/0 726.5703267242005 ns 723.3638876888978 ns 967598
- #BM_Power_PCM24/1 726.8478512196587 ns 723.3996910023831 ns 967645
- #BM_Power_PCM24/2 1453.522365501612 ns 1446.817841538075 ns 483826
- #BM_Power_PCM24/3 2180.4783136728597 ns 2170.2972985542474 ns 322531
- #BM_Power_PCM24/4 2907.3817241064085 ns 2893.78803763662 ns 241892
- #BM_Power_PCM24/5 2907.93437008585 ns 2893.9130060933658 ns 241902
- #BM_Power_PCM24/6 2907.476982094115 ns 2893.869563779754 ns 241942
- #BM_Power_PCM24/7 2906.2742418195558 ns 2893.721987961765 ns 241896
- #BM_Power_PCM24/8 3634.429566572946 ns 3617.2687167986146 ns 193516
- #BM_Power_PCM24/9 3637.612631382197 ns 3617.0655648749726 ns 193503
- #BM_Power_PCM24/10 3637.7966951345143 ns 3617.4579242709196 ns 193532
- #BM_Power_PCM24/11 4360.471518019849 ns 4340.702796725793 ns 161260
- #BM_Power_PCM24/12 4359.483557914242 ns 4340.688663859648 ns 161263
- #BM_Power_PCM24/13 4361.102585926522 ns 4340.699237256582 ns 161260
- #BM_Power_PCM24/14 5087.945822701728 ns 5064.266827288351 ns 138213
- #BM_Power_PCM24/15 5814.759977572986 ns 5787.690635285585 ns 120922
- #BM_Power_PCM24/16 5815.644749452265 ns 5787.2178931701865 ns 120940
- #BM_Power_PCM24/17 7266.470565121046 ns 7234.610670139329 ns 96756
- #BM_Power_PCM24/18 7268.525628728221 ns 7234.5110649425615 ns 96747
- #BM_Power_PCM24/19 8716.083166871316 ns 8682.350888726245 ns 80621
- #BM_Power_PCM24/20 11639.32870672943 ns 11580.26249875915 ns 60446
- #BM_Power_PCM24/21 9446.785352486686 ns 9405.332101734537 ns 74429
- #BM_Power_PCM24/22 17463.72223575373 ns 17383.809277838518 ns 40268
- #BM_Power_PCM32/0 179.84309567370832 ns 179.0676549126645 ns 3908541
- #BM_Power_PCM32/1 179.9404439204146 ns 179.0010033549121 ns 3911876
- #BM_Power_PCM32/2 367.16608437351766 ns 365.42729213737346 ns 1915123
- #BM_Power_PCM32/3 550.277695550067 ns 547.9387707497883 ns 1277543
- #BM_Power_PCM32/4 731.4224075405458 ns 728.3597142669796 ns 960757
- #BM_Power_PCM32/5 731.8896053180963 ns 728.7127664668686 ns 960626
- #BM_Power_PCM32/6 731.6139555435336 ns 728.404691132571 ns 960493
- #BM_Power_PCM32/7 731.4526007701458 ns 728.5303351299617 ns 952526
- #BM_Power_PCM32/8 914.9957172964164 ns 910.4922825617709 ns 768908
- #BM_Power_PCM32/9 914.9228864106034 ns 910.3200879900779 ns 768723
- #BM_Power_PCM32/10 914.4295313745796 ns 910.2645292119196 ns 768796
- #BM_Power_PCM32/11 1097.4819073401923 ns 1092.6099713796307 ns 640453
- #BM_Power_PCM32/12 1098.341821642604 ns 1093.1572358279782 ns 640293
- #BM_Power_PCM32/13 1098.2661898965437 ns 1092.878152356299 ns 636508
- #BM_Power_PCM32/14 1280.2780676971747 ns 1274.5237323564186 ns 549208
- #BM_Power_PCM32/15 1462.3197864285032 ns 1455.9130929404507 ns 480824
- #BM_Power_PCM32/16 1462.7091956393392 ns 1455.9862690566056 ns 480739
- #BM_Power_PCM32/17 1827.1057526954876 ns 1818.949706155908 ns 384898
- #BM_Power_PCM32/18 1827.7309048929412 ns 1819.2175362902751 ns 384745
- #BM_Power_PCM32/19 2191.6910336275487 ns 2182.0570090137303 ns 320844
- #BM_Power_PCM32/20 2932.1382076410487 ns 2917.764512203257 ns 239936
- #BM_Power_PCM32/21 2384.572833177335 ns 2374.048604969875 ns 296266
- #BM_Power_PCM32/22 4396.192134082954 ns 4376.258719439749 ns 159930
- #BM_Power_FLOAT/0 167.25444234000543 ns 166.47183513094348 ns 4204937
- #BM_Power_FLOAT/1 167.24129258362885 ns 166.4590919078933 ns 4205036
- #BM_Power_FLOAT/2 351.4320774910175 ns 349.8888578977785 ns 2000574
- #BM_Power_FLOAT/3 532.5129107539586 ns 530.0978074251175 ns 1320411
- #BM_Power_FLOAT/4 716.8967761364072 ns 713.6935400332438 ns 980810
- #BM_Power_FLOAT/5 716.7889045409055 ns 713.7320038176421 ns 980708
- #BM_Power_FLOAT/6 717.0752796480707 ns 713.6972366395144 ns 980690
- #BM_Power_FLOAT/7 716.6102092628516 ns 713.7024690577491 ns 980698
- #BM_Power_FLOAT/8 899.5296958205339 ns 894.9512572444829 ns 782147
- #BM_Power_FLOAT/9 899.2820069645962 ns 894.9592230725831 ns 782158
- #BM_Power_FLOAT/10 899.3434261268515 ns 894.9564490846954 ns 782142
- #BM_Power_FLOAT/11 1079.2320050706119 ns 1074.9236482969181 ns 651197
- #BM_Power_FLOAT/12 1079.995203673193 ns 1074.9423856936505 ns 651123
- #BM_Power_FLOAT/13 1080.2950176525237 ns 1074.9553632314376 ns 651100
- #BM_Power_FLOAT/14 1260.4052233815107 ns 1254.9116087466343 ns 557838
- #BM_Power_FLOAT/15 1441.558180305023 ns 1434.8599962279143 ns 487794
- #BM_Power_FLOAT/16 1442.0232631999454 ns 1434.885356768729 ns 487809
- #BM_Power_FLOAT/17 1802.938510952263 ns 1794.8471734733112 ns 390037
- #BM_Power_FLOAT/18 1802.3492608362737 ns 1794.8067419071836 ns 390038
- #BM_Power_FLOAT/19 2163.5362062414747 ns 2154.6858791842915 ns 324875
- #BM_Power_FLOAT/20 2894.779758388722 ns 2882.248193812651 ns 242915
- #BM_Power_FLOAT/21 2345.738662867257 ns 2334.692247141554 ns 299812
- #BM_Power_FLOAT/22 4341.005108230952 ns 4318.48899075213 ns 162091
+audio_power_benchmark:
+ #BM_Power_PCM16/0 180.92289679585028 ns 180.15104399245882 ns 3885325
+ #BM_Power_PCM16/1 181.16126874965656 ns 180.28731034748992 ns 3885725
+ #BM_Power_PCM16/2 366.9960881450727 ns 365.39403294327775 ns 1916992
+ #BM_Power_PCM16/3 548.5112717240582 ns 546.0744994668512 ns 1124451
+ #BM_Power_PCM16/4 729.0495355718209 ns 725.8359358395215 ns 964519
+ #BM_Power_PCM16/5 730.510620314316 ns 726.6058324908629 ns 964425
+ #BM_Power_PCM16/6 728.7902308009492 ns 725.5839959346857 ns 964255
+ #BM_Power_PCM16/7 728.9437536542266 ns 725.7622692705022 ns 964116
+ #BM_Power_PCM16/8 909.5644815487676 ns 905.2594277274385 ns 773198
+ #BM_Power_PCM16/9 909.8487590417226 ns 905.541972865661 ns 773190
+ #BM_Power_PCM16/10 909.183445722452 ns 905.3521771357088 ns 773057
+ #BM_Power_PCM16/11 1090.09789477985 ns 1085.3346029826685 ns 645060
+ #BM_Power_PCM16/12 1090.3917184788897 ns 1085.1526904891118 ns 645050
+ #BM_Power_PCM16/13 1090.6139456707829 ns 1085.3129791109552 ns 645075
+ #BM_Power_PCM16/14 1270.3910705694595 ns 1264.6607241907009 ns 553473
+ #BM_Power_PCM16/15 1451.2089754139336 ns 1444.6507448881837 ns 484368
+ #BM_Power_PCM16/16 1450.9700749658366 ns 1444.8052807460408 ns 484477
+ #BM_Power_PCM16/17 1812.303903144669 ns 1803.980427679052 ns 388048
+ #BM_Power_PCM16/18 1811.9722496408933 ns 1804.060838412867 ns 387995
+ #BM_Power_PCM16/19 2172.9285815784997 ns 2163.549761392581 ns 323544
+ #BM_Power_PCM16/20 2895.717365719501 ns 2882.4285590756745 ns 242858
+ #BM_Power_PCM16/21 2362.8065810160383 ns 2343.214059957551 ns 298678
+ #BM_Power_PCM16/22 4375.607432531217 ns 4349.7750805466185 ns 162018
+ #BM_Power_PCM24/0 729.5894710558571 ns 726.1363670792448 ns 963781
+ #BM_Power_PCM24/1 729.3882670878899 ns 726.1209068088475 ns 964040
+ #BM_Power_PCM24/2 1458.6373129782264 ns 1451.9195964682701 ns 482143
+ #BM_Power_PCM24/3 2187.9754265826004 ns 2177.8859773833788 ns 321445
+ #BM_Power_PCM24/4 2916.471421225014 ns 2903.4799741173238 ns 241088
+ #BM_Power_PCM24/5 2916.8920647399905 ns 2903.440625661062 ns 241089
+ #BM_Power_PCM24/6 2917.0361012229073 ns 2903.434031522186 ns 241100
+ #BM_Power_PCM24/7 2917.120625640503 ns 2903.6405370541643 ns 241093
+ #BM_Power_PCM24/8 3646.476550238203 ns 3629.390335960183 ns 192880
+ #BM_Power_PCM24/9 3645.840301799253 ns 3629.2467050344903 ns 192870
+ #BM_Power_PCM24/10 3644.269759390758 ns 3629.3227967213143 ns 192883
+ #BM_Power_PCM24/11 4380.128164445656 ns 4354.962614554768 ns 160731
+ #BM_Power_PCM24/12 4388.973117427308 ns 4354.930644037431 ns 160736
+ #BM_Power_PCM24/13 4374.525575418697 ns 4354.927302592676 ns 160721
+ #BM_Power_PCM24/14 5118.992190017827 ns 5087.803814971004 ns 137773
+ #BM_Power_PCM24/15 5834.08466279494 ns 5806.663514107713 ns 120537
+ #BM_Power_PCM24/16 5833.92617600098 ns 5806.763406521383 ns 120557
+ #BM_Power_PCM24/17 7292.561040415548 ns 7258.959351364824 ns 96387
+ #BM_Power_PCM24/18 7290.05913892853 ns 7257.935738432544 ns 96434
+ #BM_Power_PCM24/19 8748.81338349567 ns 8710.19083466056 ns 80368
+ #BM_Power_PCM24/20 11670.86173811743 ns 11617.8891747444 ns 60248
+ #BM_Power_PCM24/21 9483.894109345772 ns 9440.172604919655 ns 74152
+ #BM_Power_PCM24/22 17519.172322663 ns 17440.687347386174 ns 40134
+ #BM_Power_PCM32/0 180.0209277417017 ns 179.20765234810716 ns 3905677
+ #BM_Power_PCM32/1 179.9928913935374 ns 179.1684100688871 ns 3906251
+ #BM_Power_PCM32/2 365.261156361417 ns 363.63974493506385 ns 1925000
+ #BM_Power_PCM32/3 547.3235281262711 ns 544.8913868960904 ns 1284624
+ #BM_Power_PCM32/4 729.4047246495911 ns 726.1992527464306 ns 963796
+ #BM_Power_PCM32/5 729.4026048853057 ns 726.2301922807576 ns 963955
+ #BM_Power_PCM32/6 729.4836424896052 ns 726.2090315177677 ns 963869
+ #BM_Power_PCM32/7 729.4162009832139 ns 726.1991190455375 ns 959868
+ #BM_Power_PCM32/8 912.2165759413726 ns 908.1020182643767 ns 771009
+ #BM_Power_PCM32/9 912.4562880732158 ns 908.1058311552687 ns 770945
+ #BM_Power_PCM32/10 913.6662892148578 ns 909.0608019154854 ns 770979
+ #BM_Power_PCM32/11 1098.264694586373 ns 1092.9951908063122 ns 640440
+ #BM_Power_PCM32/12 1097.8838885144464 ns 1092.9489029436984 ns 640350
+ #BM_Power_PCM32/13 1098.1035265039986 ns 1092.978751342772 ns 640464
+ #BM_Power_PCM32/14 1281.5146387499506 ns 1274.678222409978 ns 549193
+ #BM_Power_PCM32/15 1462.932101769714 ns 1456.0376080037322 ns 477877
+ #BM_Power_PCM32/16 1462.1173842383478 ns 1455.9795936297865 ns 478037
+ #BM_Power_PCM32/17 1826.1988109374897 ns 1818.7870198104167 ns 384848
+ #BM_Power_PCM32/18 1826.7986165280556 ns 1819.0798595772844 ns 384838
+ #BM_Power_PCM32/19 2191.3019592411697 ns 2181.655935394193 ns 320838
+ #BM_Power_PCM32/20 2931.8883516177143 ns 2917.725262082898 ns 239905
+ #BM_Power_PCM32/21 2379.3091425177577 ns 2368.454290770179 ns 295553
+ #BM_Power_PCM32/22 4422.450541711959 ns 4403.615219171803 ns 159943
+ #BM_Power_FLOAT/0 93.18406291611159 ns 92.72058949295965 ns 7553678
+ #BM_Power_FLOAT/1 92.96117761951658 ns 92.53548505608882 ns 7556054
+ #BM_Power_FLOAT/2 188.52435343170848 ns 187.6555618949056 ns 3728037
+ #BM_Power_FLOAT/3 280.48933614094835 ns 279.55113138431284 ns 2504675
+ #BM_Power_FLOAT/4 368.2923103024517 ns 366.59376988731435 ns 1893481
+ #BM_Power_FLOAT/5 368.1838437118831 ns 366.5048535862692 ns 1910340
+ #BM_Power_FLOAT/6 369.36474434357825 ns 367.32105894972386 ns 1909288
+ #BM_Power_FLOAT/7 368.20110381565314 ns 366.5717728132608 ns 1909372
+ #BM_Power_FLOAT/8 458.8126480295947 ns 456.74935048246607 ns 1533061
+ #BM_Power_FLOAT/9 458.29885591662384 ns 456.42679064123894 ns 1533110
+ #BM_Power_FLOAT/10 458.4213634993639 ns 456.3022994462401 ns 1534065
+ #BM_Power_FLOAT/11 548.6835275729175 ns 546.1359314624694 ns 1281050
+ #BM_Power_FLOAT/12 548.5658948648728 ns 546.1222584767767 ns 1281678
+ #BM_Power_FLOAT/13 549.7411047192542 ns 546.3104058269406 ns 1280398
+ #BM_Power_FLOAT/14 639.2796692591446 ns 636.3039215508022 ns 1100432
+ #BM_Power_FLOAT/15 732.6126268814043 ns 728.9874047781268 ns 960126
+ #BM_Power_FLOAT/16 732.3223255154735 ns 729.0677081868715 ns 960135
+ #BM_Power_FLOAT/17 912.688931847384 ns 908.6882020903489 ns 770111
+ #BM_Power_FLOAT/18 912.94823797903 ns 908.767039789369 ns 770256
+ #BM_Power_FLOAT/19 1093.0075590498282 ns 1088.1831744600092 ns 643070
+ #BM_Power_FLOAT/20 1463.591460755948 ns 1457.1715864853975 ns 480370
+ #BM_Power_FLOAT/21 1186.9261155706474 ns 1181.6336976486523 ns 592344
+ #BM_Power_FLOAT/22 2219.151555923471 ns 2208.8095264975427 ns 318879
Pixel 7 (generic intrinsics)
audio_power_benchmark:
- #BM_Power_PCM16/0 337.760142649551 ns 336.25662704492527 ns 2081433
- #BM_Power_PCM16/1 337.9351210323131 ns 336.3553796166739 ns 2081152
- #BM_Power_PCM16/2 672.5364912371965 ns 669.4070783764836 ns 1045607
- #BM_Power_PCM16/3 1006.4414502095067 ns 1001.6641972800023 ns 698824
- #BM_Power_PCM16/4 1339.75865716885 ns 1333.3746327354206 ns 524826
- #BM_Power_PCM16/5 1339.747932594017 ns 1333.3662572435896 ns 525292
- #BM_Power_PCM16/6 1339.081792726286 ns 1333.2895640083038 ns 525010
- #BM_Power_PCM16/7 1338.8341052706744 ns 1333.1123506021647 ns 524857
- #BM_Power_PCM16/8 1674.8266277119628 ns 1667.4998296698461 ns 419773
- #BM_Power_PCM16/9 1675.1191347994438 ns 1667.2425555624354 ns 419978
- #BM_Power_PCM16/10 1674.71266726399 ns 1666.9600314300715 ns 419980
- #BM_Power_PCM16/11 2010.2484537350663 ns 2000.7651024934537 ns 349876
- #BM_Power_PCM16/12 2009.7556108023364 ns 2000.7828645744019 ns 349860
- #BM_Power_PCM16/13 2010.480003104438 ns 2000.914753011257 ns 349854
- #BM_Power_PCM16/14 2344.500011676101 ns 2333.4616815513364 ns 299973
- #BM_Power_PCM16/15 2679.159956909422 ns 2667.7558284453257 ns 262377
- #BM_Power_PCM16/16 2680.335192003616 ns 2667.7298096639197 ns 262378
- #BM_Power_PCM16/17 3349.3067194938394 ns 3333.070394636596 ns 210016
- #BM_Power_PCM16/18 3347.5797958892135 ns 3332.993186265871 ns 210017
- #BM_Power_PCM16/19 4017.7712421677643 ns 4000.1111676171067 ns 175006
- #BM_Power_PCM16/20 5353.909304200122 ns 5332.241398226324 ns 131252
- #BM_Power_PCM16/21 4351.829067676431 ns 4333.01033665303 ns 161561
- #BM_Power_PCM16/22 8033.3449012838255 ns 7998.6481625377255 ns 87512
- #BM_Power_PCM24/0 726.0724740108452 ns 722.793010652718 ns 968016
- #BM_Power_PCM24/1 726.5141612892924 ns 723.0428633830344 ns 968379
- #BM_Power_PCM24/2 1453.0771079215267 ns 1446.3117483448088 ns 483932
- #BM_Power_PCM24/3 2179.805517686665 ns 2169.532832665915 ns 322636
- #BM_Power_PCM24/4 2904.8858799182244 ns 2892.571683017743 ns 241982
- #BM_Power_PCM24/5 2905.290520956667 ns 2892.6407436793943 ns 241986
- #BM_Power_PCM24/6 2905.7997231004174 ns 2892.3390330578545 ns 242000
- #BM_Power_PCM24/7 2906.2596490773803 ns 2892.7177675295025 ns 241992
- #BM_Power_PCM24/8 3632.076809461512 ns 3615.545919869441 ns 193609
- #BM_Power_PCM24/9 3632.5518469824924 ns 3615.6390283459427 ns 193608
- #BM_Power_PCM24/10 3631.5230189943823 ns 3615.826974034231 ns 193601
- #BM_Power_PCM24/11 4358.713629609595 ns 4338.867286915848 ns 161333
- #BM_Power_PCM24/12 4359.231924050327 ns 4338.824437653807 ns 161333
- #BM_Power_PCM24/13 4356.325355513422 ns 4339.28872069524 ns 161322
- #BM_Power_PCM24/14 5086.698249103073 ns 5062.681608123064 ns 138273
- #BM_Power_PCM24/15 5812.5060886912215 ns 5785.645307165088 ns 120961
- #BM_Power_PCM24/16 5812.5832141796 ns 5785.508699569401 ns 120983
- #BM_Power_PCM24/17 7263.989452119297 ns 7231.864374560889 ns 96796
- #BM_Power_PCM24/18 7263.645282618586 ns 7231.993934070503 ns 96770
- #BM_Power_PCM24/19 8717.248425410799 ns 8678.296803709562 ns 80656
- #BM_Power_PCM24/20 11627.892071566856 ns 11574.479277610539 ns 60466
- #BM_Power_PCM24/21 9446.526244343248 ns 9406.349543664368 ns 74397
- #BM_Power_PCM24/22 17447.99081596151 ns 17374.784496239492 ns 40287
- #BM_Power_PCM32/0 366.5107706071915 ns 364.8308462714918 ns 1919065
- #BM_Power_PCM32/1 366.5168704771794 ns 364.7554321738571 ns 1918707
- #BM_Power_PCM32/2 730.2924269058933 ns 727.1057881827118 ns 962962
- #BM_Power_PCM32/3 1093.9912603896798 ns 1088.7929435922993 ns 642820
- #BM_Power_PCM32/4 1456.8093080845226 ns 1449.9832478951175 ns 482805
- #BM_Power_PCM32/5 1456.1232191254142 ns 1449.855881567137 ns 482839
- #BM_Power_PCM32/6 1456.2008645317271 ns 1449.290242604125 ns 482803
- #BM_Power_PCM32/7 1457.0090571482128 ns 1450.1991782065193 ns 482603
- #BM_Power_PCM32/8 1819.8793533353248 ns 1811.1948393741498 ns 386426
- #BM_Power_PCM32/9 1819.2882280461354 ns 1811.0842554160467 ns 386444
- #BM_Power_PCM32/10 1822.4888939503587 ns 1811.2359906431732 ns 386456
- #BM_Power_PCM32/11 2182.958268570418 ns 2172.377140481356 ns 322299
- #BM_Power_PCM32/12 2181.462500754493 ns 2171.936179393034 ns 322153
- #BM_Power_PCM32/13 2181.9423435499857 ns 2172.6346584016715 ns 322323
- #BM_Power_PCM32/14 2545.0172319340754 ns 2533.932252353998 ns 276231
- #BM_Power_PCM32/15 2910.0457980163624 ns 2897.3537004237564 ns 241648
- #BM_Power_PCM32/16 2911.5361569110396 ns 2897.792890320363 ns 241558
- #BM_Power_PCM32/17 3627.9648736853173 ns 3610.617067822403 ns 193815
- #BM_Power_PCM32/18 3626.573311653762 ns 3610.4587441726208 ns 193912
- #BM_Power_PCM32/19 4371.516904489751 ns 4351.228854700868 ns 160875
- #BM_Power_PCM32/20 5833.295410225075 ns 5806.0874899420005 ns 120551
- #BM_Power_PCM32/21 4733.5978237221925 ns 4713.533180254132 ns 148507
- #BM_Power_PCM32/22 8761.069766861208 ns 8719.434463509126 ns 80253
- #BM_Power_FLOAT/0 309.7573236829997 ns 308.3100559643444 ns 2270374
- #BM_Power_FLOAT/1 309.82671751979507 ns 308.31727146129305 ns 2269889
- #BM_Power_FLOAT/2 616.5533244216624 ns 613.6735468134156 ns 1140528
- #BM_Power_FLOAT/3 924.1979909165235 ns 919.7778739898862 ns 761050
- #BM_Power_FLOAT/4 1229.228159640607 ns 1223.550260462179 ns 572060
- #BM_Power_FLOAT/5 1229.1571063156637 ns 1223.5816435152462 ns 572103
- #BM_Power_FLOAT/6 1229.316886623843 ns 1223.9691527852942 ns 572110
- #BM_Power_FLOAT/7 1230.6891998748167 ns 1223.8458668046858 ns 571882
- #BM_Power_FLOAT/8 1537.1050916942645 ns 1530.2548960451468 ns 457410
- #BM_Power_FLOAT/9 1537.624473698849 ns 1530.2998740768824 ns 457422
- #BM_Power_FLOAT/10 1537.8752661993187 ns 1530.7318127550295 ns 457326
- #BM_Power_FLOAT/11 1839.3751016921826 ns 1830.8065497602443 ns 382243
- #BM_Power_FLOAT/12 1840.0720637536492 ns 1831.6316314246699 ns 382120
- #BM_Power_FLOAT/13 1839.6525013051378 ns 1831.4300958752372 ns 382059
- #BM_Power_FLOAT/14 2148.22182778337 ns 2138.606070233867 ns 327335
- #BM_Power_FLOAT/15 2452.349344804406 ns 2441.433373571317 ns 286628
- #BM_Power_FLOAT/16 2452.055538106065 ns 2441.4724420438542 ns 286596
- #BM_Power_FLOAT/17 3069.5813045295163 ns 3056.235010106019 ns 229071
- #BM_Power_FLOAT/18 3068.6837668400217 ns 3055.440662658508 ns 229198
- #BM_Power_FLOAT/19 3672.409374171318 ns 3656.6498973574044 ns 191441
- #BM_Power_FLOAT/20 4929.296286126466 ns 4905.616779854631 ns 142683
- #BM_Power_FLOAT/21 4001.2961863843757 ns 3975.4695817490483 ns 176210
- #BM_Power_FLOAT/22 7390.10927792279 ns 7357.815966854894 ns 95097
+ #BM_Power_PCM16/0 141.39894261206203 ns 140.74631807527237 ns 4973961
+ #BM_Power_PCM16/1 141.30068134838092 ns 140.673563398614 ns 4974675
+ #BM_Power_PCM16/2 278.2230465394509 ns 276.91650670645566 ns 2526670
+ #BM_Power_PCM16/3 416.70229281643674 ns 413.696774806424 ns 1694813
+ #BM_Power_PCM16/4 551.6619269166048 ns 549.2264481641901 ns 1270039
+ #BM_Power_PCM16/5 550.4119551187774 ns 548.1631002490425 ns 1276491
+ #BM_Power_PCM16/6 549.8963120792694 ns 547.3601694915252 ns 1273456
+ #BM_Power_PCM16/7 551.9152668960979 ns 549.5658038666706 ns 1274378
+ #BM_Power_PCM16/8 691.2875636182188 ns 687.659654354893 ns 1025387
+ #BM_Power_PCM16/9 689.7719348428035 ns 683.1671495932702 ns 1017753
+ #BM_Power_PCM16/10 688.385108618128 ns 685.2313404997149 ns 1021343
+ #BM_Power_PCM16/11 824.7405061324669 ns 821.3459965179951 ns 851234
+ #BM_Power_PCM16/12 824.8310788746044 ns 821.1664236259036 ns 854452
+ #BM_Power_PCM16/13 822.9901445586745 ns 819.2438917777235 ns 857901
+ #BM_Power_PCM16/14 961.7364426681155 ns 957.7359233226135 ns 731689
+ #BM_Power_PCM16/15 1060.764876366047 ns 1056.6351267548569 ns 641790
+ #BM_Power_PCM16/16 1097.4902606840346 ns 1093.1660882847204 ns 640292
+ #BM_Power_PCM16/17 1371.8822829713993 ns 1366.1015167052424 ns 511965
+ #BM_Power_PCM16/18 1379.527502464746 ns 1369.2386592623832 ns 512136
+ #BM_Power_PCM16/19 1642.4514828653857 ns 1635.289426374952 ns 428869
+ #BM_Power_PCM16/20 2181.5514388801307 ns 2171.463230349669 ns 321216
+ #BM_Power_PCM16/21 1772.0538271784708 ns 1764.8680693837691 ns 396231
+ #BM_Power_PCM16/22 3253.2907084319877 ns 3238.3741398011207 ns 219426
+ #BM_Power_PCM24/0 728.6418691492001 ns 725.3989273888943 ns 964935
+ #BM_Power_PCM24/1 728.3793964971507 ns 725.3592953992454 ns 964972
+ #BM_Power_PCM24/2 1457.2141301147049 ns 1450.6804473488357 ns 482487
+ #BM_Power_PCM24/3 2186.456712541353 ns 2176.054527369373 ns 321710
+ #BM_Power_PCM24/4 2930.220041861956 ns 2913.4611367827733 ns 241295
+ #BM_Power_PCM24/5 2914.6065552550235 ns 2901.222598977792 ns 241241
+ #BM_Power_PCM24/6 2914.4422212238487 ns 2901.1865175244834 ns 241291
+ #BM_Power_PCM24/7 2914.0364494153173 ns 2901.173080031326 ns 241293
+ #BM_Power_PCM24/8 3641.242930020149 ns 3626.409360996713 ns 193035
+ #BM_Power_PCM24/9 3654.4684532440847 ns 3632.299661712377 ns 193031
+ #BM_Power_PCM24/10 3642.4799922930624 ns 3626.4395211007954 ns 193026
+ #BM_Power_PCM24/11 4370.161811319268 ns 4351.627426113113 ns 160854
+ #BM_Power_PCM24/12 4371.614458426819 ns 4351.7940097723185 ns 160862
+ #BM_Power_PCM24/13 4387.422872492355 ns 4363.170747931368 ns 160857
+ #BM_Power_PCM24/14 5101.130549812997 ns 5077.108034788132 ns 137863
+ #BM_Power_PCM24/15 5826.311256536362 ns 5802.145559755925 ns 120624
+ #BM_Power_PCM24/16 5829.212266562846 ns 5802.334386087034 ns 120636
+ #BM_Power_PCM24/17 7284.666217547489 ns 7252.658321762346 ns 96506
+ #BM_Power_PCM24/18 7283.647952825528 ns 7252.640452115548 ns 96524
+ #BM_Power_PCM24/19 8741.574695279003 ns 8703.302113901984 ns 80420
+ #BM_Power_PCM24/20 11660.35250035382 ns 11608.754092379155 ns 60295
+ #BM_Power_PCM24/21 9498.126111783777 ns 9429.283448331573 ns 74204
+ #BM_Power_PCM24/22 17500.249881617296 ns 17427.527024672003 ns 40167
+ #BM_Power_PCM32/0 482.2639310164815 ns 480.16807832291283 ns 1457862
+ #BM_Power_PCM32/1 482.5041888036376 ns 480.17729091453714 ns 1457813
+ #BM_Power_PCM32/2 970.7658094980881 ns 966.432565916653 ns 724248
+ #BM_Power_PCM32/3 1470.8525316656937 ns 1453.8102836400858 ns 481561
+ #BM_Power_PCM32/4 1945.6320264943743 ns 1937.5130371239736 ns 361276
+ #BM_Power_PCM32/5 1957.2762784111894 ns 1941.2989846816433 ns 361266
+ #BM_Power_PCM32/6 1947.606134398178 ns 1937.6027027251473 ns 361339
+ #BM_Power_PCM32/7 1945.564237181621 ns 1937.4354472085072 ns 361185
+ #BM_Power_PCM32/8 2449.222944697634 ns 2430.0832236340734 ns 288668
+ #BM_Power_PCM32/9 2447.1957648212733 ns 2429.213497391568 ns 288678
+ #BM_Power_PCM32/10 2451.5493899925777 ns 2433.2397932673425 ns 288682
+ #BM_Power_PCM32/11 2918.8149689454144 ns 2907.2442323189375 ns 240738
+ #BM_Power_PCM32/12 2922.758025449901 ns 2907.4440844806995 ns 240765
+ #BM_Power_PCM32/13 2920.348076535013 ns 2907.431136456142 ns 240766
+ #BM_Power_PCM32/14 3409.4233573973634 ns 3392.591268822002 ns 206341
+ #BM_Power_PCM32/15 3892.2040848068073 ns 3875.2047879260954 ns 180621
+ #BM_Power_PCM32/16 3892.308491260789 ns 3875.119794723041 ns 180634
+ #BM_Power_PCM32/17 4888.503959312049 ns 4860.592739616924 ns 144345
+ #BM_Power_PCM32/18 4873.615265528875 ns 4849.78500253456 ns 144011
+ #BM_Power_PCM32/19 5845.323708631462 ns 5818.852960983018 ns 120281
+ #BM_Power_PCM32/20 7797.718549579573 ns 7766.08286177126 ns 90126
+ #BM_Power_PCM32/21 6337.479234114833 ns 6314.164677589355 ns 111023
+ #BM_Power_PCM32/22 11808.601733014153 ns 11756.832074866097 ns 59199
+ #BM_Power_FLOAT/0 94.11062191883384 ns 93.5736954638585 ns 7472407
+ #BM_Power_FLOAT/1 94.06728569924215 ns 93.63184288806207 ns 7483938
+ #BM_Power_FLOAT/2 191.0388817303329 ns 190.21414162539318 ns 3681755
+ #BM_Power_FLOAT/3 276.28209107363284 ns 275.12531375653344 ns 2531023
+ #BM_Power_FLOAT/4 370.5403080819118 ns 367.7074869536902 ns 1885974
+ #BM_Power_FLOAT/5 368.4663243042483 ns 366.8448226390385 ns 1909834
+ #BM_Power_FLOAT/6 368.1926881965903 ns 366.49226689956845 ns 1909842
+ #BM_Power_FLOAT/7 368.2706570163833 ns 366.7828121257029 ns 1907717
+ #BM_Power_FLOAT/8 458.03934294857197 ns 456.15671441471744 ns 1534862
+ #BM_Power_FLOAT/9 458.27552421764045 ns 456.13744029161853 ns 1533495
+ #BM_Power_FLOAT/10 458.581440769096 ns 456.3724914204393 ns 1533587
+ #BM_Power_FLOAT/11 551.6756052533791 ns 549.2340707415847 ns 1274102
+ #BM_Power_FLOAT/12 551.9493186375631 ns 549.5109769458269 ns 1274216
+ #BM_Power_FLOAT/13 554.0572718262348 ns 550.19352884349 ns 1274239
+ #BM_Power_FLOAT/14 642.1574617184507 ns 639.3852457219499 ns 1094774
+ #BM_Power_FLOAT/15 735.7774064797563 ns 732.5321681956469 ns 960001
+ #BM_Power_FLOAT/16 737.5902914983094 ns 734.2400489412615 ns 950527
+ #BM_Power_FLOAT/17 911.3091743315161 ns 907.1963370929745 ns 773211
+ #BM_Power_FLOAT/18 911.1150959691154 ns 907.0670443387347 ns 772981
+ #BM_Power_FLOAT/19 1090.110913165201 ns 1085.3036540513142 ns 644928
+ #BM_Power_FLOAT/20 1471.985775109006 ns 1465.513079056131 ns 477825
+ #BM_Power_FLOAT/21 1195.7143711208662 ns 1190.262823056866 ns 587087
+ #BM_Power_FLOAT/22 2220.2886873989446 ns 2209.9696500844384 ns 317991
*/
diff --git a/audio_utils/power.cpp b/audio_utils/power.cpp
index 699358f0..5f3dcbe6 100644
--- a/audio_utils/power.cpp
+++ b/audio_utils/power.cpp
@@ -156,11 +156,14 @@ inline void energy(const void *amplitudes, size_t size, size_t numChannels, floa
// faster than the NEON intrinsic version. Optimize this.
#ifdef USE_NEON
// The type conversion appears faster if we use a neon accumulator type.
-constexpr size_t kVectorWidth = 4;
-using AccumulatorType = float32x4_t;
+// Using a vector length of 4 triggers the code below to use the neon type float32x4_t.
+constexpr size_t kVectorWidth16 = 4; // neon float32x4_t
+constexpr size_t kVectorWidth32 = 4; // neon float32x4_t
+constexpr size_t kVectorWidthFloat = 8; // use generic intrinsics for float.
#else
-constexpr size_t kVectorWidth = 4;
-using AccumulatorType = android::audio_utils::intrinsics::internal_array_t<float, kVectorWidth>;
+constexpr size_t kVectorWidth16 = 8;
+constexpr size_t kVectorWidth32 = 8;
+constexpr size_t kVectorWidthFloat = 8;
#endif
template <typename Scalar, size_t N>
@@ -172,6 +175,13 @@ inline float energyMonoVector(const void *amplitudes, size_t size)
float accumulator = 0;
+#ifdef USE_NEON
+ using AccumulatorType = std::conditional_t<N == 4, float32x4_t,
+ android::audio_utils::intrinsics::internal_array_t<float, N>>;
+#else
+ using AccumulatorType = android::audio_utils::intrinsics::internal_array_t<float, N>;
+#endif
+
// seems that loading input data is fine using our generic intrinsic.
using Vector = android::audio_utils::intrinsics::internal_array_t<Scalar, N>;
@@ -210,13 +220,13 @@ inline float energyMonoVector(const void *amplitudes, size_t size)
template <>
inline float energyMono<AUDIO_FORMAT_PCM_FLOAT>(const void *amplitudes, size_t size)
{
- return energyMonoVector<float, kVectorWidth>(amplitudes, size);
+ return energyMonoVector<float, kVectorWidthFloat>(amplitudes, size);
}
template <>
inline float energyMono<AUDIO_FORMAT_PCM_16_BIT>(const void *amplitudes, size_t size)
{
- return energyMonoVector<int16_t, kVectorWidth>(amplitudes, size)
+ return energyMonoVector<int16_t, kVectorWidth16>(amplitudes, size)
* normalizeEnergy<AUDIO_FORMAT_PCM_16_BIT>();
}
@@ -224,7 +234,7 @@ inline float energyMono<AUDIO_FORMAT_PCM_16_BIT>(const void *amplitudes, size_t
template <>
inline float energyMono<AUDIO_FORMAT_PCM_32_BIT>(const void *amplitudes, size_t size)
{
- return energyMonoVector<int32_t, kVectorWidth>(amplitudes, size)
+ return energyMonoVector<int32_t, kVectorWidth32>(amplitudes, size)
* normalizeEnergy<AUDIO_FORMAT_PCM_32_BIT>();
}
@@ -232,7 +242,7 @@ inline float energyMono<AUDIO_FORMAT_PCM_32_BIT>(const void *amplitudes, size_t
template <>
inline float energyMono<AUDIO_FORMAT_PCM_8_24_BIT>(const void *amplitudes, size_t size)
{
- return energyMonoVector<int32_t, kVectorWidth>(amplitudes, size)
+ return energyMonoVector<int32_t, kVectorWidth32>(amplitudes, size)
* normalizeEnergy<AUDIO_FORMAT_PCM_8_24_BIT>();
}