From fa3a637b7290211751ec5421f0003374b23230bd Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Mon, 4 May 2020 11:25:09 +0200 Subject: [PATCH] cleanup of generator, added directory/file creation for output --- .../nrLDPC_decoder/nrLDPC_tools/cnProc_gen.c | 846 +++++++++--------- 1 file changed, 430 insertions(+), 416 deletions(-) diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/cnProc_gen.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/cnProc_gen.c index 632827b871..d4487543e0 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/cnProc_gen.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/cnProc_gen.c @@ -11,636 +11,650 @@ void nrLDPC_cnProc_BG1_generator(t_nrLDPC_procBuf* p_procBuf, uint16_t Z,int R) { - printf("void nrLDPC_cnProc_BG1_Z%d\n",Z); + const char *ratestr[3]={"13","23","89"}; - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; + if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - 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); abort();} - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; + system("mkdir -p ldpc_gen_files"); - //__m256i* p_cnProcBuf; - //__m256i* p_cnProcBufRes; + char fname[50]; + sprintf(fname,"ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_%s.c",Z,ratestr[R]); + FILE *fd=fopen(fname,"w"); + if (fd == NULL) {printf("Cannot create %s\n");abort();} - // Number of CNs in Groups - uint32_t M; - uint32_t i; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 32 Byte - uint32_t bitOffsetInGroup; + fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_%s(t_nrLDPC_procBuf* p_procBuf) {\n",Z,ratestr[R]); - //__m256i ymm0, min, sgn; - //__m256i* p_cnProcBufResBit; + const uint8_t* lut_numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - // const __m256i* p_ones = (__m256i*) ones256_epi8; + 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();} + + int8_t* cnProcBuf = p_procBuf->cnProcBuf; + int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; + + //__m256i* p_cnProcBuf; + //__m256i* p_cnProcBufRes; + + // Number of CNs in Groups + uint32_t M; + uint32_t i; + uint32_t j; + uint32_t k; + // Offset to each bit within a group in terms of 32 Byte + uint32_t bitOffsetInGroup; + + //__m256i ymm0, min, sgn; + //__m256i* p_cnProcBufResBit; + + // const __m256i* p_ones = (__m256i*) ones256_epi8; // const __m256i* p_maxLLR = (__m256i*) maxLLR256_epi8; - // 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) -// const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; + // 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) + // const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - // ===================================================================== - // Process group with 3 BNs + // ===================================================================== + // Process group with 3 BNs - // 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) - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; + // 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) + const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - printf(" __m256i ymm0, min, sgn;\n"); - printf(" const __m256i* p_ones = (__m256i*) ones256_epi8;\n"); - printf(" const __m256i* p_maxLLR = (__m256i*) maxLLR256_epi8;\n"); + fprintf(fd," __m256i ymm0, min, sgn;\n"); + fprintf(fd," const __m256i* p_ones = (__m256i*) ones256_epi8;\n"); + fprintf(fd," const __m256i* p_maxLLR = (__m256i*) maxLLR256_epi8;\n"); - if (lut_numCnInCnGroups[0] > 0) + if (lut_numCnInCnGroups[0] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[0]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[0]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 3 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[0]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[0]]; + // Set pointers to start of group 3 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[0]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[0]]; - // Loop over every BN - int iprime=0; - for (j=0; j<3; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<3; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[1] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[1]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[1]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 4 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 4 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<4; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<4; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[2] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[2]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[2]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 4 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 4 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<5; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<5; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[3] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[3]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[3]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 4 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 4 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<6; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<6; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[4] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[4]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[4]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 4 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 4 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<7; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<7; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[5] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[5]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[5]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 4 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 4 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<8; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<8; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[6] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[6]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[6]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 9 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 9 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<9; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<9; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[7] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[7]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[7]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 10 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 10 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<10; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<10; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i 0) + if (lut_numCnInCnGroups[8] > 0) { - // Number of groups of 32 CNs for parallel processing - // Ceil for values not divisible by 32 - M = (lut_numCnInCnGroups[8]*Z + 31)>>5; + // Number of groups of 32 CNs for parallel processing + // Ceil for values not divisible by 32 + M = (lut_numCnInCnGroups[8]*Z + 31)>>5; - // Set the offset to each bit within a group in terms of 32 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>5; + // Set the offset to each bit within a group in terms of 32 Byte + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>5; - // Set pointers to start of group 19 - //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; - //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; + // Set pointers to start of group 19 + //p_cnProcBuf = (__m256i*) &cnProcBuf [lut_startAddrCnGroups[1]]; + //p_cnProcBufRes = (__m256i*) &cnProcBufRes[lut_startAddrCnGroups[1]]; - // Loop over every BN - int iprime=0; - for (j=0; j<19; j++) + // Loop over every BN + int iprime=0; + for (j=0; j<19; j++) { - // Set of results pointer to correct BN address - //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + // Set of results pointer to correct BN address + //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); - // Loop over CNs - for (i=0; i