Aerial CUDA-Accelerated RAN 24-1
Aerial CUDA-Accelerated RAN 24-1 (Archive)

cuMAC API Reference

CumacCellGrpPrms

API data structure containing cell group information of the coordinated cells.

Field

Type

Description

nUe uint16_t Total number of selected UEs in a TTI of all coordinated cells. Value: 0 -> 65535
nActiveUe uint16_t Total number of active UEs of all coordinated cells. Value: 0 -> 65535
numUeSchdPerCellTTI uint8_t Number of UEs selected/scheduled per TTI per cell. Value: 0 -> 255
nCell uint16_t Total number of coordinated cells. Value: 0 -> 65535
nPrbGrp uint16_t Total number of PRGs per cell. Value: 0 -> 65535
nBsAnt uint8_t Number of BS antenna ports. Value: 0 -> 255
nUeAnt uint8_t Number of UE antenna ports. Value: 0 -> 255
W float Frequency bandwidth (Hz) of a PRG. Value: 12 * subcarrier spacing * number of PRBs per PRG
sigmaSqrd float Noise variance. Value: noise variance value in watts
precodingScheme uint8_t Precoder type. Value: 0: No precoding 1: SVD precoder
receiverScheme uint8_t Receiver/equalizer type. Value: Currently only support 1: MMSE-IRC receiver
allocType uint8_t PRG allocation type. Value: 0: non-consecutive type-0 allocation 1: consecutive type-1 allocation
betaCoeff float Coefficient for adjusting the cell-edge UEs’ performance in multi-cell scheduling Value: non-negative real number. The default value is 1.0, representing the classic proportional-fairness scheduling.
sinValThr float Singular value threshold for layer selection. Value: in (0, 1). Default value is 0.1
prioWeightStep uint16_t For priority-weight based scheduling algorithm. Step size for UE priority weight increment per TTI if UE does not get scheduled. Value: default 100
cellId uint16_t[nCell] IDs of coordinated cells. One dimensional array. Value of each element: Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. cellId[cIdx] is the ID of the cIdx-th coordinated cell
cellAssoc uint8_t[nCell*nUe] Cell-UE association indication for all the selected UEs of the coordinated cells. One dimensional array. Value of each element: Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. cellAssoc[cIdx*nUe + uIdx] == 1 means the uIdx-th selected UE is associated with cIdx-th coordinated cell, 0 otherwise.
cellAssocActUe uint8_t[nCell*nActiveUe] Cell-UE association indication for all active UEs of the coordinated cells. One dimensional array. Value of each element: Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. Denote uIdx = 0, 1, …, nActiveUe-1 as the global active UE index in the coordinated cells. cellAssocActUe[cIdx*nUe + uIdx] == 1 means the uIdx-th active UE is associated with cIdx-th coordinated cell, 0 otherwise.
prgMsk uint8_t[nCell][nPrbGrp] Per-cell bit map for the availability of each PRG for allocation Two-dimensional array. Value of each element: Denote cIdx = 0, 1, … nCell-1 as the coordinated cell index Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index prgMsk[cIdx][prgIdx] is the availability indicator for the prgIdx-th PRG in the cIdx-th coordinated cell 0 - unavailable, 1 - available
postEqSinr float[nActiveUe*nPrbGrp* nUeAnt] Array of the per-PRG per-layer post-equalizer SINRs of all active UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global active UE index in the coordinated cells. Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote layerIdx = 0, 1, …, nUeAnt-1 as the layer index. postEqSinr[uIdx*nPrbGrp* nUeAnt + prgIdx*nUeAnt + layerIdx] is the uIdx-th active UE’s post-equalizer SINR on the prgIdx-th PRG and the layerIdx-th layer.
wbSinr float[nActiveUe*nUeAnt] Array of wideband per-layer post-equalizer SINRs of all active UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global active UE index in the coordinated cells. Denote layerIdx = 0, 1, …, nUeAnt-1 as the layer index. wbSinr[uIdx*nUeAnt + layerIdx] is the uIdx-th active UE’s wideband post-equalizer SINR on the layerIdx-th layer.
FP32: estH_fr or FP16: estH_fr_half FP32: cuComplex[nCell][nUe* nPrbGrp*nBsAnt*nUeAnt] Or FP16: __nv_bfloat162[nCell][nUe* nPrbGrp*nBsAnt*nUeAnt] Per-cell array of the narrow-band SRS channel estimate coefficients for the selected UEs in the coordinated cells. Two-dimensional array: the 1st dimension is for cells, and the 2nd dimension is for UEs, PRGs, and antenna ports. Value of each element: Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote bsAntIdx = 0, 1, …, nBsAnt-1 as the BS antenna port index Denote ueAntIdx = 0, 1, …, nUeAnt as the UE antenna port index estH_fr[cIdx][uIdx* nPrbGrp*nBsAnt*nUeAnt + prgIdx* nBsAnt*nUeAnt + bsAntIdx*nUeAnt + ueAntIdx] is the complex channel coefficient between the cIdx-th cell and the uIdx-th selected UE in the cell group on the prgIdx-th PRG, the bsAntIdx-th BS antenna port and the ueAntIdx-th UE antenna port. (The above applies to the FP16 version as well)
prdMat cuComplex[nUe*nPrbGrp* nBsAnt*nBsAnt] Array of the precoder/beamforming weights for the selected UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote inPortIdx = 0, 1, …, nBsAnt-1 as the precoder input port index Denote outPortIdx = 0, 1, …, nBsAnt-1 as the precoder output port index prdMat[uIdx*nPrbGrp* nBsAnt*nBsAnt + prgIdx* nBsAnt*nBsAnt + inPortIdx *nBsAnt + outPortIdx] is the precoder/beamforming weight of the uIdx-th selected UE in the coordinated cells on the prgIdx-th PRG and between the inPortIdx-th input port and the outPortIdx-th output port.
detMat cuComplex[nUe*nPrbGrp* nUeAnt*nUeAnt] Array of the detector/beamforming weights for the selected UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote inPortIdx = 0, 1, …, nUeAnt-1 as the detector input port index. Denote outPortIdx = 0, 1, …, nUeAnt-1 as the detector output port index. detMat[uIdx*nPrbGrp*nUeAnt*nUeAnt + prgIdx*nUeAnt*nUeAnt + inPortIdx*nUeAnt + outPortIdx] is the detector weight of the uIdx-th selected UE on the prgIdx-th PRG and between the inPortIdx-th input port and the outPortIdx-th output port.
sinVal float[nUe*nPrbGrp*nUeAnt] Array of the per-UE, per-PRG, per-layer singular values obtained from SVD. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the 0-based UE index for the selected UEs in the coordinated cells. Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote layerIdx = 0, 1, …, nUeAnt-1 as the layer index. sinVal[uIdx*nPrbGrp*nUeAnt + prgIdx*nUeAnt + layerIdx] is the UE uIdx’s layerIdx-th largest singular value on PRG prgIdx For each UE and on each PRG, the singular values are stored in descending order.

