Commit 528da705 authored by Robert Schmidt's avatar Robert Schmidt

Increase measurement coverage for better reporting

Signed-off-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
parent a53545da
...@@ -137,6 +137,7 @@ typedef struct nrLDPC_segment_encoding_parameters_s{ ...@@ -137,6 +137,7 @@ typedef struct nrLDPC_segment_encoding_parameters_s{
time_stats_t ts_interleave; time_stats_t ts_interleave;
time_stats_t ts_rate_match; time_stats_t ts_rate_match;
time_stats_t ts_ldpc_encode; time_stats_t ts_ldpc_encode;
time_stats_t ts_output;
} nrLDPC_segment_encoding_parameters_t; } nrLDPC_segment_encoding_parameters_t;
/** /**
...@@ -211,9 +212,11 @@ typedef struct nrLDPC_slot_encoding_parameters_s{ ...@@ -211,9 +212,11 @@ typedef struct nrLDPC_slot_encoding_parameters_s{
int nb_TBs; int nb_TBs;
tpool_t *threadPool; tpool_t *threadPool;
time_stats_t *tinput; time_stats_t *tinput;
time_stats_t *tinput_memcpy;
time_stats_t *tprep; time_stats_t *tprep;
time_stats_t *tparity; time_stats_t *tparity;
time_stats_t *toutput; time_stats_t *toutput;
time_stats_t *tconcat;
nrLDPC_TB_encoding_parameters_t *TBs; nrLDPC_TB_encoding_parameters_t *TBs;
} nrLDPC_slot_encoding_parameters_t; } nrLDPC_slot_encoding_parameters_t;
......
...@@ -91,6 +91,7 @@ typedef struct nrLDPC_decoding_parameters_s { ...@@ -91,6 +91,7 @@ typedef struct nrLDPC_decoding_parameters_s {
time_stats_t *p_ts_deinterleave; time_stats_t *p_ts_deinterleave;
time_stats_t *p_ts_rate_unmatch; time_stats_t *p_ts_rate_unmatch;
time_stats_t *p_ts_seg_prep;
time_stats_t *p_ts_ldpc_decode; time_stats_t *p_ts_ldpc_decode;
} nrLDPC_decoding_parameters_t; } nrLDPC_decoding_parameters_t;
...@@ -166,8 +167,8 @@ static void nr_process_decode_segment(void *arg) ...@@ -166,8 +167,8 @@ static void nr_process_decode_segment(void *arg)
int16_t z[68 * 384 + 16] __attribute__((aligned(16))); int16_t z[68 * 384 + 16] __attribute__((aligned(16)));
start_meas(rdata->p_ts_ldpc_decode);
start_meas(rdata->p_ts_seg_prep);
memset(z, 0, 2 * rdata->Z * sizeof(*z)); memset(z, 0, 2 * rdata->Z * sizeof(*z));
// set Filler bits // set Filler bits
memset(z + Kprime, 127, rdata->F * sizeof(*z)); memset(z + Kprime, 127, rdata->F * sizeof(*z));
...@@ -182,6 +183,7 @@ static void nr_process_decode_segment(void *arg) ...@@ -182,6 +183,7 @@ static void nr_process_decode_segment(void *arg)
for (int i = 0, j = 0; j < ((Kc * rdata->Z) >> 4) + 1; i += 2, j++) { for (int i = 0, j = 0; j < ((Kc * rdata->Z) >> 4) + 1; i += 2, j++) {
pl[j] = simde_mm_packs_epi16(pv[i], pv[i + 1]); pl[j] = simde_mm_packs_epi16(pv[i], pv[i + 1]);
} }
stop_meas(rdata->p_ts_seg_prep);
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
...@@ -189,6 +191,7 @@ static void nr_process_decode_segment(void *arg) ...@@ -189,6 +191,7 @@ static void nr_process_decode_segment(void *arg)
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// pl =====> llrProcBuf ////////////////////////////////// ////////////////////////////////// pl =====> llrProcBuf //////////////////////////////////
start_meas(rdata->p_ts_ldpc_decode);
int decodeIterations = LDPCdecoder(p_decoderParms, l, llrProcBuf, p_procTime, rdata->abort_decode); int decodeIterations = LDPCdecoder(p_decoderParms, l, llrProcBuf, p_procTime, rdata->abort_decode);
if (decodeIterations < p_decoderParms->numMaxIter) { if (decodeIterations < p_decoderParms->numMaxIter) {
......
...@@ -339,9 +339,11 @@ static int nrLDPC_launch_TB_encoding(nrLDPC_slot_encoding_parameters_t *nrLDPC_s ...@@ -339,9 +339,11 @@ static int nrLDPC_launch_TB_encoding(nrLDPC_slot_encoding_parameters_t *nrLDPC_s
encoder_implemparams_t common_segment_params = { encoder_implemparams_t common_segment_params = {
.n_segments = nrLDPC_TB_encoding_parameters->C, .n_segments = nrLDPC_TB_encoding_parameters->C,
.tinput = nrLDPC_slot_encoding_parameters->tinput, .tinput = nrLDPC_slot_encoding_parameters->tinput,
.tinput_memcpy = nrLDPC_slot_encoding_parameters->tinput_memcpy,
.tprep = nrLDPC_slot_encoding_parameters->tprep, .tprep = nrLDPC_slot_encoding_parameters->tprep,
.tparity = nrLDPC_slot_encoding_parameters->tparity, .tparity = nrLDPC_slot_encoding_parameters->tparity,
.toutput = nrLDPC_slot_encoding_parameters->toutput, .toutput = nrLDPC_slot_encoding_parameters->toutput,
.tconcat = nrLDPC_slot_encoding_parameters->tconcat,
.Kb = nrLDPC_TB_encoding_parameters->Kb, .Kb = nrLDPC_TB_encoding_parameters->Kb,
.Zc = nrLDPC_TB_encoding_parameters->Z, .Zc = nrLDPC_TB_encoding_parameters->Z,
.BG = nrLDPC_TB_encoding_parameters->BG, .BG = nrLDPC_TB_encoding_parameters->BG,
...@@ -424,14 +426,15 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin ...@@ -424,14 +426,15 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin
join_task_ans(&ans); join_task_ans(&ans);
// Write output // Write output
time_stats_t *tconcat = nrLDPC_slot_encoding_parameters->tconcat;
if (tconcat != NULL)
start_meas(tconcat);
nbTasks = 0; nbTasks = 0;
for (int dlsch_id = 0; dlsch_id < nrLDPC_slot_encoding_parameters->nb_TBs; dlsch_id++) { for (int dlsch_id = 0; dlsch_id < nrLDPC_slot_encoding_parameters->nb_TBs; dlsch_id++) {
nrLDPC_TB_encoding_parameters_t *nrLDPC_TB_encoding_parameters = &nrLDPC_slot_encoding_parameters->TBs[dlsch_id]; nrLDPC_TB_encoding_parameters_t *nrLDPC_TB_encoding_parameters = &nrLDPC_slot_encoding_parameters->TBs[dlsch_id];
uint32_t C = nrLDPC_TB_encoding_parameters->C; uint32_t C = nrLDPC_TB_encoding_parameters->C;
size_t n_seg = (C / 8 + ((C & 7) == 0 ? 0 : 1)); size_t n_seg = (C / 8 + ((C & 7) == 0 ? 0 : 1));
time_stats_t *toutput = nrLDPC_slot_encoding_parameters->toutput;
for (int j = 0; j < n_seg; j++) { for (int j = 0; j < n_seg; j++) {
unsigned int macro_segment = j * 8; unsigned int macro_segment = j * 8;
unsigned int macro_segment_end = (C > macro_segment + 8) ? macro_segment + 8 : C; unsigned int macro_segment_end = (C > macro_segment + 8) ? macro_segment + 8 : C;
...@@ -448,7 +451,6 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin ...@@ -448,7 +451,6 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin
} }
} }
if(toutput != NULL) start_meas(toutput);
uint32_t Eoffset=0; uint32_t Eoffset=0;
for (int s=0; s<macro_segment; s++) for (int s=0; s<macro_segment; s++)
...@@ -462,11 +464,11 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin ...@@ -462,11 +464,11 @@ int nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encodin
macro_segment_end - macro_segment, macro_segment_end - macro_segment,
nrLDPC_TB_encoding_parameters->output, nrLDPC_TB_encoding_parameters->output,
Eoffset); Eoffset);
if(toutput != NULL) stop_meas(toutput);
} }
nbTasks += n_seg; nbTasks += n_seg;
} }
if (tconcat != NULL)
stop_meas(tconcat);
return 0; return 0;
} }
...@@ -39,9 +39,11 @@ typedef struct { ...@@ -39,9 +39,11 @@ typedef struct {
unsigned int first_seg; // optim8segmulti unsigned int first_seg; // optim8segmulti
unsigned char gen_code; // orig unsigned char gen_code; // orig
time_stats_t *tinput; time_stats_t *tinput;
time_stats_t *tinput_memcpy;
time_stats_t *tprep; time_stats_t *tprep;
time_stats_t *tparity; time_stats_t *tparity;
time_stats_t *toutput; time_stats_t *toutput;
time_stats_t *tconcat;
/// Size in bits of the code segments /// Size in bits of the code segments
uint32_t K; uint32_t K;
/// Number of lifting sizes to fit the payload /// Number of lifting sizes to fit the payload
......
...@@ -80,9 +80,11 @@ ...@@ -80,9 +80,11 @@
#include "ldpc_BG2_Zc80_byte.c" #include "ldpc_BG2_Zc80_byte.c"
#include "ldpc_BG2_Zc72_byte.c" #include "ldpc_BG2_Zc72_byte.c"
static void encode_parity_check_part_optim(uint8_t *cc, uint8_t *d, short BG, short Zc, int simd_size, int ncols) static void encode_parity_check_part_optim(uint8_t *cc, uint8_t *d, short BG, short Zc, int simd_size, int ncols, time_stats_t *tinput_memcpy)
{ {
unsigned char c[2 * 22 * Zc * simd_size] __attribute__((aligned(64))); //double size matrix of c unsigned char c[2 * 22 * Zc * simd_size] __attribute__((aligned(64))); //double size matrix of c
if (tinput_memcpy)
start_meas(tinput_memcpy);
for (int i1 = 0; i1 < ncols; i1++) { for (int i1 = 0; i1 < ncols; i1++) {
memcpy(&c[2 * i1 * Zc], &cc[i1 * Zc], Zc * sizeof(unsigned char)); memcpy(&c[2 * i1 * Zc], &cc[i1 * Zc], Zc * sizeof(unsigned char));
memcpy(&c[(2 * i1 + 1) * Zc], &cc[i1 * Zc], Zc * sizeof(unsigned char)); memcpy(&c[(2 * i1 + 1) * Zc], &cc[i1 * Zc], Zc * sizeof(unsigned char));
...@@ -95,6 +97,8 @@ static void encode_parity_check_part_optim(uint8_t *cc, uint8_t *d, short BG, sh ...@@ -95,6 +97,8 @@ static void encode_parity_check_part_optim(uint8_t *cc, uint8_t *d, short BG, sh
memcpy(&c[(2 * ncols * Zc * i1)], &c[i1], (2 * ncols * Zc * sizeof(unsigned char)) - i1); memcpy(&c[(2 * ncols * Zc * i1)], &c[i1], (2 * ncols * Zc * sizeof(unsigned char)) - i1);
} }
} }
if (tinput_memcpy)
stop_meas(tinput_memcpy);
if (BG == 1) { if (BG == 1) {
switch (Zc) { switch (Zc) {
case 176: case 176:
......
...@@ -169,23 +169,23 @@ int LDPCencoder(uint8_t **input, uint8_t *output, encoder_implemparams_t *impp) ...@@ -169,23 +169,23 @@ int LDPCencoder(uint8_t **input, uint8_t *output, encoder_implemparams_t *impp)
if(impp->tinput != NULL) stop_meas(impp->tinput); if(impp->tinput != NULL) stop_meas(impp->tinput);
if ((BG==1 && Zc>=176) || (BG==2 && Zc>=72)) { if ((BG == 1 && Zc >= 176) || (BG == 2 && Zc >= 72)) {
// extend matrix
if(impp->tprep != NULL) start_meas(impp->tprep);
if(impp->tprep != NULL) stop_meas(impp->tprep);
//parity check part //parity check part
if(impp->tparity != NULL) start_meas(impp->tparity); if(impp->tparity != NULL) start_meas(impp->tparity);
encode_parity_check_part_optim(cc, dd, BG, Zc, simd_size, ncols); encode_parity_check_part_optim(cc, dd, BG, Zc, simd_size, ncols, impp->tinput_memcpy);
if(impp->tparity != NULL) stop_meas(impp->tparity); if(impp->tparity != NULL) stop_meas(impp->tparity);
} } else {
else {
if (encode_parity_check_part_orig(cc, dd, BG, Zc, Kb, block_length)!=0) { if (encode_parity_check_part_orig(cc, dd, BG, Zc, Kb, block_length)!=0) {
printf("Problem with encoder\n"); printf("Problem with encoder\n");
return(-1); return(-1);
} }
} }
if (impp->toutput != NULL)
start_meas(impp->toutput);
memcpy(output,&cc[2*Zc],(block_length-(2*Zc))); memcpy(output,&cc[2*Zc],(block_length-(2*Zc)));
memcpy(output+block_length-(2*Zc),dd,((nrows-no_punctured_columns) * Zc-removed_bit)); memcpy(output+block_length-(2*Zc),dd,((nrows-no_punctured_columns) * Zc-removed_bit));
if (impp->toutput != NULL)
stop_meas(impp->toutput);
return 0; return 0;
} }
...@@ -789,9 +789,11 @@ void nr_generate_pdsch(PHY_VARS_gNB *gNB, int n_dlsch, NR_gNB_DLSCH_t *dlsch_arr ...@@ -789,9 +789,11 @@ void nr_generate_pdsch(PHY_VARS_gNB *gNB, int n_dlsch, NR_gNB_DLSCH_t *dlsch_arr
{ {
time_stats_t *dlsch_encoding_stats = &gNB->dlsch_encoding_stats; time_stats_t *dlsch_encoding_stats = &gNB->dlsch_encoding_stats;
time_stats_t *tinput = &gNB->tinput; time_stats_t *tinput = &gNB->tinput;
time_stats_t *tinput_memcpy = &gNB->tinput_memcpy;
time_stats_t *tprep = &gNB->tprep; time_stats_t *tprep = &gNB->tprep;
time_stats_t *tparity = &gNB->tparity; time_stats_t *tparity = &gNB->tparity;
time_stats_t *toutput = &gNB->toutput; time_stats_t *toutput = &gNB->toutput;
time_stats_t *tconcat = &gNB->tconcat;
time_stats_t *dlsch_rate_matching_stats = &gNB->dlsch_rate_matching_stats; time_stats_t *dlsch_rate_matching_stats = &gNB->dlsch_rate_matching_stats;
time_stats_t *dlsch_interleaving_stats = &gNB->dlsch_interleaving_stats; time_stats_t *dlsch_interleaving_stats = &gNB->dlsch_interleaving_stats;
time_stats_t *dlsch_segmentation_stats = &gNB->dlsch_segmentation_stats; time_stats_t *dlsch_segmentation_stats = &gNB->dlsch_segmentation_stats;
...@@ -854,9 +856,11 @@ void nr_generate_pdsch(PHY_VARS_gNB *gNB, int n_dlsch, NR_gNB_DLSCH_t *dlsch_arr ...@@ -854,9 +856,11 @@ void nr_generate_pdsch(PHY_VARS_gNB *gNB, int n_dlsch, NR_gNB_DLSCH_t *dlsch_arr
slot, slot,
output, output,
tinput, tinput,
tinput_memcpy,
tprep, tprep,
tparity, tparity,
toutput, toutput,
tconcat,
dlsch_rate_matching_stats, dlsch_rate_matching_stats,
dlsch_interleaving_stats, dlsch_interleaving_stats,
dlsch_segmentation_stats) dlsch_segmentation_stats)
......
...@@ -20,9 +20,11 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB, ...@@ -20,9 +20,11 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
uint8_t slot, uint8_t slot,
unsigned char *output, unsigned char *output,
time_stats_t *tinput, time_stats_t *tinput,
time_stats_t *tinput_memcpy,
time_stats_t *tprep, time_stats_t *tprep,
time_stats_t *tparity, time_stats_t *tparity,
time_stats_t *toutput, time_stats_t *toutput,
time_stats_t *tconcat,
time_stats_t *dlsch_rate_matching_stats, time_stats_t *dlsch_rate_matching_stats,
time_stats_t *dlsch_interleaving_stats, time_stats_t *dlsch_interleaving_stats,
time_stats_t *dlsch_segmentation_stats); time_stats_t *dlsch_segmentation_stats);
......
...@@ -91,9 +91,11 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB, ...@@ -91,9 +91,11 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
uint8_t slot, uint8_t slot,
unsigned char *output, unsigned char *output,
time_stats_t *tinput, time_stats_t *tinput,
time_stats_t *tinput_memcpy,
time_stats_t *tprep, time_stats_t *tprep,
time_stats_t *tparity, time_stats_t *tparity,
time_stats_t *toutput, time_stats_t *toutput,
time_stats_t *tconcat,
time_stats_t *dlsch_rate_matching_stats, time_stats_t *dlsch_rate_matching_stats,
time_stats_t *dlsch_interleaving_stats, time_stats_t *dlsch_interleaving_stats,
time_stats_t *dlsch_segmentation_stats) time_stats_t *dlsch_segmentation_stats)
......
...@@ -866,7 +866,10 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -866,7 +866,10 @@ static void inner_rx(PHY_VARS_gNB *gNB,
int output_shift, int output_shift,
uint32_t nvar, uint32_t nvar,
c16_t *rxFext_slot, c16_t *rxFext_slot,
c16_t *chFext_slot) c16_t *chFext_slot,
time_stats_t *pusch_extr,
time_stats_t *pusch_ch_comp,
time_stats_t *ulsch_llr)
{ {
int nb_layer = rel15_ul->nrOfLayers; int nb_layer = rel15_ul->nrOfLayers;
int nb_rx_ant = frame_parms->nb_antennas_rx; int nb_rx_ant = frame_parms->nb_antennas_rx;
...@@ -887,6 +890,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -887,6 +890,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
for (int aarx = 0; aarx < nb_rx_ant; aarx++) { for (int aarx = 0; aarx < nb_rx_ant; aarx++) {
for (int aatx = 0; aatx < nb_layer; aatx++) { for (int aatx = 0; aatx < nb_layer; aatx++) {
start_meas(pusch_extr);
nr_ulsch_extract_rbs(rxF[aarx], nr_ulsch_extract_rbs(rxF[aarx],
(c16_t *)pusch_vars->ul_ch_estimates[aatx * nb_rx_ant + aarx], (c16_t *)pusch_vars->ul_ch_estimates[aatx * nb_rx_ant + aarx],
rxFext[aarx], rxFext[aarx],
...@@ -896,6 +900,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -896,6 +900,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
dmrs_symbol_flag, dmrs_symbol_flag,
rel15_ul, rel15_ul,
frame_parms); frame_parms);
stop_meas(pusch_extr);
#if T_TRACER #if T_TRACER
// Data Recording application supports only 1 layer and 1 Tx antenna, so only record the first layer and first Tx antenna // Data Recording application supports only 1 layer and 1 Tx antenna, so only record the first layer and first Tx antenna
if (aatx == 0 && aarx == 0) { if (aatx == 0 && aarx == 0) {
...@@ -911,6 +916,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -911,6 +916,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
#endif #endif
} }
} }
start_meas(pusch_ch_comp);
c16_t rho[nb_layer][nb_layer][buffer_length] __attribute__((aligned(64))); c16_t rho[nb_layer][nb_layer][buffer_length] __attribute__((aligned(64)));
c16_t rxF_ch_maga[nb_layer][buffer_length] __attribute__((aligned(64))); c16_t rxF_ch_maga[nb_layer][buffer_length] __attribute__((aligned(64)));
c16_t rxF_ch_magb[nb_layer][buffer_length] __attribute__((aligned(64))); c16_t rxF_ch_magb[nb_layer][buffer_length] __attribute__((aligned(64)));
...@@ -936,6 +942,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -936,6 +942,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
rel15_ul, rel15_ul,
symbol, symbol,
output_shift); output_shift);
stop_meas(pusch_ch_comp);
if (nb_layer == 1 && rel15_ul->transform_precoding == transformPrecoder_enabled && rel15_ul->qam_mod_order <= 6) { if (nb_layer == 1 && rel15_ul->transform_precoding == transformPrecoder_enabled && rel15_ul->qam_mod_order <= 6) {
if (rel15_ul->qam_mod_order > 2) if (rel15_ul->qam_mod_order > 2)
...@@ -958,7 +965,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -958,7 +965,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
buffer_length); buffer_length);
pusch_vars->ul_valid_re_per_slot[symbol] -= pusch_vars->ptrs_re_per_slot; pusch_vars->ul_valid_re_per_slot[symbol] -= pusch_vars->ptrs_re_per_slot;
} }
start_meas(ulsch_llr);
if (nb_layer == 2) { if (nb_layer == 2) {
if (rel15_ul->qam_mod_order <= 6) { if (rel15_ul->qam_mod_order <= 6) {
nr_ulsch_compute_ML_llr((c16_t *)&pusch_vars->rxdataF_comp[0][symbol * buffer_length], nr_ulsch_compute_ML_llr((c16_t *)&pusch_vars->rxdataF_comp[0][symbol * buffer_length],
...@@ -998,6 +1005,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, ...@@ -998,6 +1005,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
pusch_vars->ul_valid_re_per_slot[symbol], pusch_vars->ul_valid_re_per_slot[symbol],
symbol, symbol,
rel15_ul->qam_mod_order); rel15_ul->qam_mod_order);
stop_meas(ulsch_llr);
} }
typedef struct puschSymbolProc_s { typedef struct puschSymbolProc_s {
...@@ -1012,6 +1020,11 @@ typedef struct puschSymbolProc_s { ...@@ -1012,6 +1020,11 @@ typedef struct puschSymbolProc_s {
int16_t *scramblingSequence; int16_t *scramblingSequence;
uint32_t nvar; uint32_t nvar;
int beam_nb; int beam_nb;
time_stats_t pusch_extr;
time_stats_t pusch_ch_comp;
time_stats_t ulsch_llr;
time_stats_t ul_demap;
time_stats_t ul_unscram;
task_ans_t *ans; task_ans_t *ans;
c16_t *pusch_ch_est_dmrs_interpl_slot_mem; c16_t *pusch_ch_est_dmrs_interpl_slot_mem;
c16_t *rxFext_slot_mem; c16_t *rxFext_slot_mem;
...@@ -1048,10 +1061,14 @@ static void nr_pusch_symbol_processing(void *arg) ...@@ -1048,10 +1061,14 @@ static void nr_pusch_symbol_processing(void *arg)
pusch_vars->log2_maxh, pusch_vars->log2_maxh,
rdata->nvar, rdata->nvar,
rdata->rxFext_slot_mem, rdata->rxFext_slot_mem,
rdata->pusch_ch_est_dmrs_interpl_slot_mem); rdata->pusch_ch_est_dmrs_interpl_slot_mem,
&rdata->pusch_extr,
&rdata->pusch_ch_comp,
&rdata->ulsch_llr);
int nb_re_pusch = pusch_vars->ul_valid_re_per_slot[symbol]; int nb_re_pusch = pusch_vars->ul_valid_re_per_slot[symbol];
// layer de-mapping // layer de-mapping
start_meas(&rdata->ul_demap);
int16_t *llr_ptr = llrs[0]; int16_t *llr_ptr = llrs[0];
if (rel15_ul->nrOfLayers != 1) { if (rel15_ul->nrOfLayers != 1) {
llr_ptr = &rdata->llr[pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers]; llr_ptr = &rdata->llr[pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers];
...@@ -1061,12 +1078,15 @@ static void nr_pusch_symbol_processing(void *arg) ...@@ -1061,12 +1078,15 @@ static void nr_pusch_symbol_processing(void *arg)
llr_ptr[i * rel15_ul->nrOfLayers * rel15_ul->qam_mod_order + l * rel15_ul->qam_mod_order + m] = llr_ptr[i * rel15_ul->nrOfLayers * rel15_ul->qam_mod_order + l * rel15_ul->qam_mod_order + m] =
llrss[l][i * rel15_ul->qam_mod_order + m]; llrss[l][i * rel15_ul->qam_mod_order + m];
} }
stop_meas(&rdata->ul_demap);
// unscrambling // unscrambling
start_meas(&rdata->ul_unscram);
int16_t *llr16 = (int16_t*)&rdata->llr[pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers]; int16_t *llr16 = (int16_t*)&rdata->llr[pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers];
int16_t *s = rdata->scramblingSequence + pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers; int16_t *s = rdata->scramblingSequence + pusch_vars->llr_offset[symbol] * rel15_ul->nrOfLayers;
const int end = nb_re_pusch * rel15_ul->qam_mod_order * rel15_ul->nrOfLayers; const int end = nb_re_pusch * rel15_ul->qam_mod_order * rel15_ul->nrOfLayers;
for (int i = 0; i < end; i++) for (int i = 0; i < end; i++)
llr16[i] = llr_ptr[i] * s[i]; llr16[i] = llr_ptr[i] * s[i];
stop_meas(&rdata->ul_unscram);
} }
// Task running in // completed // Task running in // completed
...@@ -1303,8 +1323,9 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1303,8 +1323,9 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
memset(ul_ch_estimates_ext, 0, sizeof(ul_ch_estimates_ext)); memset(ul_ch_estimates_ext, 0, sizeof(ul_ch_estimates_ext));
int buffer_length = rel15_ul->rb_size * NR_NB_SC_PER_RB; int buffer_length = rel15_ul->rb_size * NR_NB_SC_PER_RB;
c16_t temp_rxFext[frame_parms->nb_antennas_rx][buffer_length] __attribute__((aligned(64))); c16_t temp_rxFext[frame_parms->nb_antennas_rx][buffer_length] __attribute__((aligned(64)));
for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++)
for (int nl = 0; nl < rel15_ul->nrOfLayers; nl++) for (int nl = 0; nl < rel15_ul->nrOfLayers; nl++) {
start_meas(&gNB->pusch_extraction_stats);
nr_ulsch_extract_rbs(gNB->common_vars.rxdataF[beam_nb][aarx], nr_ulsch_extract_rbs(gNB->common_vars.rxdataF[beam_nb][aarx],
(c16_t *)pusch_vars->ul_ch_estimates[nl * frame_parms->nb_antennas_rx + aarx], (c16_t *)pusch_vars->ul_ch_estimates[nl * frame_parms->nb_antennas_rx + aarx],
temp_rxFext[aarx], temp_rxFext[aarx],
...@@ -1314,6 +1335,8 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1314,6 +1335,8 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
(rel15_ul->ul_dmrs_symb_pos >> meas_symbol) & 0x01, (rel15_ul->ul_dmrs_symb_pos >> meas_symbol) & 0x01,
rel15_ul, rel15_ul,
frame_parms); frame_parms);
stop_meas(&gNB->pusch_extraction_stats);
}
uint8_t shift_ch_ext = rel15_ul->nrOfLayers > 1 ? log2_approx(max_ch >> 11) : 0; uint8_t shift_ch_ext = rel15_ul->nrOfLayers > 1 ? log2_approx(max_ch >> 11) : 0;
...@@ -1393,6 +1416,11 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1393,6 +1416,11 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
rdata->beam_nb = beam_nb; rdata->beam_nb = beam_nb;
rdata->rxFext_slot_mem = rxFext_slot_mem; rdata->rxFext_slot_mem = rxFext_slot_mem;
rdata->pusch_ch_est_dmrs_interpl_slot_mem = pusch_ch_est_dmrs_interpl_slot_mem; rdata->pusch_ch_est_dmrs_interpl_slot_mem = pusch_ch_est_dmrs_interpl_slot_mem;
reset_meas(&rdata->pusch_extr);
reset_meas(&rdata->pusch_ch_comp);
reset_meas(&rdata->ulsch_llr);
reset_meas(&rdata->ul_demap);
reset_meas(&rdata->ul_unscram);
if (rel15_ul->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) { if (rel15_ul->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
nr_pusch_symbol_processing(rdata); nr_pusch_symbol_processing(rdata);
...@@ -1433,6 +1461,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1433,6 +1461,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
#endif #endif
join_task_ans(&ans); join_task_ans(&ans);
for (int i = 0; i < sz_arr; ++i) {
// retrieve measurements
puschSymbolProc_t *rdata = &arr[i];
merge_meas(&gNB->pusch_extraction_stats, &rdata->pusch_extr);
merge_meas(&gNB->pusch_channel_compensation_stats, &rdata->pusch_ch_comp);
merge_meas(&gNB->ulsch_llr_stats, &rdata->ulsch_llr);
merge_meas(&gNB->ulsch_layer_demapping_stats, &rdata->ul_demap);
merge_meas(&gNB->ulsch_unscrambling_stats, &rdata->ul_unscram);
}
stop_meas(&gNB->rx_pusch_symbol_processing_stats); stop_meas(&gNB->rx_pusch_symbol_processing_stats);
// Copy the data to the scope. This cannot be performed in one call to gNBscopeCopy because the data is not contiguous in the // Copy the data to the scope. This cannot be performed in one call to gNBscopeCopy because the data is not contiguous in the
......
...@@ -444,10 +444,12 @@ typedef struct PHY_VARS_gNB_s { ...@@ -444,10 +444,12 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t dlsch_resource_mapping_stats; time_stats_t dlsch_resource_mapping_stats;
time_stats_t dlsch_precoding_stats; time_stats_t dlsch_precoding_stats;
time_stats_t tinput; time_stats_t tinput;
time_stats_t tinput_memcpy;
time_stats_t tprep; time_stats_t tprep;
time_stats_t tparity; time_stats_t tparity;
time_stats_t toutput; time_stats_t toutput;
time_stats_t tconcat;
time_stats_t dlsch_rate_matching_stats; time_stats_t dlsch_rate_matching_stats;
time_stats_t dlsch_interleaving_stats; time_stats_t dlsch_interleaving_stats;
time_stats_t dlsch_segmentation_stats; time_stats_t dlsch_segmentation_stats;
...@@ -462,11 +464,16 @@ typedef struct PHY_VARS_gNB_s { ...@@ -462,11 +464,16 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t ulsch_decoding_stats; time_stats_t ulsch_decoding_stats;
time_stats_t ts_deinterleave; time_stats_t ts_deinterleave;
time_stats_t ts_rate_unmatch; time_stats_t ts_rate_unmatch;
time_stats_t ts_seg_prep;
time_stats_t ts_ldpc_decode; time_stats_t ts_ldpc_decode;
time_stats_t ulsch_deinterleaving_stats; time_stats_t ulsch_deinterleaving_stats;
time_stats_t ulsch_channel_estimation_stats; time_stats_t ulsch_channel_estimation_stats;
time_stats_t pusch_channel_estimation_antenna_processing_stats; time_stats_t pusch_channel_estimation_antenna_processing_stats;
time_stats_t ulsch_llr_stats; time_stats_t ulsch_llr_stats;
time_stats_t ulsch_layer_demapping_stats;
time_stats_t ulsch_unscrambling_stats;
time_stats_t pusch_extraction_stats;
time_stats_t pusch_channel_compensation_stats;
time_stats_t rx_srs_stats; time_stats_t rx_srs_stats;
time_stats_t generate_srs_stats; time_stats_t generate_srs_stats;
time_stats_t get_srs_signal_stats; time_stats_t get_srs_signal_stats;
......
...@@ -490,8 +490,8 @@ int main(int argc, char **argv) ...@@ -490,8 +490,8 @@ int main(int argc, char **argv)
unsigned char output[nb_rb * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * NR_MAX_NB_LAYERS] __attribute__((aligned(64))); unsigned char output[nb_rb * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * NR_MAX_NB_LAYERS] __attribute__((aligned(64)));
bzero(output, sizeof(output)); bzero(output, sizeof(output));
if (input_fd == NULL) { if (input_fd == NULL) {
nr_dlsch_encoding(gNB, 1, dlsch, frame, slot, output, NULL, NULL, NULL, NULL, NULL, NULL, NULL); nr_dlsch_encoding(gNB, 1, dlsch, frame, slot, output, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
} }
for (SNR = snr0; SNR < snr1 && !stop; SNR += snr_step) { for (SNR = snr0; SNR < snr1 && !stop; SNR += snr_step) {
n_errors = 0; n_errors = 0;
......
...@@ -1190,6 +1190,11 @@ int main(int argc, char *argv[]) ...@@ -1190,6 +1190,11 @@ int main(int argc, char *argv[])
reset_meas(&gNB->rx_pusch_stats); reset_meas(&gNB->rx_pusch_stats);
reset_meas(&gNB->rx_pusch_init_stats); reset_meas(&gNB->rx_pusch_init_stats);
reset_meas(&gNB->rx_pusch_symbol_processing_stats); reset_meas(&gNB->rx_pusch_symbol_processing_stats);
reset_meas(&gNB->pusch_extraction_stats);
reset_meas(&gNB->pusch_channel_compensation_stats);
reset_meas(&gNB->ulsch_llr_stats);
reset_meas(&gNB->ulsch_layer_demapping_stats);
reset_meas(&gNB->ulsch_unscrambling_stats);
reset_meas(&gNB->ulsch_decoding_stats); reset_meas(&gNB->ulsch_decoding_stats);
reset_meas(&gNB->ts_deinterleave); reset_meas(&gNB->ts_deinterleave);
reset_meas(&gNB->ts_rate_unmatch); reset_meas(&gNB->ts_rate_unmatch);
...@@ -1850,9 +1855,22 @@ int main(int argc, char *argv[]) ...@@ -1850,9 +1855,22 @@ int main(int argc, char *argv[])
printStatIndent3(&gNB->pusch_channel_estimation_antenna_processing_stats, "Antenna Processing time"); printStatIndent3(&gNB->pusch_channel_estimation_antenna_processing_stats, "Antenna Processing time");
printStatIndent2(&gNB->rx_pusch_init_stats, "RX PUSCH Initialization time"); printStatIndent2(&gNB->rx_pusch_init_stats, "RX PUSCH Initialization time");
printStatIndent2(&gNB->rx_pusch_symbol_processing_stats, "RX PUSCH Symbol Processing time"); printStatIndent2(&gNB->rx_pusch_symbol_processing_stats, "RX PUSCH Symbol Processing time");
gNB->pusch_extraction_stats.trials = gNB->rx_pusch_symbol_processing_stats.trials;
printStatIndent3(&gNB->pusch_extraction_stats, "RX PUSCH extraction");
gNB->pusch_channel_compensation_stats.trials = gNB->rx_pusch_symbol_processing_stats.trials;
printStatIndent3(&gNB->pusch_channel_compensation_stats, "RX PUSCH channel compensation");
gNB->ulsch_llr_stats.trials = gNB->rx_pusch_symbol_processing_stats.trials;
printStatIndent3(&gNB->ulsch_llr_stats, "RX PUSCH LLR");
gNB->ulsch_layer_demapping_stats.trials = gNB->rx_pusch_symbol_processing_stats.trials;
printStatIndent3(&gNB->ulsch_layer_demapping_stats, "RX PUSCH layer demapping");
gNB->ulsch_unscrambling_stats.trials = gNB->rx_pusch_symbol_processing_stats.trials;
printStatIndent3(&gNB->ulsch_unscrambling_stats, "RX PUSCH unscrambling");
printStatIndent(&gNB->ulsch_decoding_stats,"ULSCH total decoding time"); printStatIndent(&gNB->ulsch_decoding_stats,"ULSCH total decoding time");
gNB->ts_deinterleave.trials = n_trials;
printStatIndent2(&gNB->ts_deinterleave, "ULSCH segment deinterleaving time"); printStatIndent2(&gNB->ts_deinterleave, "ULSCH segment deinterleaving time");
gNB->ts_rate_unmatch.trials = n_trials;
printStatIndent2(&gNB->ts_rate_unmatch, "ULSCH segment rate matching time"); printStatIndent2(&gNB->ts_rate_unmatch, "ULSCH segment rate matching time");
gNB->ts_ldpc_decode.trials = n_trials;
printStatIndent2(&gNB->ts_ldpc_decode, "ULSCH segments decoding time"); printStatIndent2(&gNB->ts_ldpc_decode, "ULSCH segments decoding time");
printStatIndent(&gNB->rx_srs_stats,"RX SRS time"); printStatIndent(&gNB->rx_srs_stats,"RX SRS time");
printStatIndent2(&gNB->generate_srs_stats,"Generate SRS sequence time"); printStatIndent2(&gNB->generate_srs_stats,"Generate SRS sequence time");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment