perf: add two-pass min1/min2 cnProc for BG1 and BG2 (CPU)
nrLDPC_cnProc_BG1_2pass and nrLDPC_cnProc_BG2_2pass replace the
LUT-exclude-self approach with a two-pass algorithm:
Pass 1: single sweep over all numBN inputs to collect min1, min2
(two smallest |vk|) and the full sign product via sign_epi8.
Pass 2: re-read each vk, select min2 where |vk|==min1 (tie approx),
remove self sign with sign_epi8(vsgn_all, vk), and store.
Memory reads per CN group: 2*numBN vs numBN*(numBN-1) for LUT approach:
numBN= 4: 8 vs 12 (1.5x fewer)
numBN= 7: 14 vs 42 (3.0x fewer)
numBN=10: 20 vs 90 (4.5x fewer)
numBN=19: 38 vs 342 (9.0x fewer)
A generic nrLDPC_cnProc_group_2pass(buf, res, numBN, M, off) helper
does the work; the BG1/BG2 wrappers loop over their degree groups and
derive the BN stride from lut_numCnInCnGroups_BG1/2_R13/15 exactly as
the existing functions do. No new LUT tables are required.
Placed inside the #else (non-AVX512) block alongside the existing
BG1/BG2 functions; AVX512 path is unchanged.
Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by:
Raymond Knopp <raymond.knopp@eurecom.fr>
Showing
Please register or sign in to comment