OpenCL LDPC Decoder uint4 1.0
Parallel OpenCL LDPC Decoder for LDPC Code 8000x4000_b3c6.alist
OpenCL LDPC Decoder

Introduction

The OpenCL LDPC Decoder is inteded to serve a tutorial purpose in developing OpenCL code, and expressing data and task parallelism according to the royalty-free standard defined by the Khronos Group.

Installation

Development History

The project was developed on an AMD/ATI platform, subsequently went under testing on a Phenom II X4 945 CPU and a Radeon HD 5870 GPU. The code was later ported to the NVIDIA platform, on a different machine, requiring no code changes nor updates to run on a different platform. The only additional change between both platforms was related with the compilation rules as we were using the libOpenCL.so each vendor provides in its SDK. If compilation is generalized to link the /usr/lib64/libOpenCL.so then cross-platform compilation can be achieved.

Compilation

AMD/ATI

Compiling for the AMD/ATI platform requires the AMD SDK 2.4 installed. Our installation had it on /opt/apps/amd-app/. The compilation rules included for the AMD platform are openclsdkdefs.mk, openclsdkrules.mk and Makefile. To build cd to the project root and type:

mkdir build

cd build

cmake ..

make

The executable will appear on ./build/debug/x86_64/

It may be necessary to edit the rules files to properly define the AMD SDK correct path.

NVIDIA

Compiling the AMD/ATI platform requires the NVIDIA SDK 4.0 installed. Our installation had it on /opt/cuda/sdk/ The compilation rules included for the NVIDIA platform are common_opencl.mk and Makefile_nv. To To build cd to the project root and type:

make -f Makefile_nv

The executable will appear on ./bin/linux/release/

It may be necessary to edit the rules files to properly define the CUDA SDK correct path.

Dependencies

The source code contains functions defined in the NVIDIA CUDA SDK 4.0, namely log and wrapper functions defined in the shrUtils and oclUtils. When testing with on a machine without these functions compilation will fail as the executable is linked against their respective dynamic library. In such event the folder Utils provides 64bit versions of it, compiled with g++-4.4, which can be used to link them.

 All Data Structures Files Functions Variables Defines