cuPHY
0.1
CUDA PHY Layer Acceration Library
|
This section describes the channel equalization functions of the cuPHY application programming interface. More...
Data Structures | |
struct | cuphyPuschRxChEqLaunchCfg_t |
Typedefs | |
typedef struct cuphyPuschRxChEq * | cuphyPuschRxChEqHndl_t |
Functions | |
cuphyStatus_t | cuphyCreatePuschRxChEq (cuphyContext_t ctx, cuphyPuschRxChEqHndl_t *pPuschRxChEqHndl, uint8_t enableCpuToGpuDescrAsyncCpy, void **ppStatDescrCpu, void **ppStatDescrGpu, cudaStream_t strm) |
Allocate and initialize a cuPHY PuschRx channel equalization object. More... | |
cuphyStatus_t | cuphyDemodulateSymbol (cuphyContext_t context, cuphyTensorDescriptor_t tLLR, void *pLLR, cuphyTensorDescriptor_t tSym, const void *pSym, int log2_QAM, float noiseVariance, cudaStream_t strm) |
Perform symbol demodulation. More... | |
cuphyStatus_t | cuphyDestroyPuschRxChEq (cuphyPuschRxChEqHndl_t puschRxChEqHndl) |
Destroys a cuPHY PUSCH channel equalization object. More... | |
cuphyStatus_t | cuphyModulateSymbol (cuphyTensorDescriptor_t tSym, void *pSym, cuphyTensorDescriptor_t tBits, const void *pBits, int log2_QAM, cudaStream_t strm) |
Perform symbol modulation. More... | |
cuphyStatus_t | cuphyPuschRxChEqGetDescrInfo (size_t *pStatDescrSizeBytes, size_t *pStatDescrAlignBytes, size_t *pCoefCompDynDescrSizeBytes, size_t *pCoefCompDynDescrAlignBytes, size_t *pSoftDemapDynDescrSizeBytes, size_t *pSoftDemapDynDescrAlignBytes) |
Helper to compute cuPHY channel equalization descriptor buffer sizes and alignments. More... | |
cuphyStatus_t | cuphySetupPuschRxChEqCoefCompute (cuphyPuschRxChEqHndl_t puschRxChEqHndl, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsCpu, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsGpu, uint16_t nUeGrps, uint16_t nMaxPrb, uint8_t enableCfoCorrection, uint8_t enablePuschTdi, uint8_t enableCpuToGpuDescrAsyncCpy, void **pDynDescrsCpu, void **pDynDescrsGpu, cuphyPuschRxChEqLaunchCfgs_t *pLaunchCfgs, cudaStream_t strm) |
Setup cuPHY channel equalization coefficient compute for slot processing. More... | |
cuphyStatus_t | cuphySetupPuschRxChEqSoftDemap (cuphyPuschRxChEqHndl_t puschRxChEqHndl, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsCpu, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsGpu, uint16_t nUeGrps, uint16_t nMaxPrb, uint8_t enableCfoCorrection, uint8_t enablePuschTdi, uint8_t enableCpuToGpuDescrAsyncCpy, void *pDynDescrsCpu, void *pDynDescrsGpu, cuphyPuschRxChEqLaunchCfgs_t *pLaunchCfgs, cudaStream_t strm) |
Setup cuPHY channel equalization soft demap for slot processing. More... | |
typedef struct cuphyPuschRxChEq* cuphyPuschRxChEqHndl_t |
cuPHY PUSCH Receiver channel equalization handle
cuphyStatus_t cuphyCreatePuschRxChEq | ( | cuphyContext_t | ctx, |
cuphyPuschRxChEqHndl_t * | pPuschRxChEqHndl, | ||
uint8_t | enableCpuToGpuDescrAsyncCpy, | ||
void ** | ppStatDescrCpu, | ||
void ** | ppStatDescrGpu, | ||
cudaStream_t | strm | ||
) |
Allocates a cuPHY channel equalization object and returns a handle in the address provided by the caller.
Returns CUPHY_STATUS_INVALID_ARGUMENT if pPuschRxChEqHndl
and/or ppStatDescrCpu
and/or ppStatDescrGpu
and/or ctx
is NULL.
Returns CUPHY_STATUS_ALLOC_FAILED if a PuschRxChEq object cannot be allocated
Returns CUPHY_STATUS_SUCCESS if allocation and initialization were successful
ctx | - cuPHY context |
pPuschRxChEqHndl | - Address to return the new PuschRxChEq instance |
enableCpuToGpuDescrAsyncCpy | - flag if non-zero enables async copy of CPU descriptor into GPU |
ppStatDescrCpu | - Pointer to array of static descriptors in CPU memory |
ppStatDescrGpu | - Pointer to array of static descriptors in GPU memory |
strm | - CUDA stream for descriptor copy operation |
cuphyStatus_t cuphyDemodulateSymbol | ( | cuphyContext_t | context, |
cuphyTensorDescriptor_t | tLLR, | ||
void * | pLLR, | ||
cuphyTensorDescriptor_t | tSym, | ||
const void * | pSym, | ||
int | log2_QAM, | ||
float | noiseVariance, | ||
cudaStream_t | strm | ||
) |
Perform symbol demodulation, generating log-likelihood values (LLRs) for each bit
Returns CUPHY_STATUS_SUCCESS if demodulation is launched successfully
Returns CUPHY_STATUS_INVALID_ARGUMENT if context
, tSym
, pSym
, tLLR
, or pLLR
are NULL or if log2_QAM
is not between 1 and 8 (inclusive) or if noiseVariance
is negative
context | - cuPHY context |
tLLR | - tensor descriptor for output log-likelihood values |
pLLR | - address of output log-likelihood values |
tSym | - tensor descriptor for symbol values |
pSym | - address of symbol tensor data |
log2_QAM | - log2(QAM), describing the quadrature amplitude that the symbols were modulated with |
noiseVariance | - QAM noise variance |
strm | - CUDA stream for kernel launch |
cuphyStatus_t cuphyDestroyPuschRxChEq | ( | cuphyPuschRxChEqHndl_t | puschRxChEqHndl | ) |
Destroys a cuPHY PUSCH channel equalization object that was previously created by cuphyCreatePuschRxChEq. The handle provided to this function should not be used for any operations after this function returns.
Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl
is NULL.
Returns CUPHY_STATUS_SUCCESS if destruction was successful.
puschRxChEqHndl | - handle to previously allocated PuschRxChEq instance |
cuphyStatus_t cuphyModulateSymbol | ( | cuphyTensorDescriptor_t | tSym, |
void * | pSym, | ||
cuphyTensorDescriptor_t | tBits, | ||
const void * | pBits, | ||
int | log2_QAM, | ||
cudaStream_t | strm | ||
) |
Perform symbol modulation, generating symbol values for an input sequence of bits
Returns CUPHY_STATUS_SUCCESS if modulation is launched successfully
Returns CUPHY_STATUS_INVALID_ARGUMENT if tSym
, pSym
, tBits
, or pBits
are NULL, or if log2_QAM
does not represent a supported modulation value (1, 2, 4, 6, or 8) Returns CUPHY_STATUS_UNSUPPORTED_TYPE is tSym
is not of type CUPHY_C_32F or CUPHY_C_16F, or if tBits
is not of type CUPHY_BIT Returns CUPHY_STATUS_SIZE_MISMATCH if tBits
is not a multiple of log2_QAM
, or if the first dimension of tSym
is not equal to first dimension of tBits
divided by log2_QAM
tSym | - tensor descriptor for complex symbol values |
pSym | - address of output symbol values |
tBits | - tensor descriptor for input bit |
pBits | - address of input bit values |
log2_QAM | - log2(QAM), describing the quadrature amplitude that the symbols were modulated with. This is the number of bits represented by each symbol. Value values are 1 (BPSK), 2 (QPSK), 4 (QAM16), 6 (QAM64), and 8 (QAM256) |
strm | - CUDA stream for kernel launch |
cuphyStatus_t cuphyPuschRxChEqGetDescrInfo | ( | size_t * | pStatDescrSizeBytes, |
size_t * | pStatDescrAlignBytes, | ||
size_t * | pCoefCompDynDescrSizeBytes, | ||
size_t * | pCoefCompDynDescrAlignBytes, | ||
size_t * | pSoftDemapDynDescrSizeBytes, | ||
size_t * | pSoftDemapDynDescrAlignBytes | ||
) |
Computes cuPHY PUSCH channel equalization descriptor buffer sizes and alignments. To be used by the caller to allocate these buffers (in CPU and GPU memories) and provide them to other PuschRxChEq APIs
Returns CUPHY_STATUS_INVALID_ARGUMENT if pStatDescrSizeBytes
and/or pStatDescrAlignBytes
and/or pCoefCompDynDescrSizeBytes
and/or pCoefCompDynDescrAlignBytes
and/or pSoftDemapDynDescrSizeBytes
and/or pSoftDemapDynDescrAlignBytes
Returns CUPHY_STATUS_SUCCESS if allocation and initialization were successful.
pStatDescrSizeBytes | - Size in bytes of equalizer common static descriptor |
pStatDescrAlignBytes | - Alignment in bytes of equalizer common static descriptor |
pCoefCompDynDescrSizeBytes | - Size in bytes of coefficient compute dynamic descriptor |
pCoefCompDynDescrAlignBytes | - Alignment in bytes of coefficient compute dynamic descriptor |
pSoftDemapDynDescrSizeBytes | - Size in bytes of soft demap dynamic descriptor |
pSoftDemapDynDescrAlignBytes | - Alignment in bytes of soft demap dynamic descriptor |
cuphyStatus_t cuphySetupPuschRxChEqCoefCompute | ( | cuphyPuschRxChEqHndl_t | puschRxChEqHndl, |
cuphyPuschRxUeGrpPrms_t * | pDrvdUeGrpPrmsCpu, | ||
cuphyPuschRxUeGrpPrms_t * | pDrvdUeGrpPrmsGpu, | ||
uint16_t | nUeGrps, | ||
uint16_t | nMaxPrb, | ||
uint8_t | enableCfoCorrection, | ||
uint8_t | enablePuschTdi, | ||
uint8_t | enableCpuToGpuDescrAsyncCpy, | ||
void ** | pDynDescrsCpu, | ||
void ** | pDynDescrsGpu, | ||
cuphyPuschRxChEqLaunchCfgs_t * | pLaunchCfgs, | ||
cudaStream_t | strm | ||
) |
Setup cuPHY PUSCH channel equalization coefficient compute in preparation towards slot execution
Returns CUPHY_STATUS_SUCCESS if setup is successful.
Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl
and/or pLaunchCfgs
and/or pDynDescrsCpu
and/or pDynDescrsGpu
is NULL.
puschRxChEqHndl | - Handle to previously created PuschRxChEq instance |
pDrvdUeGrpPrmsCpu | - Pointer to derived UE groups parameters in CPU memory |
pDrvdUeGrpPrmsGpu | - Pointer to derived UE groups parameters in GPU memory |
nUeGrps | - total number of UE groups to be processed |
nMaxPrb | - maximum number of data PRBs across all UE groups |
enableCfoCorrection | - enable application of CFO correction |
enablePuschTdi | - enable time domain interpolation on equalizer coefficients |
enableCpuToGpuDescrAsyncCpy | - Flag when set enables async copy of CPU descriptor into GPU |
pDynDescrsCpu | - Pointer to dynamic descriptor in CPU memory |
pDynDescrsGpu | - Pointer to dynamic descriptor in GPU memory |
pLaunchCfgs | - Pointer to channel estimation launch configurations |
strm | - CUDA stream for descriptor copy operation |
cuphyStatus_t cuphySetupPuschRxChEqSoftDemap | ( | cuphyPuschRxChEqHndl_t | puschRxChEqHndl, |
cuphyPuschRxUeGrpPrms_t * | pDrvdUeGrpPrmsCpu, | ||
cuphyPuschRxUeGrpPrms_t * | pDrvdUeGrpPrmsGpu, | ||
uint16_t | nUeGrps, | ||
uint16_t | nMaxPrb, | ||
uint8_t | enableCfoCorrection, | ||
uint8_t | enablePuschTdi, | ||
uint8_t | enableCpuToGpuDescrAsyncCpy, | ||
void * | pDynDescrsCpu, | ||
void * | pDynDescrsGpu, | ||
cuphyPuschRxChEqLaunchCfgs_t * | pLaunchCfgs, | ||
cudaStream_t | strm | ||
) |
Setup cuPHY PUSCH channel equalization soft demap in preparation towards slot execution
Returns CUPHY_STATUS_SUCCESS if setup is successful.
Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl
and/or pLaunchCfgs
and/or pDynDescrsCpu
and/or pDynDescrsGpu
is NULL.
puschRxChEqHndl | - Handle to previously created PuschRxChEq instance |
pDrvdUeGrpPrmsCpu | - Pointer to derived UE groups parameters in CPU memory |
pDrvdUeGrpPrmsGpu | - Pointer to derived UE groups parameters in GPU memory |
nUeGrps | - total number of UE groups to be processed |
nMaxPrb | - maximum number of data PRBs across all UE groups |
enableCfoCorrection | - enable application of CFO correction |
enablePuschTdi | - enable time domain interpolation on equalizer coefficients |
enableCpuToGpuDescrAsyncCpy | - Flag when set enables async copy of CPU descriptor into GPU |
pDynDescrsCpu | - Pointer to dynamic descriptor in CPU memory |
pDynDescrsGpu | - Pointer to dynamic descriptor in GPU memory |
pLaunchCfgs | - Pointer to channel estimation launch configurations |
strm | - CUDA stream for descriptor copy operation |