Commit 4c2c1a36 authored by tct-labo4's avatar tct-labo4

fix dlsim

parent 96db5ea5
...@@ -89,7 +89,6 @@ extern void print_shorts(char *s,int16_t *x); ...@@ -89,7 +89,6 @@ extern void print_shorts(char *s,int16_t *x);
int rx_pdsch(PHY_VARS_UE *ue, int rx_pdsch(PHY_VARS_UE *ue,
UE_rxtx_proc_t *proc,
PDSCH_t type, PDSCH_t type,
unsigned char eNB_id, unsigned char eNB_id,
unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference
...@@ -519,15 +518,17 @@ int rx_pdsch(PHY_VARS_UE *ue, ...@@ -519,15 +518,17 @@ int rx_pdsch(PHY_VARS_UE *ue,
#endif #endif
//wait until pdcch is decoded //wait until pdcch is decoded
proc->channel_level = 1; //proc->channel_level = 1;
} }
/*
uint32_t wait = 0; uint32_t wait = 0;
while(proc->channel_level == 0) while(proc->channel_level == 0)
{ {
usleep(1); usleep(1);
wait++; wait++;
} }
*/
#if T_TRACER #if T_TRACER
if (type == PDSCH) if (type == PDSCH)
......
...@@ -1348,7 +1348,6 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, ...@@ -1348,7 +1348,6 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
@param i_mod Modulation order of the interfering stream @param i_mod Modulation order of the interfering stream
*/ */
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue, int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
UE_rxtx_proc_t *proc,
PDSCH_t type, PDSCH_t type,
uint8_t eNB_id, uint8_t eNB_id,
uint8_t eNB_id_i, uint8_t eNB_id_i,
......
...@@ -418,7 +418,7 @@ typedef struct { ...@@ -418,7 +418,7 @@ typedef struct {
uint8_t llr_slot1_available; uint8_t llr_slot1_available;
uint8_t dci_slot0_available; uint8_t dci_slot0_available;
uint8_t first_symbol_available; uint8_t first_symbol_available;
uint8_t channel_level; //uint8_t channel_level;
/// scheduling parameters for fep_slot1 thread /// scheduling parameters for fep_slot1 thread
struct sched_param sched_param_fep_slot1; struct sched_param sched_param_fep_slot1;
...@@ -940,7 +940,8 @@ typedef struct { ...@@ -940,7 +940,8 @@ typedef struct {
time_stats_t dlsch_rate_unmatching_stats; time_stats_t dlsch_rate_unmatching_stats;
time_stats_t dlsch_turbo_decoding_stats; time_stats_t dlsch_turbo_decoding_stats;
time_stats_t dlsch_deinterleaving_stats; time_stats_t dlsch_deinterleaving_stats;
time_stats_t dlsch_llr_stats[RX_NB_TH][LTE_SLOTS_PER_SUBFRAME]; time_stats_t dlsch_llr_stats;
time_stats_t dlsch_llr_stats_parallelization[RX_NB_TH][LTE_SLOTS_PER_SUBFRAME];
time_stats_t dlsch_unscrambling_stats; time_stats_t dlsch_unscrambling_stats;
time_stats_t dlsch_rate_matching_stats; time_stats_t dlsch_rate_matching_stats;
time_stats_t dlsch_turbo_encoding_stats; time_stats_t dlsch_turbo_encoding_stats;
......
...@@ -3721,11 +3721,10 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC ...@@ -3721,11 +3721,10 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
uint8_t slot = 0; uint8_t slot = 0;
if(m >= ue->frame_parms.symbols_per_tti>>1) if(m >= ue->frame_parms.symbols_per_tti>>1)
slot = 1; slot = 1;
start_meas(&ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot]); start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
#endif #endif
// process DLSCH received in first slot // process DLSCH received in first slot
rx_pdsch(ue, rx_pdsch(ue,
proc,
pdsch, pdsch,
eNB_id, eNB_id,
eNB_id_i, eNB_id_i,
...@@ -3737,11 +3736,11 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC ...@@ -3737,11 +3736,11 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
i_mod, i_mod,
dlsch0->current_harq_pid); dlsch0->current_harq_pid);
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot]); stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
#if DISABLE_LOG_X #if DISABLE_LOG_X
printf("[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0)); printf("[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
#else #else
LOG_D(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0)); LOG_D(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
#endif #endif
#endif #endif
...@@ -4622,7 +4621,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr ...@@ -4622,7 +4621,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr
proc->dci_slot0_available=0; proc->dci_slot0_available=0;
proc->first_symbol_available=0; proc->first_symbol_available=0;
proc->chan_est_slot1_available=0; proc->chan_est_slot1_available=0;
proc->channel_level=0; //proc->channel_level=0;
if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) { if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) {
LOG_E( PHY, "[SCHED][UE %d][Slot0] error locking mutex for UE slot1 dl processing\n",ue->Mod_id ); LOG_E( PHY, "[SCHED][UE %d][Slot0] error locking mutex for UE slot1 dl processing\n",ue->Mod_id );
......
...@@ -2263,7 +2263,7 @@ int main(int argc, char **argv) ...@@ -2263,7 +2263,7 @@ int main(int argc, char **argv)
} }
for (SNR=snr0; SNR<snr1; SNR+=snr_step) { for (SNR=snr0; SNR<snr1; SNR+=snr_step) {
UE->proc.proc_rxtx[subframe&1].frame_rx=0; UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx=0;
errs[0]=0; errs[0]=0;
errs[1]=0; errs[1]=0;
errs[2]=0; errs[2]=0;
...@@ -2332,7 +2332,7 @@ int main(int argc, char **argv) ...@@ -2332,7 +2332,7 @@ int main(int argc, char **argv)
struct list time_vector_rx_dec; struct list time_vector_rx_dec;
initialize(&time_vector_rx_dec); initialize(&time_vector_rx_dec);
eNB_rxtx_proc_t *proc_eNB = &eNB->proc.proc_rxtx[subframe&1]; eNB_rxtx_proc_t *proc_eNB = &eNB->proc.proc_rxtx[UE->current_thread_id[subframe]];
for (trials = 0; trials<n_frames; trials++) { for (trials = 0; trials<n_frames; trials++) {
//printf("Trial %d\n",trials); //printf("Trial %d\n",trials);
...@@ -2517,7 +2517,7 @@ int main(int argc, char **argv) ...@@ -2517,7 +2517,7 @@ int main(int argc, char **argv)
DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd); DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd);
UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[subframe&1]; UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[UE->current_thread_id[subframe]];
proc->subframe_rx = subframe; proc->subframe_rx = subframe;
UE->UE_mode[0] = PUSCH; UE->UE_mode[0] = PUSCH;
...@@ -2539,7 +2539,9 @@ int main(int argc, char **argv) ...@@ -2539,7 +2539,9 @@ int main(int argc, char **argv)
(void *)&dci_alloc[0].dci_pdu, (void *)&dci_alloc[0].dci_pdu,
n_rnti, n_rnti,
dci_alloc[0].format, dci_alloc[0].format,
UE->dlsch[proc->subframe_rx&0x1][eNB_id], UE->pdcch_vars[UE->current_thread_id[proc->subframe_rx]][eNB_id],
UE->pdsch_vars[UE->current_thread_id[proc->subframe_rx]][eNB_id],
UE->dlsch[UE->current_thread_id[proc->subframe_rx]][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
...@@ -2756,7 +2758,7 @@ int main(int argc, char **argv) ...@@ -2756,7 +2758,7 @@ int main(int argc, char **argv)
subframe); subframe);
} }
UE->proc.proc_rxtx[subframe&1].frame_rx++; UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx++;
} //round } //round
// printf("\n"); // printf("\n");
...@@ -2767,7 +2769,7 @@ int main(int argc, char **argv) ...@@ -2767,7 +2769,7 @@ int main(int argc, char **argv)
//len = chbch_stats_read(stats_buffer,NULL,0,4096); //len = chbch_stats_read(stats_buffer,NULL,0,4096);
//printf("%s\n\n",stats_buffer); //printf("%s\n\n",stats_buffer);
if (UE->proc.proc_rxtx[subframe&1].frame_rx % 10 == 0) { if (UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx % 10 == 0) {
UE->bitrate[eNB_id] = (UE->total_TBS[eNB_id] - UE->total_TBS_last[eNB_id])*10; UE->bitrate[eNB_id] = (UE->total_TBS[eNB_id] - UE->total_TBS_last[eNB_id])*10;
LOG_D(PHY,"[UE %d] Calculating bitrate: total_TBS = %d, total_TBS_last = %d, bitrate = %d kbits/s\n",UE->Mod_id,UE->total_TBS[eNB_id],UE->total_TBS_last[eNB_id], LOG_D(PHY,"[UE %d] Calculating bitrate: total_TBS = %d, total_TBS_last = %d, bitrate = %d kbits/s\n",UE->Mod_id,UE->total_TBS[eNB_id],UE->total_TBS_last[eNB_id],
UE->bitrate[eNB_id]/1000); UE->bitrate[eNB_id]/1000);
...@@ -2789,7 +2791,7 @@ int main(int argc, char **argv) ...@@ -2789,7 +2791,7 @@ int main(int argc, char **argv)
double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0; double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0; double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0; double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
double t_rx_dec = (double)UE->dlsch_decoding_stats[subframe&1].p_time/cpu_freq_GHz/1000.0; double t_rx_dec = (double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].p_time/cpu_freq_GHz/1000.0;
if (t_tx > t_tx_max) if (t_tx > t_tx_max)
t_tx_max = t_tx; t_tx_max = t_tx;
...@@ -3002,12 +3004,12 @@ int main(int argc, char **argv) ...@@ -3002,12 +3004,12 @@ int main(int argc, char **argv)
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3); printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3);
printf("DLSCH unscrambling time :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0, printf("DLSCH unscrambling time :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0,
UE->dlsch_unscrambling_stats.trials); UE->dlsch_unscrambling_stats.trials);
std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[subframe&1].diff_square/pow(cpu_freq_GHz,2)/pow(1000, std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
2)/UE->dlsch_decoding_stats[subframe&1].trials - pow((double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000,2)); 2)/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials - pow((double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000,2));
printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f) :%f us (%d trials, max %f)\n", printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f) :%f us (%d trials, max %f)\n",
eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter/iter_trials, eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter/iter_trials,
(double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[subframe&1].trials, (double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials,
(double)UE->dlsch_decoding_stats[subframe&1].max/cpu_freq_GHz/1000.0); (double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].max/cpu_freq_GHz/1000.0);
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3); printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3);
printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n", printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n",
(double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials); (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
...@@ -3195,7 +3197,7 @@ int main(int argc, char **argv) ...@@ -3195,7 +3197,7 @@ int main(int argc, char **argv)
UE->dlsch_rx_pdcch_stats.trials, UE->dlsch_rx_pdcch_stats.trials,
UE->dlsch_llr_stats.trials, UE->dlsch_llr_stats.trials,
UE->dlsch_unscrambling_stats.trials, UE->dlsch_unscrambling_stats.trials,
UE->dlsch_decoding_stats[subframe&1].trials UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials
); );
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;", fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;",
get_time_meas_us(&eNB->phy_proc_tx), get_time_meas_us(&eNB->phy_proc_tx),
...@@ -3208,7 +3210,7 @@ int main(int argc, char **argv) ...@@ -3208,7 +3210,7 @@ int main(int argc, char **argv)
get_time_meas_us(&UE->dlsch_rx_pdcch_stats), get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
3*get_time_meas_us(&UE->dlsch_llr_stats), 3*get_time_meas_us(&UE->dlsch_llr_stats),
get_time_meas_us(&UE->dlsch_unscrambling_stats), get_time_meas_us(&UE->dlsch_unscrambling_stats),
get_time_meas_us(&UE->dlsch_decoding_stats[subframe&1]) get_time_meas_us(&UE->dlsch_decoding_stats[UE->current_thread_id[subframe]])
); );
//fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n"); //fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n");
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped); fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped);
...@@ -3248,7 +3250,7 @@ int main(int argc, char **argv) ...@@ -3248,7 +3250,7 @@ int main(int argc, char **argv)
UE->dlsch_rx_pdcch_stats.trials, UE->dlsch_rx_pdcch_stats.trials,
UE->dlsch_llr_stats.trials, UE->dlsch_llr_stats.trials,
UE->dlsch_unscrambling_stats.trials, UE->dlsch_unscrambling_stats.trials,
UE->dlsch_decoding_stats[subframe&1].trials); UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials);
*/ */
printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate ); printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate );
test_passed = 1; test_passed = 1;
......
This diff is collapsed.
This diff is collapsed.
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