dump1090-fa/wisdom/wisdom.pi0w

48 lines
3.2 KiB
Plaintext
Raw Permalink Normal View History

Move all converters to starch-based implementations (#97) * Switch all conversion routines to use starch. main user-visible changes: * ensure you check out submodules ('git clone --recurse-submodules") * --version shows the CPU features and DSP implementations in use * --wisdom allows overriding of the built-in architecture wisdom * --dcfilter no longer supported * "starch-benchmark" binary will benchmark all options on the current machine and can produce a wisdom file to feed to the --wisdom option If you have a usecase for --dcfilter, please get in touch and let me know - it's an edge case and for now there's no starch/DSP support for it, but support can be written if needed. In almost all cases the new conversion routines are slightly or substantially faster than the old conversion routines. The only case that is slower is SC16/SC16Q11 on a Pi 0, which is around 10% slower due to changing from heavily approximated lookup tables to higher quality results (but SC16 is probably already out of reach of a Pi 0) * No need to build with SC16Q11_TABLE_BITS any more * Add oneoff/uc8_capture_stats (reads a UC8 capture; measures min/max/mean I and Q) * Switch UC8 conversion to 127.4 center, 128 range. Looking at actual UC8 captures from a RTL2832, the mean I and Q are actually at 127.4, so use that as the zero point. This means that the resulting I/Q maximum values could be as large as 127.6. Switch to 128 for simplicity. * Switch to the new UC8 zero offset in benchmarks, fix some bugs * Fix some bugs in SC16/SC16Q11 validation, tighten the max error requirements * Ditch UC8 approximation path, add a NEON VRQSQRTE path. * Tweak the SC16 exact path, add a new impl that uses a mix of u32 & floats. * SC16Q11 impl tweaks: * add a u32->float exact path * ditch the approximation path * add a NEON VRSQRTE path * add a 12-bit table path (using the full signed I/Q value, not absolute value) * Ditch SC16 approximation path, add NEON vrsqrte path * Add oneoff/dsp_error_measurement This runs sample input through the DSP functions that are allowed to be inexact and dumps the results as a TSV suitable for feeding to gnuplot to look at the actual errors. * Update make clean, make wisdom targets * Update wisdom based on benchmarking * Preserve the raw wisdom benchmark data * Update to latest starch * Update .gitignore for new wisdom files * Update starch generated code * Build starch-benchmark as part of the 'all' target * Use wisdom from /etc/dump1090-fa/wisdom.local if present * Package starch-benchmark and a helper script to generate local wisdom data * Remove submodules in preparation for importing them directly * Import cpu_features v0.6.0 from https://github.com/google/cpu_features/releases/tag/v0.6.0 * Import starch at commit a725c8491dc33a321565d451b385131e589d8490 from https://github.com/flightaware/starch
2021-01-21 11:45:00 +00:00
# Hardware : BCM2835
# Revision : 9000c1
# Model : Raspberry Pi Zero W Rev 1.1
#
# "performance" cpufreq governor @ 1GHz
# generated by ./starch-benchmark -i 15 -r wisdom.local -o wisdom.local
magnitude_power_uc8 lookup_unroll_4_generic # 5711147 ns/call
magnitude_power_uc8 twopass_generic # 6205338 ns/call
magnitude_power_uc8 lookup_generic # 6880126 ns/call
magnitude_power_uc8_aligned lookup_unroll_4_generic # 5750495 ns/call
magnitude_power_uc8_aligned twopass_generic # 6209062 ns/call
magnitude_power_uc8_aligned lookup_generic # 6941100 ns/call
magnitude_sc16 exact_float_generic # 28623479 ns/call
magnitude_sc16 exact_u32_generic # 28660776 ns/call
magnitude_sc16_aligned exact_float_generic # 28613950 ns/call
magnitude_sc16_aligned exact_u32_generic # 28671952 ns/call
magnitude_sc16q11 exact_float_generic # 7142819 ns/call
magnitude_sc16q11 exact_u32_generic # 7146487 ns/call
magnitude_sc16q11 11bit_table_generic # 17820638 ns/call
magnitude_sc16q11 12bit_table_generic # 19280398 ns/call
magnitude_sc16q11_aligned exact_float_generic # 7130689 ns/call
magnitude_sc16q11_aligned exact_u32_generic # 7152986 ns/call
magnitude_sc16q11_aligned 11bit_table_generic # 17872904 ns/call
magnitude_sc16q11_aligned 12bit_table_generic # 19332280 ns/call
magnitude_uc8 lookup_unroll_4_generic # 4420819 ns/call
magnitude_uc8 lookup_generic # 6346327 ns/call
magnitude_uc8 exact_generic # 9264172 ns/call
magnitude_uc8_aligned lookup_unroll_4_generic # 4699258 ns/call
magnitude_uc8_aligned lookup_generic # 6600661 ns/call
magnitude_uc8_aligned exact_generic # 9308206 ns/call
mean_power_u16 u64_generic # 976416 ns/call
mean_power_u16 u32_generic # 1040812 ns/call
mean_power_u16 float_generic # 1794994 ns/call
mean_power_u16_aligned u64_generic # 961388 ns/call
mean_power_u16_aligned u32_generic # 1024339 ns/call
mean_power_u16_aligned float_generic # 1778085 ns/call