fix(nrLDPC_decoder_CL): Apply clang-format

This commit is contained in:
Romain Beurdouche
2025-08-08 14:48:41 +00:00
parent 37bf1deb7d
commit a2c03f26e9
@@ -26,7 +26,6 @@
* \note initial implem - translation of cuda version * \note initial implem - translation of cuda version
*/ */
#define MAX_ITERATION 2 #define MAX_ITERATION 2
#define MC 1 #define MC 1
@@ -90,30 +89,28 @@ typedef struct{
oclruntime_t runtime[MAX_OCLRUNTIME]; oclruntime_t runtime[MAX_OCLRUNTIME];
} ocl_t; } ocl_t;
ocl_t ocl; ocl_t ocl;
void set_compact_BG(int Zc, short BG)
void set_compact_BG(int Zc,short BG){ {
cl_uint rt; cl_uint rt;
int row, col; int row, col;
if (BG == 1) { if (BG == 1) {
row = 46; row = 46;
col = 68; col = 68;
} } else {
else{
row = 42; row = 42;
col = 52; col = 52;
} }
int compact_row = 30; int compact_row = 30;
int compact_col = 19; int compact_col = 19;
if(BG==2){compact_row = 10, compact_col = 23;} if (BG == 2) {
compact_row = 10, compact_col = 23;
}
int memorySize_h_compact1 = row * compact_col * sizeof(h_element); int memorySize_h_compact1 = row * compact_col * sizeof(h_element);
int memorySize_h_compact2 = compact_row * col * sizeof(h_element); int memorySize_h_compact2 = compact_row * col * sizeof(h_element);
int lift_index = 0; int lift_index = 0;
short lift_set[][9] = { short lift_set[][9] = {{2, 4, 8, 16, 32, 64, 128, 256},
{2,4,8,16,32,64,128,256},
{3, 6, 12, 24, 48, 96, 192, 384}, {3, 6, 12, 24, 48, 96, 192, 384},
{5, 10, 20, 40, 80, 160, 320}, {5, 10, 20, 40, 80, 160, 320},
{7, 14, 28, 56, 112, 224}, {7, 14, 28, 56, 112, 224},
@@ -121,8 +118,7 @@ void set_compact_BG(int Zc,short BG){
{11, 22, 44, 88, 176, 352}, {11, 22, 44, 88, 176, 352},
{13, 26, 52, 104, 208}, {13, 26, 52, 104, 208},
{15, 30, 60, 120, 240}, {15, 30, 60, 120, 240},
{0} {0}};
};
for (int i = 0; lift_set[i][0] != 0; i++) { for (int i = 0; lift_set[i][0] != 0; i++) {
for (int j = 0; lift_set[i][j] != 0; j++) { for (int j = 0; lift_set[i][j] != 0; j++) {
@@ -133,9 +129,11 @@ void set_compact_BG(int Zc,short BG){
} }
} }
printf("\nZc = %d BG = %d\n", Zc, BG); printf("\nZc = %d BG = %d\n", Zc, BG);
ocl.runtime[0].dev_h_compact1 = clCreateBuffer(ocl.runtime[0].context, CL_MEM_READ_ONLY|CL_MEM_HOST_WRITE_ONLY, memorySize_h_compact1, NULL, (cl_int *)&rt); ocl.runtime[0].dev_h_compact1 =
clCreateBuffer(ocl.runtime[0].context, CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY, memorySize_h_compact1, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_h_compact1 for platform %i \n", (int)rt, 0); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_h_compact1 for platform %i \n", (int)rt, 0);
ocl.runtime[0].dev_h_compact2 = clCreateBuffer(ocl.runtime[0].context, CL_MEM_READ_ONLY|CL_MEM_HOST_WRITE_ONLY, memorySize_h_compact2, NULL, (cl_int *)&rt); ocl.runtime[0].dev_h_compact2 =
clCreateBuffer(ocl.runtime[0].context, CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY, memorySize_h_compact2, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_h_compact2 for platform %i \n", (int)rt, 0); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_h_compact2 for platform %i \n", (int)rt, 0);
h_element *h1; h_element *h1;
h_element *h2; h_element *h2;
@@ -176,18 +174,36 @@ void set_compact_BG(int Zc,short BG){
AssertFatal(0, "Invalid lift_index value %i\n", lift_index); AssertFatal(0, "Invalid lift_index value %i\n", lift_index);
break; break;
} }
rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_h_compact1, CL_TRUE, 0,memorySize_h_compact1, h1, 0, NULL, NULL); rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0],
ocl.runtime[0].dev_h_compact1,
CL_TRUE,
0,
memorySize_h_compact1,
h1,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d moving h_compact1 memory to pltf %i dev %i\n", (int)rt, 0, 0); AssertFatal(rt == CL_SUCCESS, "Error %d moving h_compact1 memory to pltf %i dev %i\n", (int)rt, 0, 0);
rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_h_compact2, CL_TRUE, 0,memorySize_h_compact2, h2, 0, NULL, NULL); rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0],
ocl.runtime[0].dev_h_compact2,
CL_TRUE,
0,
memorySize_h_compact2,
h2,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d moving h_compact2 memory to pltf %i dev %i\n", (int)rt, 0, 0); AssertFatal(rt == CL_SUCCESS, "Error %d moving h_compact2 memory to pltf %i dev %i\n", (int)rt, 0, 0);
// return 0; // return 0;
} }
void cl_error_callback(const char* errinfo, const void* private_info, size_t cb, void* user_data) { void cl_error_callback(const char *errinfo, const void *private_info, size_t cb, void *user_data)
{
oclruntime_t *runtime = (oclruntime_t *)user_data; oclruntime_t *runtime = (oclruntime_t *)user_data;
LOG_E(HW, "OpenCL accelerator error %s\n", errinfo); LOG_E(HW, "OpenCL accelerator error %s\n", errinfo);
} }
char *clutil_getstrdev(int intdev) { char *clutil_getstrdev(int intdev)
{
static char retstring[255] = ""; static char retstring[255] = "";
char *retptr = retstring; char *retptr = retstring;
retptr += sprintf(retptr, "0x%08x: ", (uint32_t)intdev); retptr += sprintf(retptr, "0x%08x: ", (uint32_t)intdev);
@@ -200,8 +216,8 @@ char *clutil_getstrdev(int intdev) {
return retstring; return retstring;
} }
void get_CompilErr(cl_program program, int pltf) { void get_CompilErr(cl_program program, int pltf)
{
// Determine the size of the log // Determine the size of the log
size_t log_size; size_t log_size;
for (int i = 0; i < ocl.runtime[pltf].num_devices; i++) { for (int i = 0; i < ocl.runtime[pltf].num_devices; i++) {
@@ -214,10 +230,10 @@ void get_CompilErr(cl_program program, int pltf) {
printf("%s\n", log); printf("%s\n", log);
free(log); free(log);
} }
} }
size_t load_source(char **source_str, char *filename) { size_t load_source(char **source_str, char *filename)
{
FILE *fp; FILE *fp;
struct stat st; struct stat st;
size_t source_size; size_t source_size;
@@ -240,10 +256,9 @@ size_t load_source(char **source_str, char *filename) {
return source_size; return source_size;
} }
/* from here: entry points in decoder shared lib */ /* from here: entry points in decoder shared lib */
int ldpc_autoinit(void) { // called by the library loader int ldpc_autoinit(void)
{ // called by the library loader
cl_platform_id platforms[10]; cl_platform_id platforms[10];
cl_uint num_platforms_found; cl_uint num_platforms_found;
int context_ok = 0; int context_ok = 0;
@@ -258,7 +273,11 @@ int ldpc_autoinit(void) { // called by the library loader
rt = clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, sizeof(stringval), stringval, NULL); rt = clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, sizeof(stringval), stringval, NULL);
AssertFatal(rt == CL_SUCCESS, "clGetPlatformInfo VERSION error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetPlatformInfo VERSION error %d\n", (int)rt);
LOG_I(HW, "Platform %i, OpenCL version %s\n", i, stringval); LOG_I(HW, "Platform %i, OpenCL version %s\n", i, stringval);
rt = clGetDeviceIDs(platforms[i],CL_DEVICE_TYPE_ALL, sizeof(ocl.runtime[i].devices)/sizeof(cl_device_id),ocl.runtime[i].devices,&(ocl.runtime[i].num_devices)); rt = clGetDeviceIDs(platforms[i],
CL_DEVICE_TYPE_ALL,
sizeof(ocl.runtime[i].devices) / sizeof(cl_device_id),
ocl.runtime[i].devices,
&(ocl.runtime[i].num_devices));
AssertFatal(rt == CL_SUCCESS, "clGetDeviceIDs error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetDeviceIDs error %d\n", (int)rt);
int devok = 0; int devok = 0;
for (int j = 0; j < ocl.runtime[i].num_devices; j++) { for (int j = 0; j < ocl.runtime[i].num_devices; j++) {
@@ -270,38 +289,63 @@ int ldpc_autoinit(void) { // called by the library loader
rt = clGetDeviceInfo(ocl.runtime[i].devices[j], CL_DEVICE_TYPE, sizeof(cl_device_type), &devtype, NULL); rt = clGetDeviceInfo(ocl.runtime[i].devices[j], CL_DEVICE_TYPE, sizeof(cl_device_type), &devtype, NULL);
AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo DEVICE_TYPE error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo DEVICE_TYPE error %d\n", (int)rt);
LOG_I(HW, "Device %i, type %d = %s\n", j, (int)devtype, clutil_getstrdev(devtype)); LOG_I(HW, "Device %i, type %d = %s\n", j, (int)devtype, clutil_getstrdev(devtype));
rt = clGetDeviceInfo(ocl.runtime[i].devices[j],CL_DEVICE_MAX_COMPUTE_UNITS,sizeof(ocl.runtime[i].ocldev[j].max_CU),&(ocl.runtime[i].ocldev[j].max_CU),NULL); rt = clGetDeviceInfo(ocl.runtime[i].devices[j],
CL_DEVICE_MAX_COMPUTE_UNITS,
sizeof(ocl.runtime[i].ocldev[j].max_CU),
&(ocl.runtime[i].ocldev[j].max_CU),
NULL);
AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_COMPUTE_UNITS error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_COMPUTE_UNITS error %d\n", (int)rt);
LOG_I(HW, "Device %i, number of Compute Units: %d\n", j, ocl.runtime[i].ocldev[j].max_CU); LOG_I(HW, "Device %i, number of Compute Units: %d\n", j, ocl.runtime[i].ocldev[j].max_CU);
rt = clGetDeviceInfo(ocl.runtime[i].devices[j],CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS,sizeof(ocl.runtime[i].ocldev[j].max_WID),&(ocl.runtime[i].ocldev[j].max_WID),NULL); rt = clGetDeviceInfo(ocl.runtime[i].devices[j],
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS,
sizeof(ocl.runtime[i].ocldev[j].max_WID),
&(ocl.runtime[i].ocldev[j].max_WID),
NULL);
AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_WORK_ITEM_DIMENSIONS error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_WORK_ITEM_DIMENSIONS error %d\n", (int)rt);
LOG_I(HW, "Device %i, max Work Items dimension: %d\n", j, ocl.runtime[i].ocldev[j].max_WID); LOG_I(HW, "Device %i, max Work Items dimension: %d\n", j, ocl.runtime[i].ocldev[j].max_WID);
ocl.runtime[i].ocldev[j].max_WIS = (size_t *)malloc(ocl.runtime[i].ocldev[j].max_WID * sizeof(size_t)); ocl.runtime[i].ocldev[j].max_WIS = (size_t *)malloc(ocl.runtime[i].ocldev[j].max_WID * sizeof(size_t));
rt = clGetDeviceInfo(ocl.runtime[i].devices[j],CL_DEVICE_MAX_WORK_ITEM_SIZES,sizeof(ocl.runtime[i].ocldev[j].max_WID)*sizeof(size_t),ocl.runtime[i].ocldev[j].max_WIS,NULL); rt = clGetDeviceInfo(ocl.runtime[i].devices[j],
CL_DEVICE_MAX_WORK_ITEM_SIZES,
sizeof(ocl.runtime[i].ocldev[j].max_WID) * sizeof(size_t),
ocl.runtime[i].ocldev[j].max_WIS,
NULL);
AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_WORK_ITEM_SIZES error %d\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "clGetDeviceInfo MAX_WORK_ITEM_SIZES error %d\n", (int)rt);
for (int k = 0; k < ocl.runtime[i].ocldev[j].max_WID; k++) for (int k = 0; k < ocl.runtime[i].ocldev[j].max_WID; k++)
LOG_I(HW, "Device %i, max Work Items size for dimension: %d %u\n", j, k, (uint32_t)ocl.runtime[i].ocldev[j].max_WIS[k]); LOG_I(HW, "Device %i, max Work Items size for dimension: %d %u\n", j, k, (uint32_t)ocl.runtime[i].ocldev[j].max_WIS[k]);
devok++; devok++;
} }
if (devok > 0) { if (devok > 0) {
ocl.runtime[i].context = clCreateContext(NULL, ocl.runtime[i].num_devices, ocl.runtime[i].devices, cl_error_callback, &(ocl.runtime[i]), (cl_int *)&rt); ocl.runtime[i].context = clCreateContext(NULL,
ocl.runtime[i].num_devices,
ocl.runtime[i].devices,
cl_error_callback,
&(ocl.runtime[i]),
(cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating context for platform %i\n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating context for platform %i\n", (int)rt, i);
for (int dev = 0; dev < ocl.runtime[i].num_devices; dev++) { for (int dev = 0; dev < ocl.runtime[i].num_devices; dev++) {
ocl.runtime[i].queue[dev] = clCreateCommandQueueWithProperties(ocl.runtime[i].context,ocl.runtime[i].devices[dev] , 0, (cl_int *)&rt); ocl.runtime[i].queue[dev] =
clCreateCommandQueueWithProperties(ocl.runtime[i].context, ocl.runtime[i].devices[dev], 0, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating command queue for platform %i device %i\n", (int)rt, i, dev); AssertFatal(rt == CL_SUCCESS, "Error %d creating command queue for platform %i device %i\n", (int)rt, i, dev);
} }
ocl.runtime[i].dev_const_llr = clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_ONLY|CL_MEM_HOST_WRITE_ONLY, 68*384, NULL, (cl_int *)&rt); ocl.runtime[i].dev_const_llr =
clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY, 68 * 384, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_const_llr for platform %i \n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_const_llr for platform %i \n", (int)rt, i);
ocl.runtime[i].dev_llr = clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_WRITE|CL_MEM_HOST_WRITE_ONLY, 68*384, NULL, (cl_int *)&rt); ocl.runtime[i].dev_llr =
clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_WRITE | CL_MEM_HOST_WRITE_ONLY, 68 * 384, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_llr for platform %i \n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_llr for platform %i \n", (int)rt, i);
ocl.runtime[i].dev_dt = clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_WRITE|CL_MEM_HOST_NO_ACCESS, 46*68*384, NULL, (cl_int *)&rt); ocl.runtime[i].dev_dt =
clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS, 46 * 68 * 384, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_dt for platform %i \n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_dt for platform %i \n", (int)rt, i);
ocl.runtime[i].dev_tmp = clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_ONLY|CL_MEM_HOST_WRITE_ONLY, 68*384, NULL, (cl_int *)&rt); ocl.runtime[i].dev_tmp =
clCreateBuffer(ocl.runtime[i].context, CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY, 68 * 384, NULL, (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_tmp for platform %i \n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating buffer dev_tmp for platform %i \n", (int)rt, i);
char *source_str; char *source_str;
size_t source_size = load_source(&source_str, "nrLDPC_decoder_kernels_CL.clc"); size_t source_size = load_source(&source_str, "nrLDPC_decoder_kernels_CL.clc");
cl_program program = clCreateProgramWithSource(ocl.runtime[i].context, 1, cl_program program = clCreateProgramWithSource(ocl.runtime[i].context,
(const char **)&source_str, (const size_t *)&source_size, (cl_int *)&rt); 1,
(const char **)&source_str,
(const size_t *)&source_size,
(cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating program for platform %i \n", (int)rt, i); AssertFatal(rt == CL_SUCCESS, "Error %d creating program for platform %i \n", (int)rt, i);
rt = clBuildProgram(program, ocl.runtime[i].num_devices, ocl.runtime[i].devices, NULL /* compile options */, NULL, NULL); rt = clBuildProgram(program, ocl.runtime[i].num_devices, ocl.runtime[i].devices, NULL /* compile options */, NULL, NULL);
if (rt == CL_BUILD_PROGRAM_FAILURE) { if (rt == CL_BUILD_PROGRAM_FAILURE) {
@@ -311,11 +355,21 @@ int ldpc_autoinit(void) { // called by the library loader
for (int dev = 0; dev < ocl.runtime[i].num_devices; dev++) { for (int dev = 0; dev < ocl.runtime[i].num_devices; dev++) {
ocl.runtime[i].kernels[dev].cnp_kernel_1st = clCreateKernel(program, "ldpc_cnp_kernel_1st_iter", (cl_int *)&rt); ocl.runtime[i].kernels[dev].cnp_kernel_1st = clCreateKernel(program, "ldpc_cnp_kernel_1st_iter", (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n" , (int)rt,"ldpc_cnp_kernel_1st_iter", i,dev); AssertFatal(rt == CL_SUCCESS,
"Error %d creating kernel %s platform %i, dev %i\n",
(int)rt,
"ldpc_cnp_kernel_1st_iter",
i,
dev);
ocl.runtime[i].kernels[dev].cnp_kernel = clCreateKernel(program, "ldpc_cnp_kernel", (cl_int *)&rt); ocl.runtime[i].kernels[dev].cnp_kernel = clCreateKernel(program, "ldpc_cnp_kernel", (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n", (int)rt, "ldpc_cnp_kernel", i, dev); AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n", (int)rt, "ldpc_cnp_kernel", i, dev);
ocl.runtime[i].kernels[dev].vnp_kernel_normal = clCreateKernel(program, "ldpc_vnp_kernel_normal", (cl_int *)&rt); ocl.runtime[i].kernels[dev].vnp_kernel_normal = clCreateKernel(program, "ldpc_vnp_kernel_normal", (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n" , (int)rt,"ldpc_vnp_kernel_normal", i,dev); AssertFatal(rt == CL_SUCCESS,
"Error %d creating kernel %s platform %i, dev %i\n",
(int)rt,
"ldpc_vnp_kernel_normal",
i,
dev);
ocl.runtime[i].kernels[dev].pack_decoded_bit = clCreateKernel(program, "pack_decoded_bit", (cl_int *)&rt); ocl.runtime[i].kernels[dev].pack_decoded_bit = clCreateKernel(program, "pack_decoded_bit", (cl_int *)&rt);
AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n", (int)rt, "pack_decoded_bit", i, dev); AssertFatal(rt == CL_SUCCESS, "Error %d creating kernel %s platform %i, dev %i\n", (int)rt, "pack_decoded_bit", i, dev);
} }
@@ -353,8 +407,7 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
if (BG == 1) { if (BG == 1) {
row = 46; row = 46;
col = 68; col = 68;
} } else {
else{
row = 42; row = 42;
col = 52; col = 52;
} }
@@ -370,8 +423,7 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
int rt = int rt =
clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_const_llr, CL_TRUE, 0, memorySize_llr, p_llr, 0, NULL, NULL); clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_const_llr, CL_TRUE, 0, memorySize_llr, p_llr, 0, NULL, NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to read only memory in pltf %i dev %i\n", (int)rt, 0, 0); AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to read only memory in pltf %i dev %i\n", (int)rt, 0, 0);
rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_llr, CL_TRUE, 0, rt = clEnqueueWriteBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_llr, CL_TRUE, 0, memorySize_llr, p_llr, 0, NULL, NULL);
memorySize_llr, p_llr, 0, NULL, NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to read-write memory in pltf %i dev %i\n", (int)rt, 0, 0); AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to read-write memory in pltf %i dev %i\n", (int)rt, 0, 0);
// Define CUDA kernel dimension // Define CUDA kernel dimension
// int blockSizeX = Zc; // int blockSizeX = Zc;
@@ -400,8 +452,15 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 4, sizeof(int), (void *)&(row)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 4, sizeof(int), (void *)&(row));
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 5, sizeof(int), (void *)&(col)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 5, sizeof(int), (void *)&(col));
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 6, sizeof(int), (void *)&(Zc)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel_1st, 6, sizeof(int), (void *)&(Zc));
rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0], ocl.runtime[0].kernels[0].cnp_kernel_1st, 2, NULL, rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0],
global_item_sizek0, local_item_sizek, 0, NULL, NULL); ocl.runtime[0].kernels[0].cnp_kernel_1st,
2,
NULL,
global_item_sizek0,
local_item_sizek,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d enqueing cnp_kernel_1st \n", (int)rt); AssertFatal(rt == CL_SUCCESS, "Error %d enqueing cnp_kernel_1st \n", (int)rt);
} else { } else {
// ldpc_cnp_kernel // ldpc_cnp_kernel
@@ -414,8 +473,15 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 4, sizeof(int), (void *)&(row)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 4, sizeof(int), (void *)&(row));
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 5, sizeof(int), (void *)&(col)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 5, sizeof(int), (void *)&(col));
CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 6, sizeof(int), (void *)&(Zc)); CLSETKERNELARG(ocl.runtime[0].kernels[0].cnp_kernel, 6, sizeof(int), (void *)&(Zc));
rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0], ocl.runtime[0].kernels[0].cnp_kernel, 2, NULL, rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0],
global_item_sizek0, local_item_sizek, 0, NULL, NULL); ocl.runtime[0].kernels[0].cnp_kernel,
2,
NULL,
global_item_sizek0,
local_item_sizek,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d enqueing cnp_kernel\n", (int)rt); AssertFatal(rt == CL_SUCCESS, "Error %d enqueing cnp_kernel\n", (int)rt);
} }
// second kernel // second kernel
@@ -431,8 +497,15 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 5, sizeof(int), (void *)&(row)); CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 5, sizeof(int), (void *)&(row));
CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 6, sizeof(int), (void *)&(col)); CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 6, sizeof(int), (void *)&(col));
CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 7, sizeof(int), (void *)&(Zc)); CLSETKERNELARG(ocl.runtime[0].kernels[0].vnp_kernel_normal, 7, sizeof(int), (void *)&(Zc));
rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0], ocl.runtime[0].kernels[0].vnp_kernel_normal, 2, NULL, rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0],
global_item_sizek1, local_item_sizek, 0, NULL, NULL); ocl.runtime[0].kernels[0].vnp_kernel_normal,
2,
NULL,
global_item_sizek1,
local_item_sizek,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d enqueing vnp_kernel_normal \n", (int)rt); AssertFatal(rt == CL_SUCCESS, "Error %d enqueing vnp_kernel_normal \n", (int)rt);
} }
@@ -447,16 +520,29 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params *p_decParams,
// Execute the OpenCL kernel on the list // Execute the OpenCL kernel on the list
size_t global_item_size[2] = {block_length, MC}; // Process the entire lists size_t global_item_size[2] = {block_length, MC}; // Process the entire lists
size_t local_item_size[2] = {128, 1}; // Divide work items into groups of 128 size_t local_item_size[2] = {128, 1}; // Divide work items into groups of 128
rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0], ocl.runtime[0].kernels[0].pack_decoded_bit, 2, NULL, rt = clEnqueueNDRangeKernel(ocl.runtime[0].queue[0],
global_item_size, local_item_size, 0, NULL, NULL); ocl.runtime[0].kernels[0].pack_decoded_bit,
2,
NULL,
global_item_size,
local_item_size,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d enqueing pack_decoded_bit \n", (int)rt); AssertFatal(rt == CL_SUCCESS, "Error %d enqueing pack_decoded_bit \n", (int)rt);
// cudaCheck( cudaMemcpyFromSymbol((void*)hard_decision, (const void*)dev_tmp, (block_length/8)*sizeof(unsigned char)) ); // cudaCheck( cudaMemcpyFromSymbol((void*)hard_decision, (const void*)dev_tmp, (block_length/8)*sizeof(unsigned char)) );
// cudaDeviceSynchronize(); // cudaDeviceSynchronize();
rt = clEnqueueReadBuffer(ocl.runtime[0].queue[0], ocl.runtime[0].dev_tmp, CL_TRUE, 0, rt = clEnqueueReadBuffer(ocl.runtime[0].queue[0],
(block_length/8)*sizeof(unsigned char) , p_llr, 0, NULL, NULL); ocl.runtime[0].dev_tmp,
CL_TRUE,
0,
(block_length / 8) * sizeof(unsigned char),
p_llr,
0,
NULL,
NULL);
AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to pltf %i dev %i\n", (int)rt, 0, 0); AssertFatal(rt == CL_SUCCESS, "Error %d moving p_llr data to pltf %i dev %i\n", (int)rt, 0, 0);
return MAX_ITERATION; return MAX_ITERATION;
} }
#endif // NRLDPC_KERNEL_SOURCE #endif // NRLDPC_KERNEL_SOURCE