cumacCellGrpUeStatus

API data structure containing the per-UE information of the coordinated cell group.

Field

Type

Description

avgRates float[nUe] Array of the long-term average data rates of the selected UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. avgRates[uIdx] is the long-term average throughput of the uIdx-th selected UE in the coordinated cells.
avgRatesActUe float[nActiveUe] Array of the long-term average data rates of all active UEs in the coordinated cells One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global active UE index in the coordinated cells. avgRatesActUe[uIdx] is the long-term average throughput of the uIdx-th active UE in the coordinated cells.
prioWeightActUe u int16_t[nActiveUe] For priority-based UE selection. Priority weights of all active UEs in the coordinated cells One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global UE index for all active UEs in the coordinated cells. prioWeightActUe[uIdx] is the uIdx-th active UE’s priority weight. 0xFFFF indicates an invalid element.
tbErrLast int8_t[nUe] Array of the selected UEs’ transport block (TB) decoding error indicators of the last transmissions One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. tbErrLast[uIdx] is the uIdx-th selected UE’s TB decoding error indicator of the last transmission. -1 - the last transmission is not a new transmission (is a re-transmission) 0 - decoded correctly 1 - decoding error ** Note that if the last transmission of a UE is not a new transmission, tbErrLast of that UE should be set to -1.
tbErrLastActUe int8_t[nActiveUe] TB decoding error indicators of all active UEs in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global UE index for all active UEs in the coordinated cells. tbErrLastActUe[uIdx] is the uIdx-th active UE’s TB decoding error indicator: -1 - the last transmission is not a new transmission (is a re-transmission) 0 - decoded correctly 1 - decoding error ** Note that if the last transmission of a UE is not a new transmission, tbErrLastActUe of that UE should be set to -1.
newDataActUe int8_t[nActiveUe] Indicators of initial transmission/retransmission for all active UEs. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nActiveUe-1 as the global UE index for all active UEs in the coordinated cells. newDataActUe[uIdx] is the indicator of initial transmission/retransmission for the uIdx-th active UE in the coordinated cells 0 – retransmission 1 - new data/initial transmission -1 indicates an invalid element
allocSolLastTx For type-0 PRG allocation: int16 _t[nCell*nPrbGrp] For type-1 PRG allocation: int16_t[2*nUe] The PRG allocation solution of the last transmission of the selected/scheduled UEs in the coordinated cells Format referring to the description for allocSol in the cumacSchdSol structure
mcsSelSolLastTx int16_t[nUe] MCS selection solution of the last transmission of the selected/scheduled UEs in the coordinated cells. Format referring to the description for mcsSelSol in the cumacSchdSol structure
layerSelSolLastTx uint8_t[nUe] Layer selection solution of the last transmission of the selected/scheduled UEs in the coordinated cells. Format referring to the description for layerSelSol in the cumacSchdSol structure

