feat(cnProc_gen_BG1_128): Put back small change in 128-bit SIMD code generator for LDPC decoder (cnProc).
Avoid the use of simde_mm_sign_epi8 which is inefficient on aarch64. Decoding times are significantly improved on aarch64. Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
This commit is contained in:
committed by
Romain Beurdouche
co-authored by
Romain Beurdouche
parent
a4c950774b
commit
33078f9e3d
+83
-9
@@ -24,7 +24,9 @@
|
||||
#include <stdint.h>
|
||||
#include "../../nrLDPCdecoder_defs.h"
|
||||
|
||||
#define AVOID_MM256_SIGN 1
|
||||
#ifdef __aarch64__
|
||||
#define AVOID_SIGN 1
|
||||
#endif
|
||||
#define DROP_MAXLLR 1
|
||||
void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
{
|
||||
@@ -126,7 +128,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>4)+lut_idxCnProcG3[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -138,7 +144,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
// Store result
|
||||
// min = simde_mm_min_epu8(min, maxLLR); // 128 in epi8 is -127
|
||||
#ifndef DROP_MAXLLR
|
||||
@@ -185,7 +195,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>4)+lut_idxCnProcG4[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -199,7 +213,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -252,7 +270,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>4)+lut_idxCnProcG5[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -266,7 +288,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -319,7 +345,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>4)+lut_idxCnProcG6[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -333,7 +363,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -389,7 +423,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>4)+lut_idxCnProcG7[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -403,7 +441,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -460,7 +502,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>4)+lut_idxCnProcG8[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -474,7 +520,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -531,7 +581,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>4)+lut_idxCnProcG9[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -545,7 +599,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -603,7 +661,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>4)+lut_idxCnProcG10[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -617,7 +679,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
@@ -678,7 +744,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
|
||||
fprintf(fd," ymm0 = ((simde__m128i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>4)+lut_idxCnProcG19[j][0]*2);
|
||||
// sgn = simde_mm_sign_epi8(ones, ymm0);
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(ones, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(ones, ymm0);\n");
|
||||
#endif
|
||||
// min = simde_mm_abs_epi8(ymm0);
|
||||
fprintf(fd," min = simde_mm_abs_epi8(ymm0);\n");
|
||||
|
||||
@@ -692,7 +762,11 @@ void nrLDPC_cnProc_BG1_generator_128(const char* dir, int R)
|
||||
fprintf(fd," min = simde_mm_min_epu8(min, simde_mm_abs_epi8(ymm0));\n");
|
||||
|
||||
// sgn = simde_mm_sign_epi8(sgn, ymm0);
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#ifdef AVOID_SIGN
|
||||
fprintf(fd," sgn = simde_mm_xor_si128(sgn, ymm0);\n");
|
||||
#else
|
||||
fprintf(fd," sgn = simde_mm_sign_epi8(sgn, ymm0);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Store result
|
||||
|
||||
Reference in New Issue
Block a user