Skip to content

Improve performance polar encoder i.e., 3GPP 38.212 5.3.1.2 function

Mikel Irazabal requested to merge perf_improv_polar_encoder into develop

Improve the polar encoding e.g., u->d or the Kronecker matrix according to 3GPP 38.212 5.3.1.2. From a N^2 algorithm to NlogN

Benchmark results for N = 512 bits e.g., PBCH:

2024-03-05T17:48:44+01:00
Running ./a.out
Run on (8 X 1480.55 MHz CPU s)
CPU Caches:
  L1 Data 48 KiB (x4)
  L1 Instruction 32 KiB (x4)
  L2 Unified 1280 KiB (x4)
  L3 Unified 12288 KiB (x1)
Load Average: 0.53, 0.47, 0.56
-----------------------------------------------------------
Benchmark                 Time             CPU   Iterations
-----------------------------------------------------------
BM_POLAR_OAI           1322 ns         1321 ns       483230
BM_POLAR_OAI_NEW        140 ns          140 ns      4998694

Code for the benchmark:

https://github.com/mirazabal/bm_polar_encoder.git

When measuring directly in the OAI function nr_polar_uxG, the first result glance show a performance improvement between x7 and x15 with no load (only ping traffic).

PS: I can connect and send data using RFSim. However, the validation test to compare the output of both algorithms, when feed with random data does not pass. I suspect that the problem may lay in the table constants, as the validation test passes when compared with other polar implementations e.g., srsRAN. ToDO: Carefully observe CI tests results.

Edited by Mikel Irazabal

Merge request reports