cumacSchdSol

API data structure containing the scheduling solutions.

Field

Type

Description

setSchdUePerCellTTI uint16_t[nCell* numUeSchdPerCellTTI] Set of global IDs of the selected UEs per cell per TTI. One dimensional array. Value of each element: Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. Denote i = 0, 1, …, numUeSchdPerCellTTI-1 as the i-th selected UE in a given cell. setSchdUePerCel lTTI[cIdx*numUeSchdPerCellTTI + i] is within {0, 1, …, nActiveUe-1} and represents the global active UE index of the i-th selected UE in the cIdx-th coordinated cell.
allocSol For type-0 PRG allocation: int1 6_t[nCell*nPrbGrp] For type-1 PRG allocation: int16_t[2*nUe] PRB group allocation solution for the selected UEs per TTI in the coordinated cells One dimensional array. Value of each element: For type-0 PRG allocation: Denote prgIdx = 0, 1, …, nPrbGrp-1 as the PRG index. Denote cIdx = 0, 1, …, nCell-1 as the coordinated cell index. allocSol[prgIdx*nCell + cIdx] indicates the selected UE index (0, 1, …, nUe-1) that the prgIdx-th PRG is allocated to in the cIdx-th coordinated cell. -1 indicates that a given PRG in a cell is not allocated to any UE. For type-1 PRG allocation: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. allocSol[2*uIdx] is the starting PRG index of the uIdx-th selected UE. allocSol[2*uIdx + 1] is the ending PRG index of the uIdx-th selected UE plus one. -1 indicates that a given UE is not being allocated to any PRG.
pfMetricArr float[array_size] array_size = nCell * the minimum power of 2 that is no less than nPrbGrp*n umUeSchdPerCellTTI Array to store the computed PF metrics per UE and per PRG. Only used for type-1 PRG allocation. One dimensional array. GPU memory allocated for CUDA kernel execution. Not used externally. Memory should be allocated when initializing the cuMAC API. Value of each element: floating-type value of a computed PF metric.
pfIdArr uint16_t [array_size] array_size = nCell * the minimum power of 2 that is no less than nPrbGrp*n umUeSchdPerCellTTI Array to indicate the PRG and UE indices of the sorted PF metrics. Only used for type-1 PRG allocation. One dimensional array. GPU memory allocated for CUDA kernel execution. Not used externally. Memory should be allocated when initializing the cuMAC API. Value of each element: 0 -> 65535
mcsSelSol int16_t[nUe] MCS selection solution for the selected UEs per TTI in the coordinated cells One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. mcsSelSol[uIdx] indicates the MCS level for the uIdx-th selected UE in the coordinated cells. Range of each element: 0, 1, …, 27 (Currently only support Table 5.1.3.1-2: MCS index table 2, 3GPP TS 38.214). -1 indicates an element is invalid.
layerSelSol uint8_t[nUe] Layer selection solution for the selected UEs per TTI in the coordinated cells. One dimensional array. Value of each element: Denote uIdx = 0, 1, …, nUe-1 as the selected UE index in the coordinated cells. layerSelSol[uIdx] indicates the number of layers selected for the uIdx-th selected UE in the coordinated cells. Range of each element: 0, 1, …, nUeAnt-1 The selected layers have singular values descending from the largest one.

