Merge remote-tracking branch 'origin/resource_mapping_optim' into integration_2025_w07 (!3127)
Optimizations of PDSCH Resource Mapping in nr_dlsch.c/nr_modulation.c
These changes add SIMD optimizations for Neon/AVX2/AVX512 in the PDSCH
transmit path. The timing improvements are listed here based on the
nr_dlsim -e25 -R273 -b273 -s30 -x "layers" -y 4 -z 4 -P
benchmark with "layers" 2,3,4 and comparing "PHY proc tx":
273 PRBS, mcs25, 64QAM
peafowl (gcc11,AMD EPYC 9374F)
2-layer, 4 TX : 431 us (develop 565 us)
3-layer, 4 TX : 692 us (develop 849 us)
4-layer, 4 TX : 963 us (develop 1172 us)
stupix (gcc10, Xeon Gold 6354)
2-layer, 4 TX : 568 us (develop 652 us)
3-layer, 4 TX : 901 us (develop 1030 us)
4-layer, 4 TX : 1250 us (develop 1396 us)
matix (gcc14, Ryzen 9 PRO 7945)
2-layer, 4 TX : 317 us (develop 505 us)
3-layer, 4 TX : 538 us (develop 779 us)
4-layer, 4 TX : 767 us (develop 1233 us)
This commit is contained in:
@@ -965,10 +965,12 @@ printf("%d\n", slot);
|
||||
reset_meas(&gNB->dlsch_segmentation_stats);
|
||||
reset_meas(&gNB->dlsch_modulation_stats);
|
||||
reset_meas(&gNB->dlsch_encoding_stats);
|
||||
reset_meas(&gNB->dci_generation_stats);
|
||||
reset_meas(&gNB->tinput);
|
||||
reset_meas(&gNB->tprep);
|
||||
reset_meas(&gNB->tparity);
|
||||
reset_meas(&gNB->toutput);
|
||||
reset_meas(&gNB->phase_comp_stats);
|
||||
|
||||
uint32_t errors_scrambling[16] = {0};
|
||||
int n_errors[16] = {0};
|
||||
@@ -1264,6 +1266,7 @@ printf("%d\n", slot);
|
||||
UE->dl_harq_processes[0][slot].C,
|
||||
msgDataTx->dlsch[0][0].harq_process.pdsch_pdu.pdsch_pdu_rel15.TBSize[0] << 3);
|
||||
printDistribution(&gNB->phy_proc_tx,table_tx,"PHY proc tx");
|
||||
printStatIndent2(&gNB->dci_generation_stats, "DCI encoding time");
|
||||
printStatIndent2(&gNB->dlsch_encoding_stats,"DLSCH encoding time");
|
||||
printStatIndent3(&gNB->dlsch_segmentation_stats,"DLSCH segmentation time");
|
||||
printStatIndent3(&gNB->tinput,"DLSCH LDPC input processing time");
|
||||
@@ -1274,8 +1277,9 @@ printf("%d\n", slot);
|
||||
printStatIndent3(&gNB->dlsch_interleaving_stats, "DLSCH Interleaving time");
|
||||
printStatIndent2(&gNB->dlsch_modulation_stats,"DLSCH modulation time");
|
||||
printStatIndent2(&gNB->dlsch_scrambling_stats, "DLSCH scrambling time");
|
||||
printStatIndent2(&gNB->dlsch_resource_mapping_stats, "DLSCH Resource Mapping time");
|
||||
printStatIndent2(&gNB->dlsch_precoding_stats,"DLSCH Layer Precoding time");
|
||||
printStatIndent2(&gNB->dlsch_precoding_stats,"DLSCH Mapping/Precoding time");
|
||||
if (gNB->phase_comp)
|
||||
printStatIndent2(&gNB->phase_comp_stats, "Phase Compensation");
|
||||
|
||||
printf("\nUE function statistics (per %d us slot)\n", 1000 >> *scc->ssbSubcarrierSpacing);
|
||||
for (int i = RX_PDSCH_STATS; i <= DLSCH_PROCEDURES_STATS; i++) {
|
||||
|
||||
Reference in New Issue
Block a user