Optimize decoder IFFT

This commit is contained in:
Christopher Taylor 2017-05-31 23:21:25 -07:00
parent c7f0085948
commit b2ad9403fe
3 changed files with 11 additions and 8 deletions

View File

@ -31,13 +31,16 @@
/* /*
TODO: TODO:
+ Look into 12-bit fields as a performance optimization Short-term:
+ FF8 decoder needs DIT FFT optimization
+ Port DIT FFT code to FF16
+ Unroll first/final butterflies to avoid extra copies/xors in encoder + Unroll first/final butterflies to avoid extra copies/xors in encoder
+ Skip a lot of the initial FWHT() layers that are just operating on zeroes
+ For the actual FFT(), I should be unrolling the bottom two layers
and performing them in a specialized function that does 2 <=> 2 and
then 1<=>1, 1<=>1 operations in local registers/cache
+ Multithreading + Multithreading
Mid-term:
+ Look into 12-bit fields as a performance optimization
Long-term:
+ Evaluate the error locator polynomial based on fast polynomial interpolations in O(k log^2 k) + Evaluate the error locator polynomial based on fast polynomial interpolations in O(k log^2 k)
+ Look into getting EncodeL working so we can support larger recovery sets + Look into getting EncodeL working so we can support larger recovery sets
+ Implement the decoder algorithm from {3} based on the Forney algorithm + Implement the decoder algorithm from {3} based on the Forney algorithm

View File

@ -1544,7 +1544,7 @@ void ReedSolomonDecode(
IFFT_DIT( IFFT_DIT(
buffer_bytes, buffer_bytes,
nullptr, nullptr,
n, m + original_count,
work, work,
nullptr, nullptr,
n, n,

View File

@ -42,8 +42,8 @@ using namespace std;
struct TestParameters struct TestParameters
{ {
#ifdef LEO_HAS_FF16 #ifdef LEO_HAS_FF16
unsigned original_count = 1000; // under 65536 unsigned original_count = 100; // under 65536
unsigned recovery_count = 200; // under 65536 - original_count unsigned recovery_count = 20; // under 65536 - original_count
#else #else
unsigned original_count = 128; // under 65536 unsigned original_count = 128; // under 65536
unsigned recovery_count = 128; // under 65536 - original_count unsigned recovery_count = 128; // under 65536 - original_count