Merge remote-tracking branch 'origin/precoder_optimization' into integration_2025_w42 (!3623)
Optimization of PDSCH precoding operation x86/aarch64 optimizations for precoding, more complete timing reporting in nr_dlsim. Timing report in nr_dlsim now shows the total PDSCH generation time and is broken down into Layer mapping, resource mapping and precoding. The optimizations for x86 are basically reorganizing loops (for AVX512,AVX2, NEON but not SSE2) to minimize repetitive instructions when formatting of the precoder weights, and creation of inline functions for complex multiply-add. AVX512 optimization was added. requiring AVX512BW. Detection of up to 4 PRBs with common PMI for efficiency with AVX512 (was 2 in develop for AVX2). For aarch64, native coding of the precoder to avoid inefficient SIMDe translations for this operation. nr_dlsim now uses default precoding indices depending on the scenario instead of 0 which doesn't do precoding at all. See merge request description for nr_dlsim test results.
This commit is contained in:
@@ -1029,7 +1029,10 @@ int main(int argc, char **argv)
|
||||
reset_meas(&gNB->dlsch_rate_matching_stats);
|
||||
reset_meas(&gNB->dlsch_segmentation_stats);
|
||||
reset_meas(&gNB->dlsch_modulation_stats);
|
||||
reset_meas(&gNB->dlsch_pdsch_generation_stats);
|
||||
reset_meas(&gNB->dlsch_precoding_stats);
|
||||
reset_meas(&gNB->dlsch_layer_mapping_stats);
|
||||
reset_meas(&gNB->dlsch_resource_mapping_stats);
|
||||
reset_meas(&gNB->dlsch_encoding_stats);
|
||||
reset_meas(&gNB->dci_generation_stats);
|
||||
reset_meas(&gNB->tinput);
|
||||
@@ -1343,7 +1346,12 @@ int main(int argc, char **argv)
|
||||
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_precoding_stats,"DLSCH Mapping/Precoding time");
|
||||
printStatIndent2(&gNB->dlsch_pdsch_generation_stats,"DLSCH PDSCH Generation time");
|
||||
printStatIndent3(&gNB->dlsch_layer_mapping_stats,"DLSCH Layer Mapping time");
|
||||
gNB->dlsch_resource_mapping_stats.trials = gNB->dlsch_layer_mapping_stats.trials;
|
||||
printStatIndent3(&gNB->dlsch_resource_mapping_stats,"DLSCH Resource Mapping time");
|
||||
gNB->dlsch_precoding_stats.trials = gNB->dlsch_layer_mapping_stats.trials;
|
||||
printStatIndent3(&gNB->dlsch_precoding_stats,"DLSCH Precoding time");
|
||||
if (gNB->phase_comp)
|
||||
printStatIndent2(&gNB->phase_comp_stats, "Phase Compensation");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user