Test for avx512
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
|
||||
#ifndef __AVX512BW__
|
||||
#pragma GCC push_options
|
||||
//#pragma GCC target("avx512bw")
|
||||
#pragma GCC target("avx512bw")
|
||||
#define __DISABLE_AVX512BW__
|
||||
#endif /* __AVX512BW__ */
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
#ifndef __AVX512F__
|
||||
#pragma GCC push_options
|
||||
//#pragma GCC target("avx512f")
|
||||
#pragma GCC target("avx512f")
|
||||
#define __DISABLE_AVX512F__
|
||||
#endif /* __AVX512F__ */
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* \brief Defines the functions for check node processing
|
||||
* Version AVX512
|
||||
*/
|
||||
|
||||
#include <immintrin.h>
|
||||
#ifndef __NR_LDPC_BNPROC__H__
|
||||
#define __NR_LDPC_BNPROC__H__
|
||||
|
||||
@@ -59,7 +59,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
uint32_t cnOffsetInGroup;
|
||||
uint8_t idxBnGroup = 0;
|
||||
|
||||
__m512i zmm0, zmm1, zmmRes0, zmmRes1;
|
||||
__m512i zmm0, zmm1, zmmRes0, zmmRes1,tmp;
|
||||
|
||||
// =====================================================================
|
||||
// Process group with 1 CN
|
||||
@@ -96,8 +96,8 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
//-*p_llrRes = _mm512_permute4x64_epi64(zmm0, 0xD8); // revenir ?
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
//-*p_llrRes = _mm512_permutevar_epi32 (tmp, zmm0); // revenir ?
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -201,7 +201,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -254,7 +254,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -307,7 +307,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -360,7 +360,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -413,7 +413,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -466,7 +466,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -519,7 +519,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -572,7 +572,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -625,7 +625,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -678,7 +678,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -731,7 +731,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -784,7 +784,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -837,7 +837,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -890,7 +890,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -943,7 +943,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -996,7 +996,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1049,7 +1049,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1102,7 +1102,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1155,7 +1155,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1208,7 +1208,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1261,7 +1261,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1314,7 +1314,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1367,7 +1367,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1420,7 +1420,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1473,7 +1473,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1526,7 +1526,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
// Pack results back to epi8
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0, 0xD8,zmm1);
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1571,16 +1571,16 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
|
||||
// Add LLR from receiver input
|
||||
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||
zmmRes0 = _mm512_adds_epi16(ymmRes0, ymm0);
|
||||
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
|
||||
|
||||
ymm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
||||
ymmRes1 = _mm512_adds_epi16(ymmRes1, ymm1);
|
||||
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
||||
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
|
||||
|
||||
// Pack results back to epi8
|
||||
ymm0 = _mm512_packs_epi16(ymmRes0, ymmRes1);
|
||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
||||
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||
*p_llrRes = _mm512_permute4x64_epi64(ymm0, 0xD8);
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
// zmm0 = [zmmRes1[255:128] zmmRes0[255:128] zmmRes1[127:0] zmmRes0[127:0]]
|
||||
// p_llrRes = [zmmRes1[255:128] zmmRes1[127:0] zmmRes0[255:128] zmmRes0[127:0]]
|
||||
*p_llrRes= _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -1610,31 +1610,31 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
for (i=0,j=0; i<M; i++,j+=2)
|
||||
{
|
||||
// First 16 LLRs of first CN
|
||||
ymmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf[j]);
|
||||
ymmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j+1]);
|
||||
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf[j]);
|
||||
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j+1]);
|
||||
|
||||
// Loop over CNs
|
||||
for (k=1; k<30; k++)
|
||||
{
|
||||
ymm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[k*cnOffsetInGroup + j]);
|
||||
ymmRes0 = _mm512_adds_epi16(ymmRes0, ymm0);
|
||||
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[k*cnOffsetInGroup + j]);
|
||||
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
|
||||
|
||||
ymm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[k*cnOffsetInGroup + j+1]);
|
||||
ymmRes1 = _mm512_adds_epi16(ymmRes1, ymm1);
|
||||
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[k*cnOffsetInGroup + j+1]);
|
||||
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
|
||||
}
|
||||
|
||||
// Add LLR from receiver input
|
||||
ymm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||
ymmRes0 = _mm512_adds_epi16(ymmRes0, ymm0);
|
||||
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
|
||||
|
||||
ymm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
||||
ymmRes1 = _mm512_adds_epi16(ymmRes1, ymm1);
|
||||
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
||||
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
|
||||
|
||||
// Pack results back to epi8
|
||||
ymm0 = _mm512_packs_epi16(ymmRes0, ymmRes1);
|
||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
||||
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||
*p_llrRes = _mm512_permute4x64_epi64(ymm0, 0xD8);
|
||||
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
|
||||
// zmm0 = [zmmRes1[255:128] zmmRes0[255:128] zmmRes1[127:0] zmmRes0[127:0]]
|
||||
// p_llrRes = [zmmRes1[255:128] zmmRes1[127:0] zmmRes0[255:128] zmmRes0[127:0]]
|
||||
*p_llrRes = _mm512_permutex2var_epi16(zmm0,tmp,zmm1);
|
||||
|
||||
// Next result
|
||||
p_llrRes++;
|
||||
@@ -2715,12 +2715,12 @@ static inline void nrLDPC_llr2bit(int8_t* out, int8_t* llrOut, uint16_t numLLR)
|
||||
uint64_t M = numLLR>>5;
|
||||
uint64_t Mr = numLLR&63;
|
||||
|
||||
const __m512i* p_zeros = (__m512i*) zeros256_epi8;
|
||||
const __m512i* p_ones = (__m512i*) ones256_epi8;
|
||||
const __m512i* p_zeros = (__m512i*) zeros512_epi8;
|
||||
const __m512i* p_ones = (__m512i*) ones512_epi8;
|
||||
|
||||
for (i=0; i<M; i++)
|
||||
{
|
||||
*p_out++ = _mm512_and_pd(*p_ones, _mm512_cmpgt_epi8_mask(*p_zeros, *p_llrOut));
|
||||
*p_out++ = _mm512_and_si512(*p_ones, _mm512_or_si512(*p_zeros, *p_llrOut));
|
||||
p_llrOut++;
|
||||
}
|
||||
|
||||
@@ -2738,6 +2738,7 @@ static inline void nrLDPC_llr2bit(int8_t* out, int8_t* llrOut, uint16_t numLLR)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
p_out8[i] = 0;
|
||||
}
|
||||
}
|
||||
@@ -2767,7 +2768,7 @@ static inline void nrLDPC_llr2bitPacked(int8_t* out, int8_t* llrOut, uint16_t nu
|
||||
uint64_t i;
|
||||
uint64_t M = numLLR>>5;
|
||||
uint64_t Mr = numLLR&63;
|
||||
const __m512i* p_shuffle = (__m512i*) constShuffle_256_epi8;
|
||||
const __m512i* p_shuffle = (__m512i*) constShuffle_512_epi8;
|
||||
|
||||
for (i=0; i<M; i++)
|
||||
{
|
||||
|
||||
@@ -27,7 +27,9 @@
|
||||
#ifndef __NR_LDPC_CNPROC__H__
|
||||
#define __NR_LDPC_CNPROC__H__
|
||||
#include <immintrin.h>
|
||||
#include "include/avx512fintrin.h"
|
||||
#include <avx512fintrin.h>
|
||||
//#include "include/immintrin.h"
|
||||
|
||||
|
||||
/**
|
||||
\brief Performs CN processing for BG2 on the CN processing buffer and stores the results in the CN processing results buffer.
|
||||
@@ -110,12 +112,12 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// 64 CNS of second BN
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
||||
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
|
||||
// Store result
|
||||
@@ -157,13 +159,13 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG4[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<3; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG4[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -206,13 +208,13 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG5[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<4; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG5[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -256,13 +258,13 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG6[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<5; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG6[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -307,13 +309,13 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG8[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<7; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG8[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -359,13 +361,13 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG10[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<9; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG10[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -442,12 +444,12 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
{
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0); revenir
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// 64 CNS of second BN
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
|
||||
// Store result
|
||||
@@ -489,13 +491,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG4[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<3; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG4[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -539,13 +541,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG5[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<4; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG5[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -590,13 +592,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG6[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<5; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG6[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -642,13 +644,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG7[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<6; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG7[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -694,13 +696,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG8[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<7; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG8[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -747,13 +749,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG9[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<8; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG9[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -800,13 +802,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG10[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<9; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG10[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -857,13 +859,13 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
// Abs and sign of 64 CNS (first BN)
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG19[j][0] + i];
|
||||
sgn = mm512_sign_epi16(*p_ones, zmm0);
|
||||
min = _m512_abs_epi8(zmm0);
|
||||
min = _mm512_abs_epi8(zmm0);
|
||||
|
||||
// Loop over BNs
|
||||
for (k=1; k<18; k++)
|
||||
{
|
||||
zmm0 = p_cnProcBuf[lut_idxCnProcG19[j][k] + i];
|
||||
min = _mm512_min_epu8(min, _m512_abs_epi8(zmm0));
|
||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||
sgn = mm512_sign_epi16(sgn, zmm0);
|
||||
}
|
||||
|
||||
@@ -938,7 +940,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1072,7 +1074,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1226,7 +1228,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1341,7 +1343,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1408,7 +1410,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1422,12 +1424,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<10; j++)
|
||||
{
|
||||
// BN offset is units of 1*384/64 = 6
|
||||
ymm0 = p_cnProcBuf [j*6 + i];
|
||||
ymm1 = p_cnProcBufRes[j*6 + i];
|
||||
zmm0 = p_cnProcBuf [j*6 + i];
|
||||
zmm1 = p_cnProcBufRes[j*6 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1543,7 +1545,7 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
uint64_t Mrem;
|
||||
uint64_ ;
|
||||
|
||||
__m512i ymm0, ymm1;
|
||||
__m512i zmm0, zmm1;
|
||||
|
||||
// =====================================================================
|
||||
// Process group with 3 BNs
|
||||
@@ -1574,12 +1576,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<3; j++)
|
||||
{
|
||||
// BN offset is units of (6*384/32) = 72
|
||||
ymm0 = p_cnProcBuf [j*72 + i];
|
||||
ymm1 = p_cnProcBufRes[j*72 + i];
|
||||
zmm0 = p_cnProcBuf [j*72 + i];
|
||||
zmm1 = p_cnProcBufRes[j*72 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1593,12 +1595,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<3; j++)
|
||||
{
|
||||
// BN offset is units of (6*384/32) = 72
|
||||
ymm0 = p_cnProcBuf [j*72 + i];
|
||||
ymm1 = p_cnProcBufRes[j*72 + i];
|
||||
zmm0 = p_cnProcBuf [j*72 + i];
|
||||
zmm1 = p_cnProcBufRes[j*72 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1641,12 +1643,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<4; j++)
|
||||
{
|
||||
// BN offset is units of 20*384/32 = 240
|
||||
ymm0 = p_cnProcBuf [j*240 + i];
|
||||
ymm1 = p_cnProcBufRes[j*240 + i];
|
||||
zmm0 = p_cnProcBuf [j*240 + i];
|
||||
zmm1 = p_cnProcBufRes[j*240 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1660,12 +1662,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<4; j++)
|
||||
{
|
||||
// BN offset is units of 20*384/32 = 240
|
||||
ymm0 = p_cnProcBuf [j*240 + i];
|
||||
ymm1 = p_cnProcBufRes[j*240 + i];
|
||||
zmm0 = p_cnProcBuf [j*240 + i];
|
||||
zmm1 = p_cnProcBufRes[j*240 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1708,12 +1710,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<5; j++)
|
||||
{
|
||||
// BN offset is units of 9*384/32 = 108
|
||||
ymm0 = p_cnProcBuf [j*108 + i];
|
||||
ymm1 = p_cnProcBufRes[j*108 + i];
|
||||
zmm0 = p_cnProcBuf [j*108 + i];
|
||||
zmm1 = p_cnProcBufRes[j*108 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1727,12 +1729,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<5; j++)
|
||||
{
|
||||
// BN offset is units of 9*384/32 = 108
|
||||
ymm0 = p_cnProcBuf [j*108 + i];
|
||||
ymm1 = p_cnProcBufRes[j*108 + i];
|
||||
zmm0 = p_cnProcBuf [j*108 + i];
|
||||
zmm1 = p_cnProcBufRes[j*108 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1775,12 +1777,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<6; j++)
|
||||
{
|
||||
// BN offset is units of 3*384/32 = 36
|
||||
ymm0 = p_cnProcBuf [j*36 + i];
|
||||
ymm1 = p_cnProcBufRes[j*36 + i];
|
||||
zmm0 = p_cnProcBuf [j*36 + i];
|
||||
zmm1 = p_cnProcBufRes[j*36 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1794,12 +1796,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<6; j++)
|
||||
{
|
||||
// BN offset is units of 3*384/32 = 36
|
||||
ymm0 = p_cnProcBuf [j*36 + i];
|
||||
ymm1 = p_cnProcBufRes[j*36 + i];
|
||||
zmm0 = p_cnProcBuf [j*36 + i];
|
||||
zmm1 = p_cnProcBufRes[j*36 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1842,12 +1844,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<8; j++)
|
||||
{
|
||||
// BN offset is units of 2*384/32 = 24
|
||||
ymm0 = p_cnProcBuf [j*24 + i];
|
||||
ymm1 = p_cnProcBufRes[j*24 + i];
|
||||
zmm0 = p_cnProcBuf [j*24 + i];
|
||||
zmm1 = p_cnProcBufRes[j*24 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1861,12 +1863,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<8; j++)
|
||||
{
|
||||
// BN offset is units of 2*384/32 = 24
|
||||
ymm0 = p_cnProcBuf [j*24 + i];
|
||||
ymm1 = p_cnProcBufRes[j*24 + i];
|
||||
zmm0 = p_cnProcBuf [j*24 + i];
|
||||
zmm1 = p_cnProcBufRes[j*24 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1909,12 +1911,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<10; j++)
|
||||
{
|
||||
// BN offset is units of 2*384/32 = 24
|
||||
ymm0 = p_cnProcBuf [j*24 + i];
|
||||
ymm1 = p_cnProcBufRes[j*24 + i];
|
||||
zmm0 = p_cnProcBuf [j*24 + i];
|
||||
zmm1 = p_cnProcBufRes[j*24 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
@@ -1928,12 +1930,12 @@ static inline uint64_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
for (j=0; j<10; j++)
|
||||
{
|
||||
// BN offset is units of 2*384/32 = 24
|
||||
ymm0 = p_cnProcBuf [j*24 + i];
|
||||
ymm1 = p_cnProcBufRes[j*24 + i];
|
||||
zmm0 = p_cnProcBuf [j*24 + i];
|
||||
zmm1 = p_cnProcBufRes[j*24 + i];
|
||||
|
||||
// Add BN and input LLR, extract the sign bit
|
||||
// and add in GF(2) (xor)
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(ymm0,ymm1));
|
||||
pcRes ^= _mm512_movemask_epi8(_mm512_adds_epi8(zmm0,zmm1));
|
||||
}
|
||||
|
||||
// If no error pcRes should be 0
|
||||
|
||||
@@ -29,17 +29,15 @@
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
//#include <immintrin.h>
|
||||
#include <immintrin.h>
|
||||
#include "nrLDPCdecoder_defs.h"
|
||||
#include "nrLDPC_types.h"
|
||||
#include "nrLDPC_init.h"
|
||||
#include "nrLDPC_mPass.h"
|
||||
#include "nrLDPC_cnProc.h"
|
||||
#include "nrLDPC_bnProc.h"
|
||||
|
||||
#include <avx512fintrin.h>
|
||||
//#include "include/immintrin.h"
|
||||
#include "include/avx512fintrin.h"
|
||||
#include "include/avx2intrin.h"
|
||||
|
||||
#define NR_LDPC_ENABLE_PARITY_CHECK
|
||||
#define NR_LDPC_PROFILER_DETAIL
|
||||
|
||||
Reference in New Issue
Block a user