From b85b5fe47a843e81841f0fbf741c57df429287c9 Mon Sep 17 00:00:00 2001 From: Sy Date: Fri, 29 May 2020 14:57:15 +0200 Subject: [PATCH] Test for avx512 --- .../generator_avx512/cnProc_gen_BG1_avx512.c | 96 +++++++++--------- .../generator_avx512/cnProc_gen_avx512 | Bin 0 -> 199584 bytes 2 files changed, 48 insertions(+), 48 deletions(-) create mode 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c index 1d6f2f14d8..277cea73cf 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c @@ -80,10 +80,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>5; + M = (lut_numCnInCnGroups[0]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 3 @@ -104,7 +104,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>31)+lut_idxCnProcG3[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -112,7 +112,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // 32 CNs of second BN // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>31)+lut_idxCnProcG3[j][1]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -125,11 +125,11 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>31)+(j*bitOffsetInGroup)); // 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]>>5)+lut_idxCnProcG3[j][0]+1); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>31)+lut_idxCnProcG3[j][0]+1); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -137,7 +137,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // 32 CNs of second BN // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]+1); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>31)+lut_idxCnProcG3[j][1]+1); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -150,7 +150,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)+1); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>31)+(j*bitOffsetInGroup)+1); fprintf(fd," }\n"); } @@ -166,10 +166,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>5; + M = (lut_numCnInCnGroups[1]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 4 @@ -188,7 +188,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG4[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>31)+lut_idxCnProcG4[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -198,7 +198,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<3; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>31)+lut_idxCnProcG4[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -212,7 +212,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[1]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -230,10 +230,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>5; + M = (lut_numCnInCnGroups[2]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 4 @@ -253,7 +253,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG5[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>31)+lut_idxCnProcG5[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -263,7 +263,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<4; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>31)+lut_idxCnProcG5[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -277,7 +277,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[2]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -295,10 +295,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>5; + M = (lut_numCnInCnGroups[3]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 4 @@ -318,7 +318,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG6[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>31)+lut_idxCnProcG6[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -328,7 +328,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<5; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>31)+lut_idxCnProcG6[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -342,7 +342,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[3]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -362,10 +362,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>5; + M = (lut_numCnInCnGroups[4]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 4 @@ -385,7 +385,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG7[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>31)+lut_idxCnProcG7[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -395,7 +395,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<6; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>31)+lut_idxCnProcG7[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -409,7 +409,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[4]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[4]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -430,10 +430,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>5; + M = (lut_numCnInCnGroups[5]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 4 @@ -453,7 +453,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG8[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>31)+lut_idxCnProcG8[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -463,7 +463,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<7; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>31)+lut_idxCnProcG8[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -477,7 +477,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[5]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -499,10 +499,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>5; + M = (lut_numCnInCnGroups[6]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 9 @@ -522,7 +522,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG9[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>31)+lut_idxCnProcG9[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -532,7 +532,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<8; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>31)+lut_idxCnProcG9[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -546,7 +546,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[6]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[6]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -569,10 +569,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>5; + M = (lut_numCnInCnGroups[7]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 10 @@ -592,7 +592,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG10[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>31)+lut_idxCnProcG10[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -602,7 +602,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<9; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>31)+lut_idxCnProcG10[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -616,7 +616,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[7]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[7]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -642,10 +642,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>5; + M = (lut_numCnInCnGroups[8]*Z + 63)>>31; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>31; // Set pointers to start of group 19 @@ -665,7 +665,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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]>>5)+lut_idxCnProcG19[j][0]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>31)+lut_idxCnProcG19[j][0]); // sgn = _mm512_sign_epi16(ones, zmm0); fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); // min = _mm512_abs_epi8(zmm0); @@ -675,7 +675,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Loop over BNs for (k=1; k<18; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>31)+lut_idxCnProcG19[j][k]); // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); @@ -689,7 +689,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); // *p_cnProcBufResBit = _mm512_sign_epi16(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[8]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[8]>>31)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_avx512 new file mode 100755 index 0000000000000000000000000000000000000000..debe8b422d795dbe1b148a6f662068658b0d4f3f GIT binary patch literal 199584 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%0DF%T=$^Lm28R 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