Multi-cell proportional-fairness UE down-selection

Wrapper class and public member functions:

Copy
Copied!
            

class cumac::multiCellUeSelection public: // constructor multiCellUeSelection(); // destructor ~multiCellUeSelection(); // setup() function for per-TTI algorithm execution void setup(cumac::cumacCellGrpUeStatus\* cellGrpUeStatus, cumac::cumacSchdSol\* schdSol, cumac::cumacCellGrpPrms\* cellGrpPrms, uint8_t in_enableHarq, cudaStream_t strm); // requires external synchronization // set in_enableHarq to 1 if HARQ is enabled; 0 otherwise // run() function for per-TTI algorithm execution void run(cudaStream_t strm); // requires external synchronization // parameter/data buffer logging function for debugging purpose void debugLog(); // for debugging only, printing out dynamic descriptor parameters

Multi-cell proportional-fairness PRB scheduler

Wrapper class and public member functions:

Copy
Copied!
            

class cumac::multiCellScheduler public: // constructor multiCellScheduler(); // destructor ~multiCellScheduler(); // setup() function for per-TTI algorithm execution void setup(cumac::cumacCellGrpUeStatus\* cellGrpUeStatus, cumac::cumacSchdSol\* schdSol, cumac::cumacCellGrpPrms\* cellGrpPrms, uint8_t in_DL, uint8_t in_columnMajor, uint8_t in_halfPrecision, uint8_t in_lightWeight, cudaStream_t strm); // set in_DL to 1 if setup for DL scheduling; 0 otherwise // in_columnMajor: 0 - row-major channel access, 1 - column-major channel access // in_halfPrecision: 0 - call FP32 floating type kernel, 1 - call FP16 (bfloat162) half-precision kernel // in_lightWeight: 0 - call heavy-weight kernel, 1 - call light-weight kernel // in_enableHarq: 0 - HARQ disabled, 1 - HARQ enabled // requires external synchronization // run() function for per-TTI algorithm execution void run(cudaStream_t strm); // requires external synchronization // parameter/data buffer logging function for debugging purpose void debugLog(); // for debugging only, printing out dynamic descriptor parameters

Multi-cell layer selection

Wrapper class and public member functions:

Copy
Copied!
            

class cumac::multiCellLayerSel public: // constructor multiCellLayerSel(); // desctructor ~multiCellLayerSel(); // setup() function for per-TTI algorithm execution void setup(cumacCellGrpUeStatus\* cellGrpUeStatus, cumacSchdSol\* schdSol, cumacCellGrpPrms\* cellGrpPrms, uint8_t in_enableHarq, cudaStream_t strm); // in_enableHarq: 0 - HARQ disabled, 1 - HARQ enabled // requires external synchronization // run() function for per-TTI algorithm execution void run(cudaStream_t strm); // requires external synchronization // parameter/data buffer logging function for debugging purpose void debugLog(); // for debugging only, printing out dynamic descriptor parameters

Wrapper class and public member functions:

Copy
Copied!
            

class cumac::mcsSelectionLUT public: // constructor mcsSelectionLUT(uint16_t nActiveUe, cudaStream_t strm); // requires external synchronization // uint16_t nActiveUe is the (maximum) total number of active UEs in all coordinated cells // destructor ~mcsSelectionLUT(); // setup() function for per-TTI algorithm execution void setup(cumacCellGrpUeStatus\* cellGrpUeStatus, cumacSchdSol\* schdSol, cumacCellGrpPrms\* cellGrpPrms, uint8_t in_DL, uint8_t in_baseline, cudaStream_t strm); // in_DL: 0 - UL, 1 - DL // in_baseline: 0 - not using baseline algorithm, 1 - using baseline algorithm // requires external synchronization // run() function for per-TTI algorithm execution void run(cudaStream_t strm); // parameter/data buffer logging function for debugging purpose void debugLog(); // for debugging only, printing out dynamic descriptor parameters

Outer-loop link adaptation (OLLA) data structure:

Copy
Copied!
            

// structure containing outer-loop link adaptation algorithm parameters struct ollaParam { float delta; // offset to SINR estimation float delta_ini; // initial value for delta parameter float delta_up; // step size for increasing delta parameter float delta_down; // step size for decreasing delta parameter };

Previous Getting Started with cuMAC
Next Examples
© Copyright 2024, NVIDIA. Last updated on Jul 15, 2024.