degradation of performance in BLER corrected | bnProc & bnProcPc unrolled
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
@@ -94,6 +93,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define NR_LDPC_ENABLE_PARITY_CHECK
|
#define NR_LDPC_ENABLE_PARITY_CHECK
|
||||||
#define NR_LDPC_PROFILER_DETAIL
|
#define NR_LDPC_PROFILER_DETAIL
|
||||||
|
|
||||||
@@ -179,7 +181,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
#endif
|
#endif
|
||||||
if (BG == 1)
|
if (BG == 1)
|
||||||
{
|
{
|
||||||
nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z);
|
nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -217,8 +219,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
case 23:
|
case 23:
|
||||||
{
|
{
|
||||||
#ifdef __AVX512BW__
|
#ifdef __AVX512BW__
|
||||||
nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
||||||
//nrLDPC_cnProc_BG1_R13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes);
|
|
||||||
#else
|
#else
|
||||||
nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
||||||
#endif
|
#endif
|
||||||
@@ -236,7 +237,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -272,7 +273,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
stop_meas(&p_profiler->cnProc);
|
stop_meas(&p_profiler->cnProc);
|
||||||
#endif
|
#endif
|
||||||
@@ -315,47 +316,47 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
{
|
{
|
||||||
case 13:
|
case 13:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 23:
|
case 23:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 89:
|
case 89:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
{
|
{
|
||||||
case 15:
|
case 15:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 13:
|
case 13:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 23:
|
case 23:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
@@ -370,9 +371,9 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
start_meas(&p_profiler->bnProc);
|
start_meas(&p_profiler->bnProc);
|
||||||
#endif
|
#endif
|
||||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
// nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (BG==1)
|
if (BG==1)
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -393,7 +394,7 @@ if (BG==1)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -419,8 +420,8 @@ if (BG==1)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
*/
|
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
stop_meas(&p_profiler->bnProc);
|
stop_meas(&p_profiler->bnProc);
|
||||||
#endif
|
#endif
|
||||||
@@ -500,7 +501,7 @@ if (BG==1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -536,7 +537,7 @@ if (BG==1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
stop_meas(&p_profiler->cnProc);
|
stop_meas(&p_profiler->cnProc);
|
||||||
#endif
|
#endif
|
||||||
@@ -577,47 +578,47 @@ if (BG==1)
|
|||||||
{
|
{
|
||||||
case 13:
|
case 13:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 23:
|
case 23:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 89:
|
case 89:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
{
|
{
|
||||||
case 15:
|
case 15:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 13:
|
case 13:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 23:
|
case 23:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
@@ -631,8 +632,8 @@ if (BG==1)
|
|||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
start_meas(&p_profiler->bnProc);
|
start_meas(&p_profiler->bnProc);
|
||||||
#endif
|
#endif
|
||||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
// nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||||
/*
|
|
||||||
if (BG==1)
|
if (BG==1)
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -653,7 +654,7 @@ if (BG==1)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -679,8 +680,8 @@ if (BG==1)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -759,7 +760,6 @@ if (BG==1)
|
|||||||
{
|
{
|
||||||
#ifdef __AVX512BW__
|
#ifdef __AVX512BW__
|
||||||
nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
||||||
//nrLDPC_cnProc_BG1_R13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes);
|
|
||||||
#else
|
#else
|
||||||
nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z);
|
||||||
#endif
|
#endif
|
||||||
@@ -777,7 +777,7 @@ if (BG==1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -813,7 +813,7 @@ if (BG==1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
stop_meas(&p_profiler->cnProc);
|
stop_meas(&p_profiler->cnProc);
|
||||||
#endif
|
#endif
|
||||||
@@ -854,47 +854,47 @@ if (BG==1)
|
|||||||
{
|
{
|
||||||
case 13:
|
case 13:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 23:
|
case 23:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 89:
|
case 89:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
{
|
{
|
||||||
case 15:
|
case 15:
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 13:
|
case 13:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 23:
|
case 23:
|
||||||
|
|
||||||
{
|
{
|
||||||
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}//end of else
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
@@ -912,9 +912,9 @@ if (BG==1)
|
|||||||
start_meas(&p_profiler->bnProc);
|
start_meas(&p_profiler->bnProc);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
//nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (BG==1)
|
if (BG==1)
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -935,7 +935,7 @@ if (BG==1)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //end if
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (R)
|
switch (R)
|
||||||
@@ -962,7 +962,7 @@ if (BG==1)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
@@ -1053,3 +1053,4 @@ if (BG==1)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
@@ -177,8 +176,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
|
|||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
|
||||||
|
|
||||||
// #pragma omp simd
|
|
||||||
// #pragma omp parallel for schedule(dynamic)
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
for (j=0; j<3; j++)
|
||||||
{
|
{
|
||||||
@@ -1026,7 +1024,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 3 BNs
|
// CN group with 3 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
|
||||||
// #pragma omp simd
|
|
||||||
for (j=0;j<2; j++)
|
for (j=0;j<2; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup];
|
||||||
@@ -1037,11 +1035,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 4 BNs
|
// CN group with 4 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX;
|
||||||
// #pragma omp simd
|
|
||||||
for (j=0; j<3; j++)
|
for (j=0; j<3; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[1]; i++)
|
for (i=0; i<lut_numCnInCnGroups[1]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG4[j][i] + lut_bnPosBnProcBuf_CNG4[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG4[j][i] + lut_bnPosBnProcBuf_CNG4[j][i]*Z;
|
||||||
@@ -1053,11 +1051,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 5 BNs
|
// CN group with 5 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX;
|
||||||
// #pragma omp simd
|
|
||||||
for (j=0; j<4; j++)
|
for (j=0; j<4; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[2] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[2] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[2]; i++)
|
for (i=0; i<lut_numCnInCnGroups[2]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG5[j][i] + lut_bnPosBnProcBuf_CNG5[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG5[j][i] + lut_bnPosBnProcBuf_CNG5[j][i]*Z;
|
||||||
@@ -1070,11 +1068,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 6 BNs
|
// CN group with 6 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX;
|
||||||
//#pragma omp simd
|
|
||||||
for (j=0; j<5; j++)
|
for (j=0; j<5; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[3] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[3] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[3]; i++)
|
for (i=0; i<lut_numCnInCnGroups[3]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG6[j][i] + lut_bnPosBnProcBuf_CNG6[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG6[j][i] + lut_bnPosBnProcBuf_CNG6[j][i]*Z;
|
||||||
@@ -1087,12 +1085,12 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 7 BNs
|
// CN group with 7 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX;
|
||||||
//#pragma omp simd
|
|
||||||
for (j=0; j<6; j++)
|
for (j=0; j<6; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[4] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[4] + j*bitOffsetInGroup];
|
||||||
|
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[4]; i++)
|
for (i=0; i<lut_numCnInCnGroups[4]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG7[j][i] + lut_bnPosBnProcBuf_CNG7[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG7[j][i] + lut_bnPosBnProcBuf_CNG7[j][i]*Z;
|
||||||
@@ -1105,7 +1103,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 8 BNs
|
// CN group with 8 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX;
|
||||||
// #pragma omp simd
|
|
||||||
for (j=0; j<7; j++)
|
for (j=0; j<7; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[5] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[5] + j*bitOffsetInGroup];
|
||||||
@@ -1121,11 +1119,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 9 BNs
|
// CN group with 9 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX;
|
||||||
// #pragma omp simd
|
|
||||||
for (j=0; j<8; j++)
|
for (j=0; j<8; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[6] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[6] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[6]; i++)
|
for (i=0; i<lut_numCnInCnGroups[6]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG9[j][i] + lut_bnPosBnProcBuf_CNG9[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG9[j][i] + lut_bnPosBnProcBuf_CNG9[j][i]*Z;
|
||||||
@@ -1138,11 +1136,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 10 BNs
|
// CN group with 10 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX;
|
||||||
//#pragma omp simd
|
|
||||||
for (j=0; j<9; j++)
|
for (j=0; j<9; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[7] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[7] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[7]; i++)
|
for (i=0; i<lut_numCnInCnGroups[7]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG10[j][i] + lut_bnPosBnProcBuf_CNG10[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG10[j][i] + lut_bnPosBnProcBuf_CNG10[j][i]*Z;
|
||||||
@@ -1155,11 +1153,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
// CN group with 19 BNs
|
// CN group with 19 BNs
|
||||||
|
|
||||||
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX;
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX;
|
||||||
//#pragma omp simd
|
|
||||||
for (j=0; j<19; j++)
|
for (j=0; j<19; j++)
|
||||||
{
|
{
|
||||||
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[8] + j*bitOffsetInGroup];
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[8] + j*bitOffsetInGroup];
|
||||||
// #pragma omp simd
|
|
||||||
for (i=0; i<lut_numCnInCnGroups[8]; i++)
|
for (i=0; i<lut_numCnInCnGroups[8]; i++)
|
||||||
{
|
{
|
||||||
idxBn = lut_startAddrBnProcBuf_CNG19[j][i] + lut_bnPosBnProcBuf_CNG19[j][i]*Z;
|
idxBn = lut_startAddrBnProcBuf_CNG19[j][i] + lut_bnPosBnProcBuf_CNG19[j][i]*Z;
|
||||||
@@ -1211,3 +1209,5 @@ static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_n
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+98
-100
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
@@ -23,7 +24,7 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R)
|
|||||||
// fprintf(fd,"#include <stdint.h>\n");
|
// fprintf(fd,"#include <stdint.h>\n");
|
||||||
// fprintf(fd,"#include <immintrin.h>\n");
|
// fprintf(fd,"#include <immintrin.h>\n");
|
||||||
|
|
||||||
fprintf(fd,"static inline void nrLDPC_bnProcPc_BG1_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]);
|
fprintf(fd,"static inline void nrLDPC_bnProcPc_BG1_R%s_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]);
|
||||||
const uint8_t* lut_numBnInBnGroups;
|
const uint8_t* lut_numBnInBnGroups;
|
||||||
const uint32_t* lut_startAddrBnGroups;
|
const uint32_t* lut_startAddrBnGroups;
|
||||||
const uint16_t* lut_startAddrBnGroupsLlr;
|
const uint16_t* lut_startAddrBnGroupsLlr;
|
||||||
@@ -61,70 +62,65 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R)
|
|||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m128i* p_bnProcBuf; \n");
|
fprintf(fd," __m128i* p_bnProcBuf; \n");
|
||||||
fprintf(fd," __m256i* p_bnProcBufRes; \n");
|
|
||||||
fprintf(fd," __m128i* p_llrProcBuf;\n");
|
fprintf(fd," __m128i* p_llrProcBuf;\n");
|
||||||
fprintf(fd," __m256i* p_llrProcBuf256; \n");
|
|
||||||
fprintf(fd," __m256i* p_llrRes; \n");
|
fprintf(fd," __m256i* p_llrRes; \n");
|
||||||
fprintf(fd," uint32_t M ;\n");
|
fprintf(fd," uint32_t M ;\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 1 CN
|
|
||||||
// Already done in bnProcBufPc
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 1 CNs \n");
|
fprintf(fd, "// Process group with 1 CNs \n");
|
||||||
|
|
||||||
// if (lut_numBnInBnGroups[1] > 0)
|
|
||||||
// {
|
// Process group with 2 CNs
|
||||||
|
|
||||||
|
if (lut_numBnInBnGroups[0] > 0)
|
||||||
|
{
|
||||||
// If elements in group move to next address
|
// If elements in group move to next address
|
||||||
// idxBnGroup++;
|
// idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] );
|
||||||
|
|
||||||
fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4;
|
||||||
fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
fprintf(fd," p_llrProcBuf256 = (__m256i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
|
|
||||||
|
// Set pointers to start of group 2
|
||||||
|
fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
||||||
|
fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
|
// Loop over BNs
|
||||||
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
||||||
|
|
||||||
//for (i=0,j=0;i<M;i++,j+=2) {
|
|
||||||
|
|
||||||
// Store results in bnProcBufRes of first CN for further processing for next iteration
|
|
||||||
// In case parity check fails
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," p_bnProcBufRes[i] = p_llrProcBuf256[i];\n");
|
|
||||||
|
|
||||||
// First 16 LLRs of first CN
|
// First 16 LLRs of first CN
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);\n");
|
||||||
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);\n");
|
|
||||||
|
|
||||||
// Second 16 LLRs of first CN
|
// Loop over CNs
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);\n");
|
for (k=1; k<1; k++)
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);\n");
|
{
|
||||||
fprintf(fd," ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[%d + j]);\n", k*cnOffsetInGroup);
|
||||||
|
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);\n");
|
||||||
|
|
||||||
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[%d + j +1]);\n", k*cnOffsetInGroup);
|
||||||
|
|
||||||
|
fprintf(fd, " ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); \n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add LLR from receiver input
|
||||||
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
||||||
|
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);\n");
|
||||||
|
|
||||||
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);\n");
|
||||||
|
fprintf(fd," ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);\n");
|
||||||
|
|
||||||
// Pack results back to epi8
|
// Pack results back to epi8
|
||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
//}
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
|
|
||||||
|
fprintf(fd,"}\n");
|
||||||
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
|
|
||||||
@@ -153,7 +149,7 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
||||||
// First 16 LLRs of first CN
|
// First 16 LLRs of first CN
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);\n");
|
||||||
|
|
||||||
// Loop over CNs
|
// Loop over CNs
|
||||||
for (k=1; k<2; k++)
|
for (k=1; k<2; k++)
|
||||||
@@ -177,8 +173,8 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -233,8 +229,8 @@ fprintf(fd, "// Process group with 3 CNs \n");
|
|||||||
// Pack results back to epi8
|
// Pack results back to epi8
|
||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,8 +287,8 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,8 +343,8 @@ fprintf(fd, "// Process group with 5 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,8 +400,8 @@ fprintf(fd, "// Process group with 6 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,8 +457,8 @@ fprintf(fd, "// Process group with 7 CNs \n");
|
|||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,8 +515,8 @@ fprintf(fd, "// Process group with 8 CNs \n");
|
|||||||
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
|
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,8 +571,8 @@ fprintf(fd, "// Process group with 9 CNs \n");
|
|||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,8 +627,8 @@ fprintf(fd, "// Process group with 10 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -689,8 +685,8 @@ fprintf(fd, "// Process group with 11 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -744,8 +740,8 @@ fprintf(fd, "// Process group with 12 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -800,8 +796,8 @@ fprintf(fd, "// Process group with 13 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -857,8 +853,8 @@ fprintf(fd, "// Process group with 14 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -913,8 +909,8 @@ fprintf(fd, "// Process group with 15 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,8 +966,8 @@ fprintf(fd, "// Process group with 16 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1026,8 +1022,8 @@ fprintf(fd, "// Process group with 17 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1082,8 +1078,8 @@ fprintf(fd, "// Process group with 18 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1137,8 +1133,8 @@ fprintf(fd, "// Process group with 19 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,8 +1189,8 @@ fprintf(fd, "// Process group with 20 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1253,8 +1249,8 @@ fprintf(fd, "// Process group with 21 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -1308,8 +1304,8 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1364,8 +1360,8 @@ fprintf(fd, "// Process group with <23 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1421,8 +1417,8 @@ fprintf(fd, "// Process group with 24 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1477,8 +1473,8 @@ fprintf(fd, "// Process group with 25 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1534,8 +1530,8 @@ fprintf(fd, "// Process group with 26 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1590,8 +1586,8 @@ fprintf(fd, "// Process group with 27 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1646,8 +1642,8 @@ fprintf(fd, "// Process group with 28 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1701,8 +1697,8 @@ fprintf(fd, "// Process group with 29 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1757,8 +1753,8 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1769,3 +1765,5 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+102
-100
@@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
@@ -23,7 +25,7 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R)
|
|||||||
// fprintf(fd,"#include <stdint.h>\n");
|
// fprintf(fd,"#include <stdint.h>\n");
|
||||||
//fprintf(fd,"#include <immintrin.h>\n");
|
//fprintf(fd,"#include <immintrin.h>\n");
|
||||||
|
|
||||||
fprintf(fd,"static inline void nrLDPC_bnProcPc_BG2_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]);
|
fprintf(fd,"static inline void nrLDPC_bnProcPc_BG2_R%s_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]);
|
||||||
const uint8_t* lut_numBnInBnGroups;
|
const uint8_t* lut_numBnInBnGroups;
|
||||||
const uint32_t* lut_startAddrBnGroups;
|
const uint32_t* lut_startAddrBnGroups;
|
||||||
const uint16_t* lut_startAddrBnGroupsLlr;
|
const uint16_t* lut_startAddrBnGroupsLlr;
|
||||||
@@ -62,70 +64,65 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R)
|
|||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m128i* p_bnProcBuf; \n");
|
fprintf(fd," __m128i* p_bnProcBuf; \n");
|
||||||
fprintf(fd," __m256i* p_bnProcBufRes; \n");
|
|
||||||
fprintf(fd," __m128i* p_llrProcBuf;\n");
|
fprintf(fd," __m128i* p_llrProcBuf;\n");
|
||||||
fprintf(fd," __m256i* p_llrProcBuf256; \n");
|
|
||||||
fprintf(fd," __m256i* p_llrRes; \n");
|
fprintf(fd," __m256i* p_llrRes; \n");
|
||||||
fprintf(fd," uint32_t M ;\n");
|
fprintf(fd," uint32_t M ;\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 1 CN
|
|
||||||
// Already done in bnProcBufPc
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 1 CNs \n");
|
fprintf(fd, "// Process group with 1 CNs \n");
|
||||||
|
|
||||||
// if (lut_numBnInBnGroups[1] > 0)
|
|
||||||
// {
|
// Process group with 2 CNs
|
||||||
|
|
||||||
|
if (lut_numBnInBnGroups[0] > 0)
|
||||||
|
{
|
||||||
// If elements in group move to next address
|
// If elements in group move to next address
|
||||||
// idxBnGroup++;
|
// idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] );
|
||||||
|
|
||||||
fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4;
|
||||||
fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
fprintf(fd," p_llrProcBuf256 = (__m256i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
|
||||||
|
|
||||||
|
// Set pointers to start of group 2
|
||||||
|
fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
||||||
|
fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
|
// Loop over BNs
|
||||||
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
||||||
|
|
||||||
//for (i=0,j=0;i<M;i++,j+=2) {
|
|
||||||
|
|
||||||
// Store results in bnProcBufRes of first CN for further processing for next iteration
|
|
||||||
// In case parity check fails
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," p_bnProcBufRes[i] = p_llrProcBuf256[i];\n");
|
|
||||||
|
|
||||||
// First 16 LLRs of first CN
|
// First 16 LLRs of first CN
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
||||||
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);\n");
|
|
||||||
|
|
||||||
// Second 16 LLRs of first CN
|
// Loop over CNs
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);\n");
|
/*for (k=1; k<1; k++)
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);\n");
|
{
|
||||||
fprintf(fd," ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[%d + j]);\n", k*cnOffsetInGroup);
|
||||||
|
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);\n");
|
||||||
|
|
||||||
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[%d + j +1]);\n", k*cnOffsetInGroup);
|
||||||
|
|
||||||
|
fprintf(fd, " ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); \n");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// Add LLR from receiver input
|
||||||
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[j+1]);\n");
|
||||||
|
fprintf(fd," ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);\n");
|
||||||
|
|
||||||
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);\n");
|
||||||
|
fprintf(fd," ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);\n");
|
||||||
|
|
||||||
// Pack results back to epi8
|
// Pack results back to epi8
|
||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
//}
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
|
|
||||||
|
fprintf(fd,"}\n");
|
||||||
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
|
|
||||||
@@ -154,7 +151,7 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
fprintf(fd," for (int i=0,j=0;i<M;i++,j+=2) {\n");
|
||||||
// First 16 LLRs of first CN
|
// First 16 LLRs of first CN
|
||||||
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);\n");
|
||||||
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n");
|
fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);\n");
|
||||||
|
|
||||||
// Loop over CNs
|
// Loop over CNs
|
||||||
for (k=1; k<2; k++)
|
for (k=1; k<2; k++)
|
||||||
@@ -178,8 +175,8 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -234,8 +231,8 @@ fprintf(fd, "// Process group with 3 CNs \n");
|
|||||||
// Pack results back to epi8
|
// Pack results back to epi8
|
||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,8 +289,8 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,8 +345,8 @@ fprintf(fd, "// Process group with 5 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,8 +402,8 @@ fprintf(fd, "// Process group with 6 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,8 +459,8 @@ fprintf(fd, "// Process group with 7 CNs \n");
|
|||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,8 +517,8 @@ fprintf(fd, "// Process group with 8 CNs \n");
|
|||||||
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
// p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
|
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,8 +573,8 @@ fprintf(fd, "// Process group with 9 CNs \n");
|
|||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
//fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 );
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,8 +629,8 @@ fprintf(fd, "// Process group with 10 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -690,8 +687,8 @@ fprintf(fd, "// Process group with 11 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -745,8 +742,8 @@ fprintf(fd, "// Process group with 12 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -801,8 +798,8 @@ fprintf(fd, "// Process group with 13 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -858,8 +855,8 @@ fprintf(fd, "// Process group with 14 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -914,8 +911,8 @@ fprintf(fd, "// Process group with 15 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -971,8 +968,8 @@ fprintf(fd, "// Process group with 16 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1027,8 +1024,8 @@ fprintf(fd, "// Process group with 17 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1083,8 +1080,8 @@ fprintf(fd, "// Process group with 18 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1138,8 +1135,8 @@ fprintf(fd, "// Process group with 19 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1194,8 +1191,8 @@ fprintf(fd, "// Process group with 20 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1254,8 +1251,8 @@ fprintf(fd, "// Process group with 21 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -1309,8 +1306,8 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,7 +1315,7 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
// Process group with 13 CNs
|
// Process group with 13 CNs
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 23 CNs \n");
|
fprintf(fd, "// Process group with <23 CNs \n");
|
||||||
|
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
|
|
||||||
@@ -1365,8 +1362,8 @@ fprintf(fd, "// Process group with 23 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1422,8 +1419,8 @@ fprintf(fd, "// Process group with 24 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1478,8 +1475,8 @@ fprintf(fd, "// Process group with 25 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1535,8 +1532,8 @@ fprintf(fd, "// Process group with 26 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1591,8 +1588,8 @@ fprintf(fd, "// Process group with 27 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1647,8 +1644,8 @@ fprintf(fd, "// Process group with 28 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1702,8 +1699,8 @@ fprintf(fd, "// Process group with 29 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1758,8 +1755,8 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n");
|
||||||
// ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]]
|
// 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 = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]]
|
||||||
fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n");
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1770,3 +1767,8 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+36
-88
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
@@ -78,6 +79,9 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R)
|
|||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 2 CNs \n");
|
fprintf(fd, "// Process group with 2 CNs \n");
|
||||||
|
|
||||||
if (lut_numBnInBnGroups[1] > 0)
|
if (lut_numBnInBnGroups[1] > 0)
|
||||||
@@ -104,9 +108,7 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -145,9 +147,7 @@ fprintf(fd, "// Process group with 3 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -184,9 +184,7 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -223,9 +221,7 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -264,9 +260,7 @@ fprintf(fd, "// Process group with 6 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -304,9 +298,7 @@ fprintf(fd, "// Process group with 7 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -344,9 +336,7 @@ fprintf(fd, "// Process group with 8 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -383,9 +373,7 @@ fprintf(fd, "// Process group with 9 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -422,9 +410,7 @@ fprintf(fd, "// Process group with 10 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -460,9 +446,7 @@ fprintf(fd, "// Process group with 11 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -498,9 +482,7 @@ fprintf(fd, "// Process group with 12 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -531,16 +513,14 @@ fprintf(fd, "// Process group with 13 CNs \n");
|
|||||||
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over CNs
|
// Loop over CNs
|
||||||
for (k=0; k<1; k++)
|
for (k=0; k<13; k++)
|
||||||
{
|
{
|
||||||
fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup);
|
fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -579,9 +559,7 @@ fprintf(fd, "// Process group with 14 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -619,9 +597,7 @@ fprintf(fd, "// Process group with 15 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -660,9 +636,7 @@ fprintf(fd, "// Process group with 16 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -700,9 +674,7 @@ fprintf(fd, "// Process group with 17 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -740,9 +712,7 @@ fprintf(fd, "// Process group with 18 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -779,9 +749,7 @@ fprintf(fd, "// Process group with 19 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -819,9 +787,7 @@ fprintf(fd, "// Process group with 20 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -863,9 +829,7 @@ fprintf(fd, "// Process group with 21 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -901,9 +865,7 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -941,9 +903,7 @@ fprintf(fd, "// Process group with <23 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -982,9 +942,7 @@ fprintf(fd, "// Process group with 24 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1022,9 +980,8 @@ fprintf(fd, "// Process group with 25 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1063,9 +1020,7 @@ fprintf(fd, "// Process group with 26 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1103,9 +1058,7 @@ fprintf(fd, "// Process group with 27 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1143,9 +1096,7 @@ fprintf(fd, "// Process group with 28 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1181,9 +1132,7 @@ fprintf(fd, "// Process group with 29 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1220,9 +1169,7 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1236,3 +1183,4 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-1235
File diff suppressed because it is too large
Load Diff
+106
-180
@@ -1,10 +1,13 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
#include "../../nrLDPC_types.h"
|
#include "../../nrLDPC_types.h"
|
||||||
#include "../../nrLDPC_bnProc.h"
|
//#include "../../nrLDPC_bnProc.h"
|
||||||
#include "../../nrLDPC_cnProc.h"
|
//#include "../../nrLDPC_cnProc.h"
|
||||||
#include "../../nrLDPC_init.h"
|
//#include "../../nrLDPC_init.h"
|
||||||
|
|
||||||
|
|
||||||
void nrLDPC_bnProc_BG2_generator_AVX2(int R)
|
void nrLDPC_bnProc_BG2_generator_AVX2(int R)
|
||||||
{
|
{
|
||||||
@@ -16,7 +19,7 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R)
|
|||||||
// system("mkdir -p ../ldpc_gen_files");
|
// system("mkdir -p ../ldpc_gen_files");
|
||||||
|
|
||||||
char fname[50];
|
char fname[50];
|
||||||
sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG2_R%s_AVX2.h",ratestr[R]);
|
sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG2_R%s_AVX2.c",ratestr[R]);
|
||||||
FILE *fd=fopen(fname,"w");
|
FILE *fd=fopen(fname,"w");
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
if (fd == NULL) {printf("Cannot create \n");abort();}
|
||||||
|
|
||||||
@@ -64,7 +67,7 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R)
|
|||||||
fprintf(fd," __m256i* p_bnProcBufRes; \n");
|
fprintf(fd," __m256i* p_bnProcBufRes; \n");
|
||||||
fprintf(fd," __m256i* p_llrRes; \n");
|
fprintf(fd," __m256i* p_llrRes; \n");
|
||||||
fprintf(fd," __m256i* p_res; \n");
|
fprintf(fd," __m256i* p_res; \n");
|
||||||
fprintf(fd," uint32_t M, i;\n");
|
fprintf(fd," uint32_t M, i; \n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -74,6 +77,9 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R)
|
|||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 2 CNs \n");
|
fprintf(fd, "// Process group with 2 CNs \n");
|
||||||
|
|
||||||
if (lut_numBnInBnGroups[1] > 0)
|
if (lut_numBnInBnGroups[1] > 0)
|
||||||
@@ -81,8 +87,9 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
// If elements in group move to next address
|
// If elements in group move to next address
|
||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs or parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] );
|
||||||
|
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -98,11 +105,8 @@ fprintf(fd, "// Process group with 2 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] );
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -125,7 +129,7 @@ fprintf(fd, "// Process group with 3 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[2] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[2] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -140,11 +144,8 @@ fprintf(fd, "// Process group with 3 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[2] );
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -165,7 +166,7 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[3] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[3] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -180,11 +181,8 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
}
|
}
|
||||||
@@ -204,7 +202,7 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[4] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[4] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -220,11 +218,8 @@ fprintf(fd, "// Process group with 4 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -246,7 +241,7 @@ fprintf(fd, "// Process group with 6 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[5] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[5] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -262,11 +257,8 @@ fprintf(fd, "// Process group with 6 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -287,7 +279,7 @@ fprintf(fd, "// Process group with 7 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[6] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[6] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -303,11 +295,8 @@ fprintf(fd, "// Process group with 7 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -328,7 +317,7 @@ fprintf(fd, "// Process group with 8 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[7] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[7] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -344,11 +333,8 @@ fprintf(fd, "// Process group with 8 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -368,7 +354,7 @@ fprintf(fd, "// Process group with 9 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[8] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[8] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -384,11 +370,8 @@ fprintf(fd, "// Process group with 9 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -408,7 +391,7 @@ fprintf(fd, "// Process group with 10 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[9] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[9] );
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -424,11 +407,8 @@ fprintf(fd, "// Process group with 10 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -447,7 +427,7 @@ fprintf(fd, "// Process group with 11 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[10] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[10] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -463,11 +443,8 @@ fprintf(fd, "// Process group with 11 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -486,7 +463,7 @@ fprintf(fd, "// Process group with 12 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[11] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[11] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -502,11 +479,8 @@ fprintf(fd, "// Process group with 12 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -527,7 +501,7 @@ fprintf(fd, "// Process group with 13 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[12] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[12] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -537,17 +511,14 @@ fprintf(fd, "// Process group with 13 CNs \n");
|
|||||||
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over CNs
|
// Loop over CNs
|
||||||
for (k=0; k<1; k++)
|
for (k=0; k<13; k++)
|
||||||
{
|
{
|
||||||
fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup);
|
fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -569,7 +540,7 @@ fprintf(fd, "// Process group with 14 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[13] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[13] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -585,11 +556,8 @@ fprintf(fd, "// Process group with 14 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -610,7 +578,7 @@ fprintf(fd, "// Process group with 15 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[14] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[14] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -626,11 +594,8 @@ fprintf(fd, "// Process group with 15 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -652,7 +617,7 @@ fprintf(fd, "// Process group with 16 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[15] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[15] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -668,11 +633,8 @@ fprintf(fd, "// Process group with 16 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -693,7 +655,7 @@ fprintf(fd, "// Process group with 17 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[16] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[16] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -709,11 +671,8 @@ fprintf(fd, "// Process group with 17 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -734,7 +693,7 @@ fprintf(fd, "// Process group with 18 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[17] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[17] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -750,11 +709,8 @@ fprintf(fd, "// Process group with 18 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -774,7 +730,7 @@ fprintf(fd, "// Process group with 19 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[18] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[18] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -790,11 +746,8 @@ fprintf(fd, "// Process group with 19 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -815,7 +768,7 @@ fprintf(fd, "// Process group with 20 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[19] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[19] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -831,11 +784,8 @@ fprintf(fd, "// Process group with 20 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -860,7 +810,7 @@ fprintf(fd, "// Process group with 21 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[20] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[20] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -876,11 +826,8 @@ fprintf(fd, "// Process group with 21 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -899,7 +846,7 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[21] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[21] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -915,11 +862,8 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -930,7 +874,7 @@ fprintf(fd, "// Process group with 22 CNs \n");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "// Process group with 23 CNs \n");
|
fprintf(fd, "// Process group with <23 CNs \n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -940,7 +884,7 @@ fprintf(fd, "// Process group with 23 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[22] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[22] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -956,11 +900,8 @@ fprintf(fd, "// Process group with 23 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -982,7 +923,7 @@ fprintf(fd, "// Process group with 24 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[23] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[23] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -998,11 +939,8 @@ fprintf(fd, "// Process group with 24 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1022,8 +960,8 @@ fprintf(fd, "// Process group with 25 CNs \n");
|
|||||||
// If elements in group move to next address
|
// If elements in group move to next address
|
||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing;
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[24] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[24] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1039,11 +977,9 @@ fprintf(fd, "// Process group with 25 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
|
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1065,7 +1001,7 @@ fprintf(fd, "// Process group with 26 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[25] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[25] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1081,11 +1017,8 @@ fprintf(fd, "// Process group with 26 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1106,7 +1039,7 @@ fprintf(fd, "// Process group with 27 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1122,11 +1055,8 @@ fprintf(fd, "// Process group with 27 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1147,7 +1077,7 @@ fprintf(fd, "// Process group with 28 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[27] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[27] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1163,10 +1093,8 @@ fprintf(fd, "// Process group with 28 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1185,7 +1113,7 @@ fprintf(fd, "// Process group with 29 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[28] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[28] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1201,11 +1129,8 @@ fprintf(fd, "// Process group with 29 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1225,7 +1150,7 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
idxBnGroup++;
|
idxBnGroup++;
|
||||||
|
|
||||||
// Number of groups of 32 BNs for parallel processing
|
// Number of groups of 32 BNs for parallel processing
|
||||||
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[29] );
|
fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[29] );;
|
||||||
|
|
||||||
// Set the offset to each CN within a group in terms of 16 Byte
|
// Set the offset to each CN within a group in terms of 16 Byte
|
||||||
cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>5;
|
cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>5;
|
||||||
@@ -1241,10 +1166,8 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]);
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
fprintf(fd," for (i=0;i<M;i++) {\n");
|
||||||
fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
fprintf(fd," p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup);
|
||||||
fprintf(fd," p_res++;\n");
|
|
||||||
fprintf(fd," p_llrRes++;\n");
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
fprintf(fd,"}\n");
|
||||||
|
|
||||||
@@ -1258,3 +1181,6 @@ fprintf(fd, "// Process group with 30 CNs \n");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+4
-4
@@ -386,10 +386,10 @@ void nrLDPC_cnProc_BG1_generator_AVX2(int R)
|
|||||||
// Process group with 8 BNs
|
// Process group with 8 BNs
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
fprintf(fd,"//Process group with 8 BNs\n");
|
||||||
// Offset is 2*384/32 = 24
|
// Offset is 2*384/32 = 24
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,120,144,168}, {0,48,72,96,120,144,168},
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
{0,24,72,96,120,144,168}, {0,24,48,96,120,144,168},
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
{0,24,48,72,120,144,168}, {0,24,48,72,96,144,168},
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
{0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+5
-8
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
@@ -327,12 +325,11 @@ void nrLDPC_cnProc_BG1_generator_AVX512(int R)
|
|||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Process group with 8 BNs
|
// Process group with 8 BNs
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
fprintf(fd,"//Process group with 8 BNs\n");
|
||||||
// Offset is 2*384/32 = 12
|
// Offset is 2*384/32 = 24
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,120,144,168}, {0,48,72,96,120,144,168},
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
{0,24,72,96,120,144,168}, {0,24,48,96,120,144,168},
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
{0,24,48,72,120,144,168}, {0,24,48,72,96,144,168},
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
{0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
if (lut_numCnInCnGroups[5] > 0)
|
||||||
|
|||||||
-603
@@ -1,603 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R%s_AVX512.h",ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"static inline void nrLDPC_cnProc_BG1_R%s_AVX512(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) {\n",ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t i,j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," uint32_t M, i;\n");
|
|
||||||
fprintf(fd," int8_t* cnProcBuf = p_procBuf->cnProcBuf;\n");
|
|
||||||
fprintf(fd," int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufResBit;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufRes;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBuf;\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR, ones;\n");
|
|
||||||
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
fprintf(fd," ones = _mm512_set1_epi8((char)1);\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
//M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[0] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG3[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// for (k=1; k<2; k++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG3[j][1]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
//M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[1] );
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
for (j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG4[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG4[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
//M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[2] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<5; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG5[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG5[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
//M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[3] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<6; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG6[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG6[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
// M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[4] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<7; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0= p_cnProcBuf[%d+i];\n",lut_idxCnProcG7[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG7[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
// M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[5] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<8; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG8[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG8[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
// M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[6] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<9; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG9[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG9[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
//M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
fprintf(fd, " M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[7] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<10; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG10[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG10[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
// M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
fprintf(fd, " M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[8] );
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<19; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (i=0;i<M;i++) {\n");
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG19[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf[%d+i];\n",lut_idxCnProcG19[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+46
-61
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
#include "../../nrLDPCdecoder_defs.h"
|
||||||
@@ -43,9 +44,10 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
uint32_t bitOffsetInGroup;
|
uint32_t bitOffsetInGroup;
|
||||||
|
|
||||||
fprintf(fd," uint32_t M;\n");
|
fprintf(fd," uint32_t M;\n");
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
fprintf(fd," __m512i zmm0, min, sgn,zeros,ones,maxLLR;\n");
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
||||||
|
fprintf(fd," ones = _mm512_set1_epi8((char)1);\n");
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Process group with 3 BNs
|
// Process group with 3 BNs
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
fprintf(fd,"//Process group with 3 BNs\n");
|
||||||
@@ -59,7 +61,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
{
|
{
|
||||||
// Number of groups of 64 CNs for parallel processing
|
// Number of groups of 64 CNs for parallel processing
|
||||||
// Ceil for values not divisible by 64
|
// Ceil for values not divisible by 64
|
||||||
fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[1] );
|
fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[0] );
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
// Set the offset to each bit within a group in terms of 64 Byte
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX)>>6;
|
bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX)>>6;
|
||||||
@@ -71,57 +73,38 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<M;i+=2) {\n");
|
|
||||||
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
// for (k=1; k<2; k++)
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
//{
|
||||||
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2);
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
||||||
|
|
||||||
|
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
||||||
|
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
||||||
|
// }
|
||||||
|
|
||||||
// Store result
|
// Store result
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
// min = _mm512_min_epu8(min, *maxLLR); // 128 in epi8 is -127
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
||||||
|
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
||||||
|
// p_cnProcBufResBit++;
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup));
|
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup));
|
||||||
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][0]/2)+1);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][1]/2)+1);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)+1);
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
fprintf(fd," }\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Process group with 4 BNs
|
// Process group with 4 BNs
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
fprintf(fd,"//Process group with 4 BNs\n");
|
||||||
@@ -140,14 +123,13 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
|
|
||||||
// Loop over every BN
|
// Loop over every BN
|
||||||
for (j=0; j<4; j++)
|
for (j=0; j<4; j++)
|
||||||
{
|
{
|
||||||
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
@@ -182,6 +164,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
if (lut_numCnInCnGroups[2] > 0)
|
||||||
{
|
{
|
||||||
// Number of groups of 64 CNs for parallel processing
|
// Number of groups of 64 CNs for parallel processing
|
||||||
@@ -199,10 +182,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
@@ -236,6 +218,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
if (lut_numCnInCnGroups[3] > 0)
|
||||||
{
|
{
|
||||||
// Number of groups of 64 CNs for parallel processing
|
// Number of groups of 64 CNs for parallel processing
|
||||||
@@ -253,10 +236,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
@@ -292,6 +274,8 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
{0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}};
|
{0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
if (lut_numCnInCnGroups[4] > 0)
|
||||||
{
|
{
|
||||||
// Number of groups of 64 CNs for parallel processing
|
// Number of groups of 64 CNs for parallel processing
|
||||||
@@ -309,10 +293,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG8[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG8[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
@@ -348,6 +331,8 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
{0,24,48,72,96,120,144,168,216}, {0,24,48,72,96,120,144,168,192}};
|
{0,24,48,72,96,120,144,168,216}, {0,24,48,72,96,120,144,168,192}};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
if (lut_numCnInCnGroups[5] > 0)
|
||||||
{
|
{
|
||||||
// Number of groups of 64 CNs for parallel processing
|
// Number of groups of 64 CNs for parallel processing
|
||||||
@@ -365,10 +350,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
fprintf(fd," for (int i=0;i<M;i++) {\n");
|
||||||
// Abs and sign of 64 CNs (first BN)
|
// Abs and sign of 64 CNs (first BN)
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG10[j][0]/2);
|
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG10[j][0]/2);
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n");
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
// Loop over BNs
|
||||||
@@ -404,3 +388,4 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
-583
@@ -1,583 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_%s_AVX512.c",Z,ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t M;
|
|
||||||
uint32_t j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i+=2) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][0]/2)+1);
|
|
||||||
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][1]/2)+1);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)+1);
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
for (j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[1]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<5; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[2]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<6; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[3]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<7; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn= ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi816(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<8; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[5]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[6]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<9; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn, zeros);\n",(lut_startAddrCnGroups[6]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<10; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min,sgn,zeros);\n",(lut_startAddrCnGroups[7]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<19; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][0]/2);
|
|
||||||
// sgn = _mm512_sign_epi8(ones, zmm0);
|
|
||||||
// min = _mm512_abs_epi8(zmm0);
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(sgn);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(sgn, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[8]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-557
@@ -1,557 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf) {\n",Z,ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t M;
|
|
||||||
uint32_t j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
fprintf(fd," int8_t* cnProcBuf = p_procBuf->cnProcBuf;\n");
|
|
||||||
fprintf(fd," int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;\n");
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
|
||||||
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
|
|
||||||
fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n");
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2);
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
for (j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[1]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<5; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[2]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<6; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[3]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<7; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0= ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<8; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[5]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[6]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<9; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn, zeros);\n",(lut_startAddrCnGroups[6]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<10; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min,sgn,zeros);\n",(lut_startAddrCnGroups[7]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<19; j++)
|
|
||||||
{
|
|
||||||
// Loop over CNs
|
|
||||||
// for (i=0; i<M; i++,iprime++)
|
|
||||||
// {
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[8]>>6)+(j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-596
@@ -1,596 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t M;
|
|
||||||
uint32_t j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufResBit;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBuf;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufRes;\n");
|
|
||||||
fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
// Set of results pointer to correct BN address
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][1]/2));
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
for (j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<5; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<6; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<7; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<8; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[6]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
|
|
||||||
// Set pointers to start of group
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<9; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<10; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<19; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-596
@@ -1,596 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t M;
|
|
||||||
uint32_t j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufResBit;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBuf;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufRes;\n");
|
|
||||||
fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n");
|
|
||||||
fprintf(fd," const __m512i* p_maxLLR = (__m512i*) maxLLR512_epi8;\n");
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (j=0; j<3; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
// Set of results pointer to correct BN address
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG3[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG3[j][1]/2);
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
for (j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG4[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG4[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<5; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG5[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG5[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<6; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG6[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG6[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<7; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",lut_idxCnProcG7[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG7[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<8; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG8[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG8[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[6]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
|
|
||||||
// Set pointers to start of group
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<9; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG9[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG9[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<10; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG10[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG10[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
for (j=0; j<19; j++)
|
|
||||||
{
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup);
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG19[j][0]/2);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG19[j][k]/2);
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-590
@@ -1,590 +0,0 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../../nrLDPCdecoder_defs.h"
|
|
||||||
|
|
||||||
void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R)
|
|
||||||
{
|
|
||||||
const char *ratestr[3]={"13","23","89"};
|
|
||||||
|
|
||||||
if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();}
|
|
||||||
|
|
||||||
|
|
||||||
// system("mkdir -p ../ldpc_gen_files");
|
|
||||||
|
|
||||||
char fname[50];
|
|
||||||
sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]);
|
|
||||||
FILE *fd=fopen(fname,"w");
|
|
||||||
if (fd == NULL) {printf("Cannot create \n");abort();}
|
|
||||||
|
|
||||||
fprintf(fd,"#include <stdint.h>\n");
|
|
||||||
fprintf(fd,"#include <immintrin.h>\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n");
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]);
|
|
||||||
|
|
||||||
const uint8_t* lut_numCnInCnGroups;
|
|
||||||
const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1;
|
|
||||||
|
|
||||||
if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13;
|
|
||||||
else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23;
|
|
||||||
else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89;
|
|
||||||
else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t M;
|
|
||||||
uint32_t j;
|
|
||||||
uint32_t k;
|
|
||||||
// Offset to each bit within a group in terms of 64 Byte
|
|
||||||
uint32_t bitOffsetInGroup;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 3 BNs
|
|
||||||
fprintf(fd,"//Process group with 3 BNs\n");
|
|
||||||
// LUT with offsets for bits that need to be processed
|
|
||||||
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
// Offsets are in units of bitOffsetInGroup (1*384/32)12
|
|
||||||
|
|
||||||
const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}};
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n");
|
|
||||||
fprintf(fd," zeros = _mm512_setzero_si512();\n");
|
|
||||||
fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufResBit;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBuf;\n");
|
|
||||||
fprintf(fd," __m512i* p_cnProcBufRes;\n");
|
|
||||||
fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[0] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[0]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<3;j++) {\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Set of results pointer to correct BN address
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// 32 CNs of second BN
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][1]/2));
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 4 BNs
|
|
||||||
fprintf(fd,"//Process group with 4 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[1] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[1]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
//for (j=0; j<4; j++)
|
|
||||||
// {
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<4;j++) {\n");
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<3; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
// *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn);
|
|
||||||
// p_cnProcBufResBit++;
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 5 BNs
|
|
||||||
fprintf(fd,"//Process group with 5 BNs\n");
|
|
||||||
// Offset is 18*384/32 = 216
|
|
||||||
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
|
|
||||||
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[2] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[2]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<5;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<4; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 6 BNs
|
|
||||||
fprintf(fd,"//Process group with 6 BNs\n");
|
|
||||||
// Offset is 8*384/32 = 48
|
|
||||||
const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480},
|
|
||||||
{0,96,288,384,480}, {0,96,192,384,480},
|
|
||||||
{0,96,192,288,480}, {0,96,192,288,384}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[3] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[3]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<6;j++) {\n");
|
|
||||||
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<5; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 7 BNs
|
|
||||||
fprintf(fd,"//Process group with 7 BNs\n");
|
|
||||||
// Offset is 5*384/32 = 30
|
|
||||||
const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360},
|
|
||||||
{0,60,180,240,300,360}, {0,60,120,240,300,360},
|
|
||||||
{0,60,120,180,300,360}, {0,60,120,180,240,360},
|
|
||||||
{0,60,120,180,240,300}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[4] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[4]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6;
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<7;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<6; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 8 BNs
|
|
||||||
fprintf(fd,"//Process group with 8 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168},
|
|
||||||
{0,24,72,96,112,144,168}, {0,24,48,96,112,144,168},
|
|
||||||
{0,24,48,72,112,144,168}, {0,24,48,72,96,144,168},
|
|
||||||
{0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[5] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[5]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<8;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<7; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 9 BNs
|
|
||||||
fprintf(fd,"//Process group with 9 BNs\n");
|
|
||||||
// Offset is 2*384/32 = 12
|
|
||||||
const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192},
|
|
||||||
{0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192},
|
|
||||||
{0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192},
|
|
||||||
{0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192},
|
|
||||||
{0,24,48,72,96,120,144,168}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[6] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[6]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]);
|
|
||||||
|
|
||||||
// Set pointers to start of group
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<9;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<8; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 10 BNs
|
|
||||||
fprintf(fd,"//Process group with 10 BNs\n");
|
|
||||||
// Offset is 1*384/32 = 6
|
|
||||||
const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108},
|
|
||||||
{0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108},
|
|
||||||
{0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108},
|
|
||||||
{0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108},
|
|
||||||
{0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}};
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[7] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[7]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]);
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<10;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<9; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =====================================================================
|
|
||||||
// Process group with 19 BNs
|
|
||||||
fprintf(fd,"//Process group with 19 BNs\n");
|
|
||||||
// Offset is 4*384/32 = 24
|
|
||||||
const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864},
|
|
||||||
{0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}};
|
|
||||||
|
|
||||||
|
|
||||||
if (lut_numCnInCnGroups[8] > 0)
|
|
||||||
{
|
|
||||||
// Number of groups of 64 CNs for parallel processing
|
|
||||||
// Ceil for values not divisible by 64
|
|
||||||
M = (lut_numCnInCnGroups[8]*Z + 63)>>6;
|
|
||||||
|
|
||||||
// Set the offset to each bit within a group in terms of 64 Byte
|
|
||||||
bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6;
|
|
||||||
|
|
||||||
// Set pointers to start of group 3
|
|
||||||
fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]);
|
|
||||||
|
|
||||||
// Loop over every BN
|
|
||||||
|
|
||||||
fprintf(fd," for (int j=0;j<11;j++) {\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup));
|
|
||||||
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
|
|
||||||
// Abs and sign of 64 CNs (first BN)
|
|
||||||
// zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][0]/2));
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n");
|
|
||||||
fprintf(fd," min = _mm512_abs_epi8(zmm0);\n");
|
|
||||||
|
|
||||||
|
|
||||||
// Loop over BNs
|
|
||||||
for (k=1; k<18; k++)
|
|
||||||
{
|
|
||||||
fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][k]/2));
|
|
||||||
|
|
||||||
// min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n");
|
|
||||||
|
|
||||||
// sgn = _mm512_sign_epi8(*p_ones, zmm0);
|
|
||||||
fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store result
|
|
||||||
// min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
|
||||||
fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n");
|
|
||||||
|
|
||||||
fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n");
|
|
||||||
fprintf(fd," p_cnProcBufResBit++;\n");
|
|
||||||
fprintf(fd," }\n");
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fd,"}\n");
|
|
||||||
fclose(fd);
|
|
||||||
}//end of the function nrLDPC_cnProc_BG1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+191
-393
File diff suppressed because it is too large
Load Diff
+43
-129
@@ -11,16 +11,12 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [3456];
|
p_llrRes = (__m256i*) &llrRes [3456];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[12];
|
p_res = &p_bnProcBufRes[12];
|
||||||
p_llrRes = (__m256i*) &llrRes [3456];
|
p_llrRes = (__m256i*) &llrRes [3456];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[12 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
M = (5*Z + 31)>>5;
|
M = (5*Z + 31)>>5;
|
||||||
@@ -29,23 +25,17 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [3840];
|
p_llrRes = (__m256i*) &llrRes [3840];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[60];
|
p_res = &p_bnProcBufRes[60];
|
||||||
p_llrRes = (__m256i*) &llrRes [3840];
|
p_llrRes = (__m256i*) &llrRes [3840];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[60 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[120];
|
p_res = &p_bnProcBufRes[120];
|
||||||
p_llrRes = (__m256i*) &llrRes [3840];
|
p_llrRes = (__m256i*) &llrRes [3840];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[120 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -54,30 +44,22 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [5760];
|
p_llrRes = (__m256i*) &llrRes [5760];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [5760];
|
p_llrRes = (__m256i*) &llrRes [5760];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[72];
|
p_res = &p_bnProcBufRes[72];
|
||||||
p_llrRes = (__m256i*) &llrRes [5760];
|
p_llrRes = (__m256i*) &llrRes [5760];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[72 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[108];
|
p_res = &p_bnProcBufRes[108];
|
||||||
p_llrRes = (__m256i*) &llrRes [5760];
|
p_llrRes = (__m256i*) &llrRes [5760];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[108 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (7*Z + 31)>>5;
|
M = (7*Z + 31)>>5;
|
||||||
@@ -86,37 +68,27 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[84];
|
p_res = &p_bnProcBufRes[84];
|
||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[84 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[168];
|
p_res = &p_bnProcBufRes[168];
|
||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[168 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[252];
|
p_res = &p_bnProcBufRes[252];
|
||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[252 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[336];
|
p_res = &p_bnProcBufRes[336];
|
||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[336 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[336 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (8*Z + 31)>>5;
|
M = (8*Z + 31)>>5;
|
||||||
@@ -125,44 +97,32 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[96];
|
p_res = &p_bnProcBufRes[96];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[96 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[192];
|
p_res = &p_bnProcBufRes[192];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[192 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[288];
|
p_res = &p_bnProcBufRes[288];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[288 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[288 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[384];
|
p_res = &p_bnProcBufRes[384];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[384 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[384 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[480];
|
p_res = &p_bnProcBufRes[480];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[480 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[480 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
@@ -175,79 +135,57 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[12];
|
p_res = &p_bnProcBufRes[12];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[12 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[24];
|
p_res = &p_bnProcBufRes[24];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[24 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[48];
|
p_res = &p_bnProcBufRes[48];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[48 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[60];
|
p_res = &p_bnProcBufRes[60];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[60 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[72];
|
p_res = &p_bnProcBufRes[72];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[72 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[84];
|
p_res = &p_bnProcBufRes[84];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[84 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[96];
|
p_res = &p_bnProcBufRes[96];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[96 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[108];
|
p_res = &p_bnProcBufRes[108];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[108 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[120];
|
p_res = &p_bnProcBufRes[120];
|
||||||
p_llrRes = (__m256i*) &llrRes [12672];
|
p_llrRes = (__m256i*) &llrRes [12672];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[120 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 12 CNs
|
// Process group with 12 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -256,86 +194,62 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[12];
|
p_res = &p_bnProcBufRes[12];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[12 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[24];
|
p_res = &p_bnProcBufRes[24];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[24 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[48];
|
p_res = &p_bnProcBufRes[48];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[48 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[60];
|
p_res = &p_bnProcBufRes[60];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[60 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[72];
|
p_res = &p_bnProcBufRes[72];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[72 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[84];
|
p_res = &p_bnProcBufRes[84];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[84 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[96];
|
p_res = &p_bnProcBufRes[96];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[96 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[108];
|
p_res = &p_bnProcBufRes[108];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[108 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[120];
|
p_res = &p_bnProcBufRes[120];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[120 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[132];
|
p_res = &p_bnProcBufRes[132];
|
||||||
p_llrRes = (__m256i*) &llrRes [13056];
|
p_llrRes = (__m256i*) &llrRes [13056];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[132 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 13 CNs
|
// Process group with 13 CNs
|
||||||
// Process group with 14 CNs
|
// Process group with 14 CNs
|
||||||
|
|||||||
+14
-42
@@ -11,16 +11,12 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [384];
|
p_llrRes = (__m256i*) &llrRes [384];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [384];
|
p_llrRes = (__m256i*) &llrRes [384];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
M = (21*Z + 31)>>5;
|
M = (21*Z + 31)>>5;
|
||||||
@@ -29,23 +25,17 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [1536];
|
p_llrRes = (__m256i*) &llrRes [1536];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[252];
|
p_res = &p_bnProcBufRes[252];
|
||||||
p_llrRes = (__m256i*) &llrRes [1536];
|
p_llrRes = (__m256i*) &llrRes [1536];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[252 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[504];
|
p_res = &p_bnProcBufRes[504];
|
||||||
p_llrRes = (__m256i*) &llrRes [1536];
|
p_llrRes = (__m256i*) &llrRes [1536];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[504 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[504 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -54,30 +44,22 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[12];
|
p_res = &p_bnProcBufRes[12];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[12 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[24];
|
p_res = &p_bnProcBufRes[24];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[24 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [9600];
|
p_llrRes = (__m256i*) &llrRes [9600];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -86,37 +68,27 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu
|
|||||||
p_res = &p_bnProcBufRes[0];
|
p_res = &p_bnProcBufRes[0];
|
||||||
p_llrRes = (__m256i*) &llrRes [9984];
|
p_llrRes = (__m256i*) &llrRes [9984];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[0 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[12];
|
p_res = &p_bnProcBufRes[12];
|
||||||
p_llrRes = (__m256i*) &llrRes [9984];
|
p_llrRes = (__m256i*) &llrRes [9984];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[12 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[24];
|
p_res = &p_bnProcBufRes[24];
|
||||||
p_llrRes = (__m256i*) &llrRes [9984];
|
p_llrRes = (__m256i*) &llrRes [9984];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[24 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[36];
|
p_res = &p_bnProcBufRes[36];
|
||||||
p_llrRes = (__m256i*) &llrRes [9984];
|
p_llrRes = (__m256i*) &llrRes [9984];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[36 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
p_res = &p_bnProcBufRes[48];
|
p_res = &p_bnProcBufRes[48];
|
||||||
p_llrRes = (__m256i*) &llrRes [9984];
|
p_llrRes = (__m256i*) &llrRes [9984];
|
||||||
for (i=0;i<M;i++) {
|
for (i=0;i<M;i++) {
|
||||||
*p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[48 + i]);
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
p_res++;
|
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
|
|||||||
+440
@@ -0,0 +1,440 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
void nrLDPC_bnProc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
|
||||||
|
__m256i* p_bnProcBuf;
|
||||||
|
__m256i* p_bnProcBufRes;
|
||||||
|
__m256i* p_llrRes;
|
||||||
|
__m256i* p_res;
|
||||||
|
uint32_t M, i;
|
||||||
|
// Process group with 2 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [6912];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [6912];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 3 CNs
|
||||||
|
// Process group with 4 CNs
|
||||||
|
M = (2*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [7680];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [7680];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [7296];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [7296];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [7296];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [7296];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 5 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [10752];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [10752];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8064];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8064];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8064];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8064];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8064];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 6 CNs
|
||||||
|
M = (5*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [12672];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [12672];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[180];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[240];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[300];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [8448];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[300 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 7 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [24192];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [24192];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10368];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 8 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [26880];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [26880];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [10752];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 9 CNs
|
||||||
|
// Process group with 10 CNs
|
||||||
|
// Process group with 11 CNs
|
||||||
|
// Process group with 12 CNs
|
||||||
|
// Process group with 13 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [29952];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [29952];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11136];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 14 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [34944];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [34944];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11520];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 15 CNs
|
||||||
|
// Process group with 16 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [40320];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [40320];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[168];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[180];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [11904];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 17 CNs
|
||||||
|
// Process group with 18 CNs
|
||||||
|
// Process group with 19 CNs
|
||||||
|
// Process group with 20 CNs
|
||||||
|
// Process group with 21 CNs
|
||||||
|
// Process group with 22 CNs
|
||||||
|
// Process group with <23 CNs
|
||||||
|
// Process group with 24 CNs
|
||||||
|
// Process group with 25 CNs
|
||||||
|
// Process group with 26 CNs
|
||||||
|
// Process group with 27 CNs
|
||||||
|
// Process group with 28 CNs
|
||||||
|
// Process group with 29 CNs
|
||||||
|
// Process group with 30 CNs
|
||||||
|
}
|
||||||
+799
@@ -0,0 +1,799 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
void nrLDPC_bnProc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
|
||||||
|
__m256i* p_bnProcBuf;
|
||||||
|
__m256i* p_bnProcBufRes;
|
||||||
|
__m256i* p_llrRes;
|
||||||
|
__m256i* p_res;
|
||||||
|
uint32_t M, i;
|
||||||
|
// Process group with 2 CNs
|
||||||
|
// Process group with 3 CNs
|
||||||
|
// Process group with 4 CNs
|
||||||
|
// Process group with 5 CNs
|
||||||
|
M = (2*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [14592];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [14592];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [14592];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [14592];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [14592];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [14592];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [14592];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 6 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [18432];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [18432];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15360];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 7 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [20736];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [20736];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [15744];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 8 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [23424];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [23424];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16128];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 9 CNs
|
||||||
|
M = (2*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [26496];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [26496];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[168];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[192];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [16512];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 10 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [33408];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [33408];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17280];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 11 CNs
|
||||||
|
// Process group with 12 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [37248];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [37248];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [17664];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 13 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [41856];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [41856];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18048];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 14 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [46848];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [46848];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18432];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 15 CNs
|
||||||
|
// Process group with 16 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [52224];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [52224];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[168];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[180];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [18816];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 17 CNs
|
||||||
|
// Process group with 18 CNs
|
||||||
|
// Process group with 19 CNs
|
||||||
|
// Process group with 20 CNs
|
||||||
|
// Process group with 21 CNs
|
||||||
|
// Process group with 22 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [58368];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [58368];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[168];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[180];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[192];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[204];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[204 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[216];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[216 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[228];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[228 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[240];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[252];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19200];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
|
||||||
|
}
|
||||||
|
// Process group with <23 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [66816];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [66816];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[84];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[132];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[144];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[156];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[168];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[180];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[192];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[204];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[204 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[216];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[216 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[228];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[228 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[240];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[252];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[264];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [19584];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[264 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 24 CNs
|
||||||
|
// Process group with 25 CNs
|
||||||
|
// Process group with 26 CNs
|
||||||
|
// Process group with 27 CNs
|
||||||
|
// Process group with 28 CNs
|
||||||
|
// Process group with 29 CNs
|
||||||
|
// Process group with 30 CNs
|
||||||
|
}
|
||||||
+153
@@ -0,0 +1,153 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
void nrLDPC_bnProc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
|
||||||
|
__m256i* p_bnProcBuf;
|
||||||
|
__m256i* p_bnProcBufRes;
|
||||||
|
__m256i* p_llrRes;
|
||||||
|
__m256i* p_res;
|
||||||
|
uint32_t M, i;
|
||||||
|
// Process group with 2 CNs
|
||||||
|
M = (3*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [1152];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [1152];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [1152];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [1152];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 3 CNs
|
||||||
|
M = (5*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [3456];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [3456];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [2304];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [2304];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[120];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [2304];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 4 CNs
|
||||||
|
M = (3*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [9216];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [9216];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [4224];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [4224];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [4224];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[108];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [4224];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 5 CNs
|
||||||
|
M = (2*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [13824];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [13824];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [5376];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [5376];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [5376];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[72];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [5376];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[96];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [5376];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 6 CNs
|
||||||
|
M = (1*Z + 31)>>5;
|
||||||
|
p_bnProcBuf = (__m256i*) &bnProcBuf [17664];
|
||||||
|
p_bnProcBufRes = (__m256i*) &bnProcBufRes [17664];
|
||||||
|
p_res = &p_bnProcBufRes[0];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[12];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[24];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[36];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[48];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
|
||||||
|
}
|
||||||
|
p_res = &p_bnProcBufRes[60];
|
||||||
|
p_llrRes = (__m256i*) &llrRes [6144];
|
||||||
|
for (i=0;i<M;i++) {
|
||||||
|
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
|
||||||
|
}
|
||||||
|
// Process group with 7 CNs
|
||||||
|
// Process group with 8 CNs
|
||||||
|
// Process group with 9 CNs
|
||||||
|
// Process group with 10 CNs
|
||||||
|
// Process group with 11 CNs
|
||||||
|
// Process group with 12 CNs
|
||||||
|
// Process group with 13 CNs
|
||||||
|
// Process group with 14 CNs
|
||||||
|
// Process group with 15 CNs
|
||||||
|
// Process group with 16 CNs
|
||||||
|
// Process group with 17 CNs
|
||||||
|
// Process group with 18 CNs
|
||||||
|
// Process group with 19 CNs
|
||||||
|
// Process group with 20 CNs
|
||||||
|
// Process group with 21 CNs
|
||||||
|
// Process group with 22 CNs
|
||||||
|
// Process group with <23 CNs
|
||||||
|
// Process group with 24 CNs
|
||||||
|
// Process group with 25 CNs
|
||||||
|
// Process group with 26 CNs
|
||||||
|
// Process group with 27 CNs
|
||||||
|
// Process group with 28 CNs
|
||||||
|
// Process group with 29 CNs
|
||||||
|
// Process group with 30 CNs
|
||||||
|
}
|
||||||
+20
-38
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (42*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
@@ -52,8 +46,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -84,8 +77,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (2*Z + 31)>>5;
|
M = (2*Z + 31)>>5;
|
||||||
@@ -120,8 +112,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
M = (4*Z + 31)>>5;
|
M = (4*Z + 31)>>5;
|
||||||
@@ -160,8 +151,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -204,8 +194,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 9 CNs
|
// Process group with 9 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -252,8 +241,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 10 CNs
|
// Process group with 10 CNs
|
||||||
M = (4*Z + 31)>>5;
|
M = (4*Z + 31)>>5;
|
||||||
@@ -304,8 +292,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 11 CNs
|
// Process group with 11 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -360,8 +347,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 12 CNs
|
// Process group with 12 CNs
|
||||||
M = (4*Z + 31)>>5;
|
M = (4*Z + 31)>>5;
|
||||||
@@ -420,8 +406,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 13 CNs
|
// Process group with 13 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -484,8 +469,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 14 CNs
|
// Process group with 14 CNs
|
||||||
// Process group with 15 CNs
|
// Process group with 15 CNs
|
||||||
@@ -622,8 +606,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 29 CNs
|
// Process group with 29 CNs
|
||||||
// Process group with 30 CNs
|
// Process group with 30 CNs
|
||||||
@@ -755,7 +738,6 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-29
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (9*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
p_llrRes = (__m256i*) &llrRes [3456];
|
p_llrRes = (__m256i*) &llrRes [3456];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
|
||||||
@@ -42,8 +36,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
M = (5*Z + 31)>>5;
|
M = (5*Z + 31)>>5;
|
||||||
@@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (7*Z + 31)>>5;
|
M = (7*Z + 31)>>5;
|
||||||
@@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (8*Z + 31)>>5;
|
M = (8*Z + 31)>>5;
|
||||||
@@ -162,8 +152,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
@@ -222,8 +211,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 12 CNs
|
// Process group with 12 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -282,8 +270,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 13 CNs
|
// Process group with 13 CNs
|
||||||
// Process group with 14 CNs
|
// Process group with 14 CNs
|
||||||
|
|||||||
+13
-23
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
p_llrRes = (__m256i*) &llrRes [384];
|
p_llrRes = (__m256i*) &llrRes [384];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
|
||||||
@@ -42,8 +36,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
M = (21*Z + 31)>>5;
|
M = (21*Z + 31)>>5;
|
||||||
@@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
|
|||||||
+18
-33
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (18*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[j+1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
p_llrRes = (__m256i*) &llrRes [6912];
|
p_llrRes = (__m256i*) &llrRes [6912];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
|
||||||
@@ -42,8 +36,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
@@ -71,8 +64,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -103,8 +95,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (5*Z + 31)>>5;
|
M = (5*Z + 31)>>5;
|
||||||
@@ -139,8 +130,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -179,8 +169,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -223,8 +212,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 9 CNs
|
// Process group with 9 CNs
|
||||||
// Process group with 10 CNs
|
// Process group with 10 CNs
|
||||||
@@ -291,8 +279,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 14 CNs
|
// Process group with 14 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -359,8 +346,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 15 CNs
|
// Process group with 15 CNs
|
||||||
// Process group with 16 CNs
|
// Process group with 16 CNs
|
||||||
@@ -436,8 +422,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 17 CNs
|
// Process group with 17 CNs
|
||||||
// Process group with 18 CNs
|
// Process group with 18 CNs
|
||||||
@@ -445,7 +430,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
// Process group with 20 CNs
|
// Process group with 20 CNs
|
||||||
// Process group with 21 CNs
|
// Process group with 21 CNs
|
||||||
// Process group with 22 CNs
|
// Process group with 22 CNs
|
||||||
// Process group with 23 CNs
|
// Process group with <23 CNs
|
||||||
// Process group with 24 CNs
|
// Process group with 24 CNs
|
||||||
// Process group with 25 CNs
|
// Process group with 25 CNs
|
||||||
// Process group with 26 CNs
|
// Process group with 26 CNs
|
||||||
|
|||||||
+20
-38
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (38*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[j+1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
@@ -57,8 +51,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -93,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -133,8 +125,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -177,8 +168,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 9 CNs
|
// Process group with 9 CNs
|
||||||
M = (2*Z + 31)>>5;
|
M = (2*Z + 31)>>5;
|
||||||
@@ -225,8 +215,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 10 CNs
|
// Process group with 10 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -277,8 +266,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 11 CNs
|
// Process group with 11 CNs
|
||||||
// Process group with 12 CNs
|
// Process group with 12 CNs
|
||||||
@@ -338,8 +326,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 13 CNs
|
// Process group with 13 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -402,8 +389,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 14 CNs
|
// Process group with 14 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -470,8 +456,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 15 CNs
|
// Process group with 15 CNs
|
||||||
// Process group with 16 CNs
|
// Process group with 16 CNs
|
||||||
@@ -547,8 +532,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 17 CNs
|
// Process group with 17 CNs
|
||||||
// Process group with 18 CNs
|
// Process group with 18 CNs
|
||||||
@@ -652,10 +636,9 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 23 CNs
|
// Process group with <23 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [66816];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [66816];
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [19584];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [19584];
|
||||||
@@ -756,8 +739,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 24 CNs
|
// Process group with 24 CNs
|
||||||
// Process group with 25 CNs
|
// Process group with 25 CNs
|
||||||
|
|||||||
+14
-25
@@ -1,29 +1,23 @@
|
|||||||
static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
|
||||||
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
__m256i ymm0, ymm1, ymmRes0, ymmRes1;
|
||||||
__m128i* p_bnProcBuf;
|
__m128i* p_bnProcBuf;
|
||||||
__m256i* p_bnProcBufRes;
|
|
||||||
__m128i* p_llrProcBuf;
|
__m128i* p_llrProcBuf;
|
||||||
__m256i* p_llrProcBuf256;
|
|
||||||
__m256i* p_llrRes;
|
__m256i* p_llrRes;
|
||||||
uint32_t M ;
|
uint32_t M ;
|
||||||
// Process group with 1 CNs
|
// Process group with 1 CNs
|
||||||
M = (0*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
|
||||||
p_bnProcBufRes = (__m256i*) &bnProcBufRes [0];
|
|
||||||
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
|
||||||
p_llrProcBuf256 = (__m256i*) &llrProcBuf [0];
|
|
||||||
p_llrRes = (__m256i*) &llrRes [0];
|
p_llrRes = (__m256i*) &llrRes [0];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
p_bnProcBufRes[i] = p_llrProcBuf256[i];
|
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymm0, ymm1);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[j+1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j+1]);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j+1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymm0, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 2 CNs
|
// Process group with 2 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
p_llrRes = (__m256i*) &llrRes [1152];
|
p_llrRes = (__m256i*) &llrRes [1152];
|
||||||
for (int i=0,j=0;i<M;i++,j+=2) {
|
for (int i=0,j=0;i<M;i++,j+=2) {
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
|
||||||
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j]);
|
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j]);
|
||||||
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
|
||||||
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
|
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
|
||||||
@@ -42,8 +36,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 3 CNs
|
// Process group with 3 CNs
|
||||||
M = (5*Z + 31)>>5;
|
M = (5*Z + 31)>>5;
|
||||||
@@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 4 CNs
|
// Process group with 4 CNs
|
||||||
M = (3*Z + 31)>>5;
|
M = (3*Z + 31)>>5;
|
||||||
@@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 5 CNs
|
// Process group with 5 CNs
|
||||||
M = (2*Z + 31)>>5;
|
M = (2*Z + 31)>>5;
|
||||||
@@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 6 CNs
|
// Process group with 6 CNs
|
||||||
M = (1*Z + 31)>>5;
|
M = (1*Z + 31)>>5;
|
||||||
@@ -162,8 +152,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
|
||||||
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
|
||||||
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
|
||||||
*p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
|
||||||
p_llrRes++;
|
|
||||||
}
|
}
|
||||||
// Process group with 7 CNs
|
// Process group with 7 CNs
|
||||||
// Process group with 8 CNs
|
// Process group with 8 CNs
|
||||||
@@ -181,7 +170,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc
|
|||||||
// Process group with 20 CNs
|
// Process group with 20 CNs
|
||||||
// Process group with 21 CNs
|
// Process group with 21 CNs
|
||||||
// Process group with 22 CNs
|
// Process group with 22 CNs
|
||||||
// Process group with 23 CNs
|
// Process group with <23 CNs
|
||||||
// Process group with 24 CNs
|
// Process group with 24 CNs
|
||||||
// Process group with 25 CNs
|
// Process group with 25 CNs
|
||||||
// Process group with 26 CNs
|
// Process group with 26 CNs
|
||||||
|
|||||||
+7
-7
@@ -460,7 +460,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -485,7 +485,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -510,7 +510,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -535,7 +535,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -560,7 +560,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2424+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2424+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -613,7 +613,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2520+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2520+i];
|
||||||
@@ -638,7 +638,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
|
|||||||
+7
-7
@@ -211,7 +211,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -236,7 +236,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -261,7 +261,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -286,7 +286,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -311,7 +311,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2424+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2424+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
@@ -364,7 +364,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2520+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2520+i];
|
||||||
@@ -389,7 +389,7 @@ M = (2*Z + 31)>>5;
|
|||||||
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2448+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2464+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2472+i];
|
||||||
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
|
||||||
sgn = _mm256_sign_epi8(sgn, ymm0);
|
sgn = _mm256_sign_epi8(sgn, ymm0);
|
||||||
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
ymm0 = ((__m256i*)cnProcBuf)[2496+i];
|
||||||
|
|||||||
+7
-7
@@ -460,7 +460,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -485,7 +485,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -510,7 +510,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -535,7 +535,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -560,7 +560,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1212+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1212+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -613,7 +613,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1260+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1260+i];
|
||||||
@@ -638,7 +638,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
|
|||||||
+7
-7
@@ -211,7 +211,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -236,7 +236,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -261,7 +261,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -286,7 +286,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -311,7 +311,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1212+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1212+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
@@ -364,7 +364,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1260+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1260+i];
|
||||||
@@ -389,7 +389,7 @@ M = (2*Z + 63)>>6;
|
|||||||
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1224+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1232+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1236+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1248+i];
|
||||||
|
|||||||
+101
-67
@@ -1,15 +1,17 @@
|
|||||||
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
||||||
static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
||||||
uint32_t M;
|
uint32_t M;
|
||||||
__m512i zmm0, min, sgn,zeros,maxLLR;
|
__m512i zmm0, min, sgn,zeros,ones,maxLLR;
|
||||||
zeros = _mm512_setzero_si512();
|
zeros = _mm512_setzero_si512();
|
||||||
maxLLR = _mm512_set1_epi8((char)127);
|
maxLLR = _mm512_set1_epi8((char)127);
|
||||||
|
ones = _mm512_set1_epi8((char)1);
|
||||||
//Process group with 3 BNs
|
//Process group with 3 BNs
|
||||||
//Process group with 4 BNs
|
//Process group with 4 BNs
|
||||||
M = (8*Z + 63)>>6;
|
M = (8*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -20,8 +22,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -32,8 +35,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -44,8 +48,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -58,8 +63,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 5 BNs
|
//Process group with 5 BNs
|
||||||
M = (7*Z + 63)>>6;
|
M = (7*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -73,8 +79,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[588+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[588+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -88,8 +95,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[642+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[642+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -103,8 +111,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[696+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[696+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -118,8 +127,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[750+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[750+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -135,8 +145,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 6 BNs
|
//Process group with 6 BNs
|
||||||
M = (3*Z + 63)>>6;
|
M = (3*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -153,8 +164,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -171,8 +183,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -189,8 +202,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -207,8 +221,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -225,8 +240,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -245,8 +261,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 8 BNs
|
//Process group with 8 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -269,8 +286,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -293,8 +311,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -317,8 +336,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -341,8 +361,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -365,8 +386,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -389,8 +411,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -413,8 +436,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -439,8 +463,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 10 BNs
|
//Process group with 10 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -469,8 +494,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -499,8 +525,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -529,8 +556,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -559,8 +587,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -589,8 +618,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -619,8 +649,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -649,8 +680,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -679,8 +711,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -709,8 +742,9 @@ static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
|
|||||||
+108
-92
@@ -1,64 +1,48 @@
|
|||||||
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
||||||
static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
||||||
uint32_t M;
|
uint32_t M;
|
||||||
__m512i zmm0, min, sgn,zeros,maxLLR;
|
__m512i zmm0, min, sgn,zeros,ones,maxLLR;
|
||||||
zeros = _mm512_setzero_si512();
|
zeros = _mm512_setzero_si512();
|
||||||
maxLLR = _mm512_set1_epi8((char)127);
|
maxLLR = _mm512_set1_epi8((char)127);
|
||||||
|
ones = _mm512_set1_epi8((char)1);
|
||||||
//Process group with 3 BNs
|
//Process group with 3 BNs
|
||||||
M = (20*Z + 63)>>6;
|
M = (6*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i+=2) {
|
for (int i=0;i<M;i++) {
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[36+i];
|
zmm0 = ((__m512i*)cnProcBuf)[36+i];
|
||||||
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
min = _mm512_abs_epi8(zmm0);
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[72+i];
|
zmm0 = ((__m512i*)cnProcBuf)[72+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
min = _mm512_min_epu8(min, maxLLR);
|
||||||
((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros);
|
||||||
sgn = ((__m512i*)cnProcBuf)[37+i];
|
|
||||||
min = _mm512_abs_epi8(sgn);
|
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[73+i];
|
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
|
||||||
((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros);
|
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i+=2) {
|
for (int i=0;i<M;i++) {
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[0+i];
|
zmm0 = ((__m512i*)cnProcBuf)[0+i];
|
||||||
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
min = _mm512_abs_epi8(zmm0);
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[72+i];
|
zmm0 = ((__m512i*)cnProcBuf)[72+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
min = _mm512_min_epu8(min, maxLLR);
|
||||||
((__m512i*)cnProcBufRes)[36+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[36+i] = conditional_negate(min, sgn,zeros);
|
||||||
sgn = ((__m512i*)cnProcBuf)[1+i];
|
|
||||||
min = _mm512_abs_epi8(sgn);
|
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[73+i];
|
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
|
||||||
((__m512i*)cnProcBufRes)[37+i] = conditional_negate(min, sgn,zeros);
|
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i+=2) {
|
for (int i=0;i<M;i++) {
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[0+i];
|
zmm0 = ((__m512i*)cnProcBuf)[0+i];
|
||||||
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
min = _mm512_abs_epi8(zmm0);
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[36+i];
|
zmm0 = ((__m512i*)cnProcBuf)[36+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
min = _mm512_min_epu8(min, maxLLR);
|
||||||
((__m512i*)cnProcBufRes)[72+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[72+i] = conditional_negate(min, sgn,zeros);
|
||||||
sgn = ((__m512i*)cnProcBuf)[1+i];
|
|
||||||
min = _mm512_abs_epi8(sgn);
|
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[37+i];
|
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
|
||||||
min = _mm512_min_epu8(min, maxLLR);
|
|
||||||
((__m512i*)cnProcBufRes)[73+i] = conditional_negate(min, sgn,zeros);
|
|
||||||
}
|
}
|
||||||
//Process group with 4 BNs
|
//Process group with 4 BNs
|
||||||
M = (20*Z + 63)>>6;
|
M = (20*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -69,8 +53,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -81,8 +66,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -93,8 +79,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -107,8 +94,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 5 BNs
|
//Process group with 5 BNs
|
||||||
M = (9*Z + 63)>>6;
|
M = (9*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -122,8 +110,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[588+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[588+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
zmm0 = ((__m512i*)cnProcBuf)[696+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -137,8 +126,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[642+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[642+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -152,8 +142,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[696+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[696+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -167,8 +158,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[750+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[750+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[588+i];
|
zmm0 = ((__m512i*)cnProcBuf)[588+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
zmm0 = ((__m512i*)cnProcBuf)[642+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -184,8 +176,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 6 BNs
|
//Process group with 6 BNs
|
||||||
M = (3*Z + 63)>>6;
|
M = (3*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -202,8 +195,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -220,8 +214,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -238,8 +233,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -256,8 +252,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -274,8 +271,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -294,8 +292,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 8 BNs
|
//Process group with 8 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -318,8 +317,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -342,8 +342,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -366,8 +367,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -390,8 +392,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -414,8 +417,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -438,8 +442,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -462,8 +467,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -488,8 +494,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 10 BNs
|
//Process group with 10 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -518,8 +525,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -548,8 +556,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -578,8 +587,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -608,8 +618,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -638,8 +649,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -668,8 +680,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -698,8 +711,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -728,8 +742,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -758,8 +773,9 @@ static inline void nrLDPC_cnProc_BG2_R15_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
|
|||||||
+86
-57
@@ -1,15 +1,17 @@
|
|||||||
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)
|
||||||
static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {
|
||||||
uint32_t M;
|
uint32_t M;
|
||||||
__m512i zmm0, min, sgn,zeros,maxLLR;
|
__m512i zmm0, min, sgn,zeros,ones,maxLLR;
|
||||||
zeros = _mm512_setzero_si512();
|
zeros = _mm512_setzero_si512();
|
||||||
maxLLR = _mm512_set1_epi8((char)127);
|
maxLLR = _mm512_set1_epi8((char)127);
|
||||||
|
ones = _mm512_set1_epi8((char)1);
|
||||||
//Process group with 3 BNs
|
//Process group with 3 BNs
|
||||||
//Process group with 4 BNs
|
//Process group with 4 BNs
|
||||||
M = (1*Z + 63)>>6;
|
M = (1*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -20,8 +22,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
zmm0 = ((__m512i*)cnProcBuf)[348+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -32,8 +35,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[228+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -44,8 +48,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[348+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[108+i];
|
zmm0 = ((__m512i*)cnProcBuf)[108+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
zmm0 = ((__m512i*)cnProcBuf)[228+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -59,8 +64,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 6 BNs
|
//Process group with 6 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -77,8 +83,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[858+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
zmm0 = ((__m512i*)cnProcBuf)[894+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -95,8 +102,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[876+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -113,8 +121,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[894+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -131,8 +140,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[912+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -149,8 +159,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[930+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[858+i];
|
zmm0 = ((__m512i*)cnProcBuf)[858+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
zmm0 = ((__m512i*)cnProcBuf)[876+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -169,8 +180,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 8 BNs
|
//Process group with 8 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -193,8 +205,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
zmm0 = ((__m512i*)cnProcBuf)[990+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -217,8 +230,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[978+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -241,8 +255,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[990+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -265,8 +280,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1002+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -289,8 +305,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1014+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -313,8 +330,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -337,8 +355,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
((__m512i*)cnProcBufRes)[1038+i] = conditional_negate(min, sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[966+i];
|
zmm0 = ((__m512i*)cnProcBuf)[966+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
zmm0 = ((__m512i*)cnProcBuf)[978+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -363,8 +382,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
//Process group with 10 BNs
|
//Process group with 10 BNs
|
||||||
M = (2*Z + 63)>>6;
|
M = (2*Z + 63)>>6;
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -393,8 +413,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1062+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1086+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -423,8 +444,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1074+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -453,8 +475,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -483,8 +506,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1098+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -513,8 +537,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1110+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -543,8 +568,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1122+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -573,8 +599,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1134+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -603,8 +630,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
@@ -633,8 +661,9 @@ static inline void nrLDPC_cnProc_BG2_R23_AVX512(int8_t* cnProcBuf, int8_t* cnPro
|
|||||||
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
((__m512i*)cnProcBufRes)[1158+i] = conditional_negate(min,sgn,zeros);
|
||||||
}
|
}
|
||||||
for (int i=0;i<M;i++) {
|
for (int i=0;i<M;i++) {
|
||||||
sgn = ((__m512i*)cnProcBuf)[1062+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1062+i];
|
||||||
min = _mm512_abs_epi8(sgn);
|
sgn = _mm512_xor_si512(ones, zmm0);
|
||||||
|
min = _mm512_abs_epi8(zmm0);
|
||||||
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
zmm0 = ((__m512i*)cnProcBuf)[1074+i];
|
||||||
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));
|
||||||
sgn = _mm512_xor_si512(sgn, zmm0);
|
sgn = _mm512_xor_si512(sgn, zmm0);
|
||||||
|
|||||||
+1040
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user