Files
openairinterface5g/openair1/PHY/CODING
Raymond Knopp 0e09c7c347 Add changes for avx512/aarch64 ldpc encoder optimizations
newly-generated files for innermost part of the parity bit
generation which, for AVX512, uses the mm512_permutex2var_epi8
instruction and for 128-bit (aarch64) the mm_alignr_epi8 (vextq_s8) in
the computation corresponding to each non-zero bit of the H matrix.

It is generated with ldpctest -n0 -g1. the changes for this are in a
future MR.  I did these changes to compare with the GPU version
(ldpc_encoder_cuda), so that the CPU version is as fast as possible. The
generator will come when we merge the GPU encoder/decoder which also has
a generator for the CUDA version. it was difficult to extract the
changes in ldpctest/ldpc_encoder.c so I just took the generated file.

This allows for removing a very large memcpy and reduces the memory
demand for the parity matrix computation. For the moment this is limited
to largest case in BG1, namely Zc=384. This is the only format used when
the number of segments after codeblock segmentation is large (>8).  This
improves the timing required for ldpc parity bits generation by more
than a factor 2 with AVX512. This significantly reduces the total time
to generate the DLSCH/PDSCH
2025-09-02 08:55:08 +02:00
..
2025-08-11 08:38:06 +00:00
2023-06-01 12:07:26 +02:00
2025-08-11 08:38:06 +00:00
2019-01-07 16:22:28 +01:00
2021-10-24 14:47:24 +02:00
2019-01-07 16:22:28 +01:00
2019-01-07 16:22:28 +01:00
2019-01-07 16:22:28 +01:00
2025-06-03 17:03:17 +02:00
2019-01-07 16:22:28 +01:00
2021-11-01 17:57:04 +01:00

PHY/CODING
----------


This directory contains the transport channel coding/decoding functions for both OpenAirInterface and a subset of LTE/WiMAX/WIFI MODEMS.
They can only be compiled on x86 platforms (at least sse,sse2 are required).

Files
------


crc_byte.c                     : 3GPP CRC routines (8,16,24 bit, LTE - 36-212 and WCDMA 25-212)
ccoding_byte.c                 : WIFI/WIMAX rate 1/2 convolutional code
ccoding_byte_lte.c             : 3GPP LTE rate 1/3 tail-biting convolutional code with CRC embedding
3gpplte.c                      : 3GPP LTE rate 1/3 turbo code
3gpp_turbo_decoder.c           : 3GPP/LTE turbo decoder (non-optimized)
3gpplte_turbo_decoder_sse.c    : 3GPP/LTE turbo decoder (optimized for SSE2/SSE3)
lte_interleaver.h              : 3GPP/LTE interleaver coefficient table (from 3GPP 36-212)
lte_interleaver_inline.h       : 3GPP/LTE Interleaver inline functions (from 3GPP 36-212)
lte_tf.m                       : 3GPP/LTE transport format size calculator
rate_matching.c                : OpenAirInterface pseudo-random rate matching
viterbi.c                      : WIFI/WIMAX rate 1/2 Viterbi decoder (non-optimized and optimized versions)
viterbi_lte.c                  : 3GPP LTE Viterbi decoder (SIMD optimized)
lte_rate_matching.c            : 3GPP/LTE Rate (de)matching and sub-block (de)interleaving routines (strict compliance with 3GPP 36-212, Release 8, 2009-03)
Makefile		       : Generates simple unitary tests for the three coding formats.  Note this doesn't do a performance evaluation.


Directories
-----------

TESTBENCH                      : Testbench for channel coding/decoding



Use of unitary tests
--------------------

Three tests can be compiled with "make".  They are standalone and do not require the rest of openair1.
They only test the following files:

crc_byte.c
ccoding_byte.c
ccdoing_byte_lte.c
3gpp_turbo_decoder_sse.c
3gpplte.c
viterbi.c
viterbi_lte.c

After "make", you should have three executables, turbo_test, rate13cc_test and rate12cc_test which should 
all have executed and printed proof of correct execution (at least for the default block lengths).  Further 
tests should be performed with the performance tests in TESTBENCH, which require the rest of openair1.