LDPC cuda support BG1 all length

parent 02dc4ba8
...@@ -20,16 +20,6 @@ ...@@ -20,16 +20,6 @@
*/ */
// add GPU mode (-G 1) // add GPU mode (-G 1)
/*! \file PHY/CODING/TESTBENCH/ldpctest.c
* \brief Merge remote-tracking branch 'origin/develop' into NCTU_OpinConnect_LDPC
* \author NCTU OpinConnect Terng-Yin Hsu,WEI-YING,LIN
* \email tyhsu@cs.nctu.edu.tw
* \date 13-05-2020
* \version
* \note
* \warning
*/
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
......
/*! \file PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.cu
* \brief LDPC cuda support BG1 all length
* \author NCTU OpinConnect Terng-Yin Hsu,WEI-YING,LIN
* \email tyhsu@cs.nctu.edu.tw
* \date 13-05-2020
* \version
* \note
* \warning
*/
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <cuda_runtime.h> #include <cuda_runtime.h>
...@@ -143,8 +153,7 @@ __global__ void ldpc_cnp_kernel_1st_iter(char * dev_llr, char * dev_dt, int BG, ...@@ -143,8 +153,7 @@ __global__ void ldpc_cnp_kernel_1st_iter(char * dev_llr, char * dev_dt, int BG,
for(int i = 0; i < s; i++){ for(int i = 0; i < s; i++){
// v0: Best performance so far. 0.75f is the value of alpha. // v0: Best performance so far. 0.75f is the value of alpha.
sq = 1 - 2 * ((Q_sign >> i) & 0x01); sq = 1 - 2 * ((Q_sign >> i) & 0x01);
// R_temp = 0.75f * sign * sq * (i != idx_min ? rmin1 : rmin2); R_temp = 0.8 * sign * sq * (i != idx_min ? rmin1 : rmin2);
R_temp = sign * sq * (i != idx_min ? rmin1 : rmin2);
// write results to global memory // write results to global memory
h_element_t = dev_h_compact1[i*row+iBlkRow]; h_element_t = dev_h_compact1[i*row+iBlkRow];
int addr_temp = offsetR + h_element_t.y * row * Zc; int addr_temp = offsetR + h_element_t.y * row * Zc;
...@@ -214,8 +223,8 @@ __global__ void ldpc_cnp_kernel(char * dev_llr, char * dev_dt, int BG, int row, ...@@ -214,8 +223,8 @@ __global__ void ldpc_cnp_kernel(char * dev_llr, char * dev_dt, int BG, int row,
// The 2nd recursion // The 2nd recursion
for(int i = 0; i < s; i ++){ for(int i = 0; i < s; i ++){
sq = 1 - 2 * ((Q_sign >> i) & 0x01); sq = 1 - 2 * ((Q_sign >> i) & 0x01);
// R_temp = 0.75f * sign * sq * (i != idx_min ? rmin1 : rmin2); R_temp = 0.8 * sign * sq * (i != idx_min ? rmin1 : rmin2);
R_temp = sign * sq * (i != idx_min ? rmin1 : rmin2);
// write results to global memory // write results to global memory
h_element_t = dev_h_compact1[i*row+iBlkRow]; h_element_t = dev_h_compact1[i*row+iBlkRow];
...@@ -251,7 +260,7 @@ ldpc_vnp_kernel_normal(char * dev_llr, char * dev_dt, char * dev_const_llr, int ...@@ -251,7 +260,7 @@ ldpc_vnp_kernel_normal(char * dev_llr, char * dev_dt, char * dev_const_llr, int
{ {
h_element_t = dev_h_compact2[i*col+iBlkCol]; h_element_t = dev_h_compact2[i*col+iBlkCol];
shift_t = h_element_t.value; shift_t = h_element_t.value%Zc;
iBlkRow = h_element_t.x; iBlkRow = h_element_t.x;
sf = iSubCol - shift_t; sf = iSubCol - shift_t;
...@@ -472,7 +481,7 @@ start_meas(time_decoder); ...@@ -472,7 +481,7 @@ start_meas(time_decoder);
// Define CUDA kernel dimension // Define CUDA kernel dimension
int blockSizeX = (Zc + 32 - 1)/ 32 * 32; // round block size to multiples of 32 int blockSizeX = Zc;
dim3 dimGridKernel1(row, MC, 1); // dim of the thread blocks dim3 dimGridKernel1(row, MC, 1); // dim of the thread blocks
dim3 dimBlockKernel1(blockSizeX, 1, 1); dim3 dimBlockKernel1(blockSizeX, 1, 1);
...@@ -513,7 +522,7 @@ start_meas(time_decoder); ...@@ -513,7 +522,7 @@ start_meas(time_decoder);
(dev_llr, dev_dt, dev_const_llr, BG, row, col, Zc); (dev_llr, dev_dt, dev_const_llr, BG, row, col, Zc);
} }
int pack = block_length/128; int pack = (block_length/128)+1;
dim3 pack_block(pack, MC, 1); dim3 pack_block(pack, MC, 1);
pack_decoded_bit<<<pack_block,128>>>(dev_llr, dev_tmp, col, Zc); pack_decoded_bit<<<pack_block,128>>>(dev_llr, dev_tmp, col, Zc);
......
...@@ -4,6 +4,17 @@ ...@@ -4,6 +4,17 @@
#include "nrLDPC_types.h" #include "nrLDPC_types.h"
#include "nrLDPC_init_mem.h" #include "nrLDPC_init_mem.h"
/*! \file PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h
* \brief LDPC cuda support BG1 all length
* \author NCTU OpinConnect Terng-Yin Hsu,WEI-YING,LIN
* \email tyhsu@cs.nctu.edu.tw
* \date 13-05-2020
* \version
* \note
* \warning
*/
/*** /***
\brief LDPC decoder \brief LDPC decoder
\param p_decParams LDPC decoder parameters \param p_decParams LDPC decoder parameters
......
...@@ -19,6 +19,17 @@ ...@@ -19,6 +19,17 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_defs.h
* \brief LDPC cuda support BG1 all length
* \author NCTU OpinConnect Terng-Yin Hsu,WEI-YING,LIN
* \email tyhsu@cs.nctu.edu.tw
* \date 13-05-2020
* \version
* \note
* \warning
*/
/*!\file nrLDPC_defs.h /*!\file nrLDPC_defs.h
* \brief Defines all constants and buffers for the LDPC decoder * \brief Defines all constants and buffers for the LDPC decoder
* \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com> * \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment