diff options
author | Andy Hung <hunga@google.com> | 2024-02-06 17:40:14 -0800 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2024-03-12 14:08:51 -0700 |
commit | bbb616de245be8fc48373622b520623c6450064f (patch) | |
tree | 8f72300f6ca4bf964c856265646a1d51fd859790 | |
parent | 4a0897fd6085f6e2e1618d4c466982a4af4b445e (diff) | |
download | media-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.cpp | 369 | ||||
-rw-r--r-- | audio_utils/power.cpp | 26 |
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>(); } |