documentation update
This commit is contained in:
+1
-4
@@ -203,10 +203,7 @@ UE on machine 2:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Selecting an alternative ldpc implementation at run time](../openair1/PHY/CODING/DOC/LDPCImplementation.md)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
#LDPC coder/decoder implementation
|
# LDPC coder/decoder implementation
|
||||||
The LDPC coder and decoder are implemented in a shared library, dynamically loaded at run-time using the [oai shared library loader](file://../../../../common/utils/DOC/loader.md). The code loading the LDPC library is in [nrLDPC_load.c](file://../nrLDPC_load.c), in function `load_nrLDPClib`, which must be called at init time.
|
The LDPC coder and decoder are implemented in a shared library, dynamically loaded at run-time using the [oai shared library loader](file://../../../../common/utils/DOC/loader.md). The code loading the LDPC library is in [nrLDPC_load.c](file://../nrLDPC_load.c), in function `load_nrLDPClib`, which must be called at init time.
|
||||||
|
|
||||||
## Selecting the LDPC library at run time
|
## Selecting the LDPC library at run time
|
||||||
|
|
||||||
By default the function `int load_nrLDPClib(void)` looks for `libldpc.so`, this default behavior can be changed using the oai loader configuration options in the configuration file or from the command line as shown below:
|
By default the function `int load_nrLDPClib(void)` looks for `libldpc.so`, this default behavior can be changed using the oai loader configuration options in the configuration file or from the command line as shown below:
|
||||||
|
|
||||||
>loading `libldpc_optim8seg.so` instead of `libldpc.so`
|
#### Examples of ldpc shared lib selection when running nr softmodem's:
|
||||||
|
|
||||||
|
loading `libldpc_optim8seg.so` instead of `libldpc.so`:
|
||||||
|
|
||||||
```
|
```
|
||||||
./nr-softmodem -O libconfig:gnb.band78.tm1.106PRB.usrpx300.conf:dbgl5 --loader.ldpc.shlibversion _optim8seg
|
./nr-softmodem -O libconfig:gnb.band78.tm1.106PRB.usrpx300.conf:dbgl5 --loader.ldpc.shlibversion _optim8seg
|
||||||
@@ -18,9 +20,160 @@ By default the function `int load_nrLDPClib(void)` looks for `libldpc.so`, this
|
|||||||
........................
|
........................
|
||||||
```
|
```
|
||||||
|
|
||||||
Today, this mechanism is not available in the `ldpctest` phy simulator which doesn't initialize the [configuration module](file://../../../../common/config/DOC/config.md). loads `libldpc.so` and `libldpc_orig.so` to compare the performance of the two implementations.
|
loading `libldpc_cl.so` instead of `libldpc.so`:
|
||||||
|
|
||||||
###LDPC libraries
|
`make ldpc_cl`
|
||||||
Libraries implementing the LDPC algorithms must be named `libldpc<_version>.so`, they must implement two functions: `nrLDPC_decod` and `nrLDPC_encod`. The prototypes for these functions is defined in [nrLDPC_defs.h](file://nrLDPC_defs.h).
|
|
||||||
|
`cp ../../../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_kernels_CL.cl`
|
||||||
|
|
||||||
|
`./nr-softmodem -O libconfig:gnb.band78.sa.fr1.106PRB.usrpb210.conf:dbgl5 --rfsim --rfsimulator.serveraddr server --sa --log_config.gtpu_log_level info --loader.ldpc.shlibversion _cl`
|
||||||
|
|
||||||
|
``` [LOADER] library libldpc_cl.so successfully loaded
|
||||||
|
------------------------------------------------
|
||||||
|
[HW] Platform 0, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 0, OpenCL version OpenCL 2.1 LINUX
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 2 = 0x00000002: cpu
|
||||||
|
[HW] Device 0, number of Compute Units: 8
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 8192
|
||||||
|
[New Thread 0x7fffcc258700 (LWP 3945123)]
|
||||||
|
[New Thread 0x7fffc3e57700 (LWP 3945124)]
|
||||||
|
[New Thread 0x7fffcbe57700 (LWP 3945125)]
|
||||||
|
[New Thread 0x7fffcba56700 (LWP 3945126)]
|
||||||
|
[New Thread 0x7fffcb254700 (LWP 3945128)]
|
||||||
|
[New Thread 0x7fffcb655700 (LWP 3945127)]
|
||||||
|
[New Thread 0x7fffcae53700 (LWP 3945129)]
|
||||||
|
[HW] Platform 1, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 1, OpenCL version OpenCL 2.0 beignet 1.3
|
||||||
|
[New Thread 0x7fffc965a700 (LWP 3945130)]
|
||||||
|
[Thread 0x7fffc965a700 (LWP 3945130) exited]
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 4 = 0x00000004: gpu
|
||||||
|
[HW] Device 0, number of Compute Units: 20
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 512
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
`./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa -O libconfig:/usr/local/oai/conf/nrue_sim.conf:dbgl5 --nokrnmod --loader.ldpc.shlibversion _cl --log_config.hw_log_level info`
|
||||||
|
|
||||||
|
```[CONFIG] shlibversion set to _cl from command line
|
||||||
|
............................................................
|
||||||
|
[CONFIG] loader.ldpc 1 options set from command line
|
||||||
|
[LOADER] library libldpc_cl.so successfully loaded
|
||||||
|
[HW] Platform 0, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 0, OpenCL version OpenCL 2.1 LINUX
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 2 = 0x00000002: cpu
|
||||||
|
[HW] Device 0, number of Compute Units: 8
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 8192
|
||||||
|
[New Thread 0x7fffecccc700 (LWP 3945413)]
|
||||||
|
[New Thread 0x7fffec8cb700 (LWP 3945415)]
|
||||||
|
[New Thread 0x7fffec4ca700 (LWP 3945414)]
|
||||||
|
[New Thread 0x7fffdf7fd700 (LWP 3945417)]
|
||||||
|
[New Thread 0x7fffdfbfe700 (LWP 3945418)]
|
||||||
|
[New Thread 0x7fffdffff700 (LWP 3945416)]
|
||||||
|
[New Thread 0x7fffd73fc700 (LWP 3945419)]
|
||||||
|
[HW] Platform 1, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 1, OpenCL version OpenCL 2.0 beignet 1.3
|
||||||
|
[New Thread 0x7fffde105700 (LWP 3945420)]
|
||||||
|
[Thread 0x7fffde105700 (LWP 3945420) exited]
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 4 = 0x00000004: gpu
|
||||||
|
[HW] Device 0, number of Compute Units: 20
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 512
|
||||||
|
------------------------------------------------------------
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
A mechanism to select ldpc implementation is also available in the `ldpctest` phy simulator via the `-v`option, which can be used to specify the version of the ldpc shared library to be used.
|
||||||
|
|
||||||
|
#### Examples of ldpc shared lib selection when running ldpctest:
|
||||||
|
|
||||||
|
Loading libldpc_cuda.so, the cuda implementation of the ldpc decoder:
|
||||||
|
|
||||||
|
```$ ./ldpctest -v _cuda
|
||||||
|
Initializing random number generator, seed 0
|
||||||
|
block length 8448:
|
||||||
|
n_trials 1:
|
||||||
|
SNR0 -2.000000:
|
||||||
|
[CONFIG] get parameters from cmdline , debug flags: 0x00400000
|
||||||
|
[CONFIG] log_config: 2/3 parameters successfully set
|
||||||
|
[CONFIG] log_config: 53/53 parameters successfully set
|
||||||
|
[CONFIG] log_config: 53/53 parameters successfully set
|
||||||
|
[CONFIG] log_config: 16/16 parameters successfully set
|
||||||
|
[CONFIG] log_config: 16/16 parameters successfully set
|
||||||
|
log init done
|
||||||
|
[CONFIG] loader: 2/2 parameters successfully set
|
||||||
|
[CONFIG] loader.ldpc: 1/2 parameters successfully set
|
||||||
|
[LOADER] library libldpc_cuda.so successfully loaded
|
||||||
|
...................................
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
Loading libldpc_cl.so, the opencl implementation of the ldpc decoder:
|
||||||
|
|
||||||
|
`make ldpc_cl`
|
||||||
|
|
||||||
|
`cp ../../../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_kernels_CL.cl`
|
||||||
|
|
||||||
|
`./ldpctest -v _cl`
|
||||||
|
|
||||||
|
```$ ./ldpctest -v _cl
|
||||||
|
Initializing random number generator, seed 0
|
||||||
|
block length 8448:
|
||||||
|
n_trials 1:
|
||||||
|
SNR0 -2.000000:
|
||||||
|
[CONFIG] get parameters from cmdline , debug flags: 0x00400000
|
||||||
|
[CONFIG] log_config: 2/3 parameters successfully set
|
||||||
|
[CONFIG] log_config: 53/53 parameters successfully set
|
||||||
|
[CONFIG] log_config: 53/53 parameters successfully set
|
||||||
|
[CONFIG] log_config: 16/16 parameters successfully set
|
||||||
|
[CONFIG] log_config: 16/16 parameters successfully set
|
||||||
|
log init done
|
||||||
|
[CONFIG] loader: 2/2 parameters successfully set
|
||||||
|
[CONFIG] loader.ldpc: 1/2 parameters successfully set
|
||||||
|
[LOADER] library libldpc_cl.so successfully loaded
|
||||||
|
[HW] Platform 0, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 0, OpenCL version OpenCL 2.1 LINUX
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 2 = 0x00000002: cpu
|
||||||
|
[HW] Device 0, number of Compute Units: 8
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 8192
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 8192
|
||||||
|
[HW] Platform 1, OpenCL profile FULL_PROFILE
|
||||||
|
[HW] Platform 1, OpenCL version OpenCL 2.0 beignet 1.3
|
||||||
|
[HW] Device 0 is available
|
||||||
|
[HW] Device 0, type 4 = 0x00000004: gpu
|
||||||
|
[HW] Device 0, number of Compute Units: 20
|
||||||
|
[HW] Device 0, max Work Items dimension: 3
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 0 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 1 512
|
||||||
|
[HW] Device 0, max Work Items size for dimension: 2 512
|
||||||
|
................................
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### LDPC libraries
|
||||||
|
Libraries implementing the LDPC algorithms must be named `libldpc<_version>.so`, they must implement three functions: `nrLDPC_initcall` `nrLDPC_decod` and `nrLDPC_encod`. The prototypes for these functions is defined in [nrLDPC_defs.h](file://nrLDPC_defs.h).
|
||||||
|
|
||||||
|
`libldpc_cuda.so`has been tested with the `ldpctest` executable, usage from the softmodem's has to be tested.
|
||||||
|
|
||||||
|
`libldpc_cl`is under development.
|
||||||
|
|
||||||
[oai Wikis home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
[oai Wikis home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|||||||
Reference in New Issue
Block a user