From 1f9900ba61983d4971cdeccdbde92602d012e926 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Wed, 19 Jan 2022 23:01:27 +0100 Subject: [PATCH] LDPC decoder generator cleanup --- ...384_rate_1-3_block_length_8448_maxit_5.txt | 65 - .../CODING/nrLDPC_decoder/nrLDPC_decoder.c | 4 - .../nrLDPC_tools/generator_bnProc/Makefile | 4 +- .../generator_bnProc/bnProcPc_gen_BG1_avx2.c | 9 +- .../generator_bnProc/bnProcPc_gen_BG2_avx2.c | 1 + .../generator_bnProc/bnProc_gen_BG1_avx2.c | 5 +- .../generator_bnProc/bnProc_gen_BG2_avx2.c | 5 +- .../generator_bnProc/bnProc_gen_avx2 | Bin 110224 -> 0 bytes .../generator_bnProc_avx512/Makefile | 4 +- .../bnProcPc_gen_BG1_avx512.c | 4 +- .../bnProcPc_gen_BG2_avx512.c | 7 +- .../bnProc_gen_BG1_avx512.c | 5 +- .../bnProc_gen_BG2_avx512.c | 4 +- .../generator_bnProc_avx512/bnProc_gen_avx512 | Bin 114464 -> 0 bytes .../generator_bnProc_avx512/sauvegarde.tar.gz | Bin 4143 -> 0 bytes .../nrLDPC_tools/generator_cnProc/Makefile | 4 +- .../generator_cnProc/cnProc_gen_BG2_avx2.c | 5 +- .../generator_cnProc/cnProc_gen_avx2 | Bin 43328 -> 0 bytes .../generator_cnProc/sauvegarde.tar.gz | Bin 4299 -> 0 bytes .../cnProc_gen_BG1_avx512.c | 3 +- .../generator_cnProc_avx512/cnProc_gen_avx512 | Bin 43224 -> 0 bytes .../generator_cnProc_avx512/sauvegarde.tar.gz | Bin 3821 -> 0 bytes .../cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h | 2071 +++++++++++++++++ .../PHY/CODING/nrLDPC_decoder/nrLDPC_types.h | 5 +- 24 files changed, 2107 insertions(+), 98 deletions(-) delete mode 100644 cmake_targets/ldpctest_BG_1_Zc_384_rate_1-3_block_length_8448_maxit_5.txt delete mode 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_avx2 delete mode 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_avx512 delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/sauvegarde.tar.gz delete mode 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_avx2 delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/sauvegarde.tar.gz delete mode 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz create mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h diff --git a/cmake_targets/ldpctest_BG_1_Zc_384_rate_1-3_block_length_8448_maxit_5.txt b/cmake_targets/ldpctest_BG_1_Zc_384_rate_1-3_block_length_8448_maxit_5.txt deleted file mode 100644 index bb75af1367..0000000000 --- a/cmake_targets/ldpctest_BG_1_Zc_384_rate_1-3_block_length_8448_maxit_5.txt +++ /dev/null @@ -1,65 +0,0 @@ -SNR BLER BER UNCODED_BER ENCODER_MEAN ENCODER_STD ENCODER_MAX DECODER_TIME_MEAN DECODER_TIME_STD DECODER_TIME_MAX DECODER_ITER_MEAN DECODER_ITER_STD DECODER_ITER_MAX --2.000000 1.000000 0.346710 0.258207 43.602415 30.126226 341.472109 216.438613 10.939821 319.554933 5.000000 0.000000 5 --1.900000 1.000000 0.344876 0.255716 41.206220 4.019975 56.843517 216.302939 3.270367 233.994957 5.000000 0.000000 5 --1.800000 1.000000 0.342785 0.253097 40.851186 3.896434 56.430195 215.430289 4.428097 246.536045 5.000000 0.000000 5 --1.700000 1.000000 0.340844 0.251049 40.901418 3.745278 64.127024 215.529577 4.618868 240.568501 5.000000 0.000000 5 --1.600000 1.000000 0.339047 0.248977 41.431427 4.101305 57.556777 215.147073 3.634402 238.697868 5.000000 0.000000 5 --1.500000 1.000000 0.336629 0.246285 41.620505 4.581042 57.739456 215.078678 3.846847 238.079346 5.000000 0.000000 5 --1.400000 1.000000 0.335457 0.243642 41.387865 4.240439 57.124142 215.228245 3.647046 236.904668 5.000000 0.000000 5 --1.300000 1.000000 0.332997 0.241009 41.443562 4.371919 57.671402 215.273786 3.292128 232.785466 5.000000 0.000000 5 --1.200000 1.000000 0.330665 0.238534 40.812640 3.650784 56.246234 214.904536 3.893906 244.015660 5.000000 0.000000 5 --1.100000 1.000000 0.329331 0.236302 40.565430 3.404037 56.668872 215.151626 4.975081 244.228979 5.000000 0.000000 5 --1.000000 1.000000 0.326340 0.233799 40.984374 3.867443 58.055435 214.392230 2.357469 220.968495 5.000000 0.000000 5 --0.900000 1.000000 0.324751 0.230838 40.863863 4.143883 64.125643 215.614137 5.189590 242.780171 5.000000 0.000000 5 --0.800000 1.000000 0.321135 0.228471 40.470152 3.513784 57.612116 214.727859 3.845100 242.821632 5.000000 0.000000 5 --0.700000 1.000000 0.318744 0.225573 41.309409 4.026191 57.778096 214.920451 4.535966 242.414953 5.000000 0.000000 5 --0.600000 1.000000 0.316129 0.222700 41.204626 3.124997 56.968813 215.387771 4.057238 237.436606 5.000000 0.000000 5 --0.500000 1.000000 0.314128 0.220380 40.765115 3.394491 56.267980 215.377921 4.069656 240.466822 5.000000 0.000000 5 --0.400000 1.000000 0.310958 0.218014 41.093157 4.003835 59.711327 215.239180 3.327907 234.288949 5.000000 0.000000 5 --0.300000 1.000000 0.304918 0.214796 41.797207 4.146920 57.898771 216.063740 3.695298 241.591743 5.000000 0.000000 5 --0.200000 1.000000 0.303232 0.212273 41.030377 3.715740 56.810498 214.633968 3.459259 236.183440 5.000000 0.000000 5 --0.100000 1.000000 0.298946 0.209960 40.968387 3.286066 56.947886 214.652174 3.930641 239.869339 5.000000 0.000000 5 -0.000000 1.000000 0.294872 0.207036 40.536720 2.548956 56.696602 214.365610 3.293869 234.367863 5.000000 0.000000 5 -0.100000 1.000000 0.288568 0.204592 40.484272 3.071800 57.461835 214.472268 3.512439 239.158665 5.000000 0.000000 5 -0.200000 1.000000 0.282018 0.201547 40.681261 3.278471 55.951967 214.294295 3.840460 243.284465 5.000000 0.000000 5 -0.300000 1.000000 0.279144 0.198894 40.435529 2.499194 56.196889 214.494088 4.754185 243.060995 5.000000 0.000000 5 -0.400000 1.000000 0.272107 0.196146 40.439310 2.236700 56.900807 214.233221 2.429697 221.554971 5.000000 0.000000 5 -0.500000 1.000000 0.264304 0.193699 40.079304 2.102994 56.885928 215.212068 2.867987 222.409413 5.000000 0.000000 5 -0.600000 1.000000 0.254976 0.190952 40.938251 2.319068 57.553216 215.858396 3.257873 223.568005 5.000000 0.000000 5 -0.700000 1.000000 0.249426 0.188038 41.563554 3.790154 57.245468 214.607164 2.598470 222.620303 5.000000 0.000000 5 -0.800000 1.000000 0.236938 0.185676 40.644131 3.390736 56.250863 214.787514 3.016321 224.174840 5.000000 0.000000 5 -0.900000 1.000000 0.224528 0.182548 41.177649 3.753531 57.657192 214.638930 3.869935 242.175272 5.000000 0.000000 5 -1.000000 1.000000 0.212635 0.179447 41.573615 4.514914 56.159346 214.699737 3.876814 241.176210 5.000000 0.000000 5 -1.100000 1.000000 0.201210 0.177071 41.261829 3.264320 56.243301 214.951544 2.847856 222.583377 5.000000 0.000000 5 -1.200000 1.000000 0.183951 0.174506 41.683136 3.591689 56.992613 214.584652 3.373178 234.362666 5.000000 0.000000 5 -1.300000 1.000000 0.173395 0.171834 40.814328 3.204918 56.758830 215.230164 3.553699 238.588538 5.000000 0.000000 5 -1.400000 1.000000 0.152049 0.168623 41.412958 4.196153 57.855401 215.104553 3.855987 238.806435 5.000000 0.000000 5 -1.500000 1.000000 0.137067 0.165760 40.865453 2.472355 57.692788 215.112473 2.817110 222.469712 5.000000 0.000000 5 -1.600000 1.000000 0.119800 0.162857 41.340190 3.443653 56.853505 215.173558 2.871523 223.737602 5.000000 0.000000 5 -1.700000 1.000000 0.105374 0.160314 41.913044 4.326664 61.356272 215.168234 3.325743 234.564531 5.000000 0.000000 5 -1.800000 1.000000 0.089974 0.157458 40.750192 2.697542 57.266120 214.802052 3.061822 232.936883 5.000000 0.000000 5 -1.900000 1.000000 0.077899 0.154930 40.986799 3.782287 56.577477 214.970573 3.337138 232.486819 5.000000 0.000000 5 -2.000000 1.000000 0.064498 0.151912 40.973867 3.733968 57.266469 214.460835 4.009518 245.990164 5.000000 0.000000 5 -2.100000 1.000000 0.055153 0.149119 41.501986 4.068195 58.938014 215.028530 4.322608 242.986899 5.000000 0.000000 5 -2.200000 1.000000 0.043084 0.146548 40.912591 3.140756 56.434856 215.261084 2.631197 222.724293 5.000000 0.000000 5 -2.300000 1.000000 0.032169 0.143665 40.804191 2.644521 55.770242 215.134604 4.499185 240.916434 5.000000 0.000000 5 -2.400000 1.000000 0.025889 0.141218 41.065216 2.783687 57.783689 214.520582 3.945613 238.811603 5.000000 0.000000 5 -2.500000 1.000000 0.019264 0.138524 41.211270 2.448662 57.622551 214.922236 2.973268 230.669525 5.000000 0.000000 5 -2.600000 1.000000 0.013900 0.135256 40.354411 2.250096 55.698937 214.996483 3.189890 234.888937 5.000000 0.000000 5 -2.700000 1.000000 0.009590 0.132552 41.244662 3.881499 56.758825 214.759792 3.247172 234.516795 5.000000 0.000000 5 -2.800000 1.000000 0.006381 0.129862 41.636845 4.629420 56.879917 215.118519 4.535658 246.588967 5.000000 0.000000 5 -2.900000 1.000000 0.004505 0.127161 41.056717 3.728615 56.343533 215.634561 3.446083 235.626106 5.000000 0.000000 5 -3.000000 1.000000 0.003107 0.124625 41.763560 4.761839 62.852163 214.987054 4.100187 244.479813 5.000000 0.000000 5 -3.100000 1.000000 0.001585 0.121596 41.488940 3.655265 56.817517 215.049416 3.036645 231.524449 5.000000 0.000000 5 -3.200000 0.990000 0.000884 0.119036 41.899580 4.667199 62.415123 215.081178 3.177671 232.511648 5.000000 0.000000 5 -3.300000 0.980000 0.000665 0.116153 41.752611 3.754668 57.178144 215.574362 3.084230 229.518521 5.000000 0.000000 5 -3.400000 0.790000 0.000277 0.113482 41.601818 3.333514 55.861571 215.582128 3.219449 226.902719 5.000000 0.000000 5 -3.500000 0.700000 0.000179 0.111022 42.147840 4.133196 57.255484 215.854669 3.893844 242.048395 5.000000 0.000000 5 -3.600000 0.410000 0.000069 0.108080 40.747050 3.759419 63.745698 215.804914 2.568863 222.540313 5.000000 0.000000 5 -3.700000 0.370000 0.000060 0.105610 41.386558 3.815417 56.528228 215.889033 2.973628 224.110377 5.000000 0.000000 5 -3.800000 0.130000 0.000019 0.103046 41.389957 3.987060 57.528132 216.368785 3.604357 233.239650 5.000000 0.000000 5 -3.900000 0.110000 0.000013 0.100373 41.026006 2.726123 56.144907 216.842031 4.984859 241.533824 5.000000 0.000000 5 -4.000000 0.040000 0.000005 0.097515 41.535921 3.298320 56.226860 216.230174 3.561244 238.655176 5.000000 0.000000 5 -4.100000 0.020000 0.000002 0.095597 41.107849 2.874834 55.301615 216.417801 3.911892 236.928735 5.000000 0.000000 5 -4.200000 0.010000 0.000001 0.091987 40.473716 2.580630 55.248263 216.739394 4.297853 245.792709 5.000000 0.000000 5 -4.300000 0.000000 0.000000 0.090448 40.613263 2.726066 56.542856 217.487654 4.100344 239.897164 5.000000 0.000000 5 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index b22a94afb5..09f9d0a4bb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -494,11 +494,7 @@ if (BG==1) // First iteration finished -<<<<<<< HEAD - while ( (i < (numMaxIter-1)) && (pcRes != 0) ) -======= while ( (i < numMaxIter) && (pcRes != 0) ) ->>>>>>> 74ce2cf4be34a6c62ea74116c4b1c45d3cbf1536 { // Increase iteration counter i++; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/Makefile b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/Makefile index 5c91b2722d..b44c5bf56b 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/Makefile +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/Makefile @@ -1,5 +1,5 @@ C=gcc -CFLAGS=-W -Wall -mavx2 +CFLAGS=-W -Wall -mavx2 -DCODEGEN=1 LDFLAGS= EXEC=bnProc_gen_avx2 SRC= $(wildcard *.c) @@ -13,7 +13,7 @@ bnProc_gen_avx2: $(OBJ) %.o: %.c - @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g -std=c99 + @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -I ${OPENAIR_HOME}/common/utils -I ${OPENAIR_HOME}/common/utils/T -I ${OPENAIR_HOME}/openair2/COMMON -g -std=c99 .PHONY: clean mrproper diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c index 3207a7a308..4f0e442e18 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c @@ -1,9 +1,6 @@ - - - - +#include +#include #include -#include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" @@ -17,7 +14,7 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R%s_AVX2.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c index 87260e18fa..e480604e56 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c @@ -1,3 +1,4 @@ +#include #include #include #include "../../nrLDPCdecoder_defs.h" diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c index 00ab6abb6f..736841cb4e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c @@ -1,4 +1,5 @@ - +#include +#include #include #include #include "../../nrLDPCdecoder_defs.h" @@ -14,7 +15,7 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_R%s_AVX2.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c index aef582ad6f..f07b631b1a 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c @@ -1,7 +1,6 @@ - - +#include +#include #include -#include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_avx2 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_avx2 deleted file mode 100755 index 7133f3f4c38b305fb9af3c5475604573f4ae8c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110224 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 z 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 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/Makefile b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/Makefile index 9ca92c1dda..016d414945 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/Makefile +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/Makefile @@ -1,5 +1,5 @@ C=gcc -CFLAGS=-W -Wall -mavx2 +CFLAGS=-W -Wall -mavx2 -DCODEGEN=1 LDFLAGS= EXEC=bnProc_gen_avx512 SRC= $(wildcard *.c) @@ -13,7 +13,7 @@ bnProc_gen_avx512: $(OBJ) %.o: %.c - @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g -std=c99 + @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -I ${OPENAIR_HOME}/common/utils -I ${OPENAIR_HOME}/common/utils/T -I ${OPENAIR_HOME}/openair2/COMMON -g -std=c99 .PHONY: clean mrproper diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c index fabeda7551..24aa16349e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c @@ -1,3 +1,5 @@ +#include +#include #include #include #include "../../nrLDPCdecoder_defs.h" @@ -13,7 +15,7 @@ void nrLDPC_bnProcPc_BG1_generator_AVX512(int R) - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bn_avx512/nrLDPC_bnProcPc_BG1_R%s_AVX512.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c index e5858e6bfd..caec9e7e8f 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c @@ -1,6 +1,5 @@ - - - +#include +#include #include #include #include "../../nrLDPCdecoder_defs.h" @@ -16,7 +15,7 @@ void nrLDPC_bnProcPc_BG2_generator_AVX512(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bn_avx512/nrLDPC_bnProcPc_BG2_R%s_AVX512.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c index c19bceca22..5985beda15 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c @@ -1,4 +1,5 @@ - +#include +#include #include #include #include "../../nrLDPCdecoder_defs.h" @@ -14,7 +15,7 @@ void nrLDPC_bnProc_BG1_generator_AVX512(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bnProc_avx512/nrLDPC_bnProc_BG1_R%s_AVX512.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c index 82f410bcda..17a65b6501 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c @@ -1,3 +1,5 @@ +#include +#include #include #include #include "../../nrLDPCdecoder_defs.h" @@ -13,7 +15,7 @@ void nrLDPC_bnProc_BG2_generator_AVX512(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/bnProc_avx512/nrLDPC_bnProc_BG2_R%s_AVX512.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_avx512 deleted file mode 100755 index 86fe416a4a907302fb96ed46168e06f6ad0c6017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114464 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 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/sauvegarde.tar.gz b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/sauvegarde.tar.gz deleted file mode 100644 index 3e7d788c8d1aee4048ddeb258f963f3431f066a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4143 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 #include -#include +#include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" #include "../../nrLDPC_bnProc.h" @@ -14,7 +15,7 @@ void nrLDPC_cnProc_BG2_generator_AVX2(int R) // system("mkdir -p ldpc_gen_files/avx2"); - char fname[50]; + char fname[500]; sprintf(fname,"../ldpc_gen_files/cnProc/nrLDPC_cnProc_BG2_R%s_AVX2.h",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_avx2 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_avx2 deleted file mode 100755 index 0a632cf5fa68543062bbdc1e81b7d8038bc968e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43328 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 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c index 575f53834d..b9ab259bd2 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c @@ -1,5 +1,6 @@ #include #include +#include #include "../../nrLDPCdecoder_defs.h" void nrLDPC_cnProc_BG1_generator_AVX512(int R) @@ -11,7 +12,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(int R) // system("mkdir -p ../ldpc_gen_files"); - char fname[50]; + char fname[500]; 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();} diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 deleted file mode 100755 index 7d6d59a05875fefcdac341117272a391f762629a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43224 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 aYR6X+U9MIfibNv(ukVr?K^wr975@j}SV1cQ diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz deleted file mode 100644 index 6735c49d02261f2753142e47422ff2edd3b3a9e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3821 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 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h new file mode 100644 index 0000000000..113daa7e21 --- /dev/null +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h @@ -0,0 +1,2071 @@ +#include +#include +static inline void nrLDPC_cnProc_BG1_R23_AVX2(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { +//Process group with 3 BNs + __m256i ymm0, min, sgn,ones,maxLLR; + ones = _mm256_set1_epi8((char)1); + maxLLR = _mm256_set1_epi8((char)127); + uint32_t M; + M = (1*Z + 31)>>5; + for (int i=0;i>5; + for (int i=0;i>5; + for (int i=0;i>5; + for (int i=0;i>5; + for (int i=0;i>5; + for (int i=0;i