Commit bc2a9318 authored by Gabriel's avatar Gabriel

ue fixes slot parallelisation

parent d951795a
...@@ -4773,15 +4773,15 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format, ...@@ -4773,15 +4773,15 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
uint8_t mcs1 = pdci_info_extarcted->mcs1; uint8_t mcs1 = pdci_info_extarcted->mcs1;
uint8_t TPC = pdci_info_extarcted->TPC; uint8_t TPC = pdci_info_extarcted->TPC;
uint8_t rah = pdci_info_extarcted->rah; uint8_t rah = pdci_info_extarcted->rah;
#ifdef DEBUG_DCI //#ifdef DEBUG_DCI
uint8_t rv1 = pdci_info_extarcted->rv1; uint8_t rv1 = pdci_info_extarcted->rv1;
uint8_t ndi1 = pdci_info_extarcted->ndi1; uint8_t ndi1 = pdci_info_extarcted->ndi1;
#endif //#endif
uint8_t NPRB = 0; uint8_t NPRB = 0;
long long int RIV_max = 0; long long int RIV_max = 0;
#ifdef DEBUG_DCI //#ifdef DEBUG_DCI
LOG_I(PHY,"[DCI-FORMAT-1-1A] AbsSubframe %d.%d dci_format %d\n", frame, subframe, dci_format); LOG_I(PHY,"[DCI-FORMAT-1-1A] AbsSubframe %d.%d dci_format %d\n", frame, subframe, dci_format);
LOG_I(PHY,"[DCI-FORMAT-1-1A] rnti %x\n", rnti); LOG_I(PHY,"[DCI-FORMAT-1-1A] rnti %x\n", rnti);
LOG_I(PHY,"[DCI-FORMAT-1-1A] harq_pid %d\n", harq_pid); LOG_I(PHY,"[DCI-FORMAT-1-1A] harq_pid %d\n", harq_pid);
...@@ -4791,7 +4791,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format, ...@@ -4791,7 +4791,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
LOG_I(PHY,"[DCI-FORMAT-1-1A] rv1 %d\n", rv1); LOG_I(PHY,"[DCI-FORMAT-1-1A] rv1 %d\n", rv1);
LOG_I(PHY,"[DCI-FORMAT-1-1A] ndi1 %d\n", ndi1); LOG_I(PHY,"[DCI-FORMAT-1-1A] ndi1 %d\n", ndi1);
LOG_I(PHY,"[DCI-FORMAT-1-1A] TPC %d\n", TPC); LOG_I(PHY,"[DCI-FORMAT-1-1A] TPC %d\n", TPC);
#endif //#endif
// I- check dci content minimum coherency // I- check dci content minimum coherency
if( ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) && harq_pid > 0) if( ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) && harq_pid > 0)
...@@ -5185,15 +5185,15 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -5185,15 +5185,15 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms,
if(symbol < (frame_parms->symbols_per_tti-1)) if(symbol < (frame_parms->symbols_per_tti-1))
pdsch_vars->llr_offset[symbol+1] = pdsch_vars->llr_offset[symbol] + llr_offset; pdsch_vars->llr_offset[symbol+1] = pdsch_vars->llr_offset[symbol] + llr_offset;
//LOG_I(PHY,"Granted Re subframe %d / symbol %d => %d (%d RBs)\n", subframe, symbol_mod, granted_re,dlsch0_harq->nb_rb); LOG_I(PHY,"Granted Re subframe %d / symbol %d => %d (%d RBs)\n", subframe, symbol_mod, granted_re,dlsch0_harq->nb_rb);
//LOG_I(PHY,"Pbch/PSS/SSS Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, pbch_pss_sss_re); LOG_I(PHY,"Pbch/PSS/SSS Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, pbch_pss_sss_re);
//LOG_I(PHY,"CRS Re Per PRB subframe %d / symbol %d => %d \n", subframe, symbol_mod, crs_re); LOG_I(PHY,"CRS Re Per PRB subframe %d / symbol %d => %d \n", subframe, symbol_mod, crs_re);
//LOG_I(PHY,"Data Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, data_re); LOG_I(PHY,"Data Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, data_re);
//LOG_I(PHY,"Data Re subframe %d-symbol %d => llr length %d, llr offset %d \n", subframe, symbol, LOG_I(PHY,"Data Re subframe %d-symbol %d => llr length %d, llr offset %d \n", subframe, symbol,
// pdsch_vars->llr_length[symbol], pdsch_vars->llr_offset[symbol]); pdsch_vars->llr_length[symbol], pdsch_vars->llr_offset[symbol]);
} }
} }
void prepare_dl_decoding_format1_1A(DCI_format_t dci_format, void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
...@@ -5267,6 +5267,7 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format, ...@@ -5267,6 +5267,7 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
else // format1 else // format1
{ {
NPRB = conv_nprb(rah, rballoc, N_RB_DL); NPRB = conv_nprb(rah, rballoc, N_RB_DL);
nb_rb_alloc = NPRB;
} }
pdlsch0->current_harq_pid = harq_pid; pdlsch0->current_harq_pid = harq_pid;
......
...@@ -4178,13 +4178,16 @@ void *UE_thread_fep_slot1(void *arg) { ...@@ -4178,13 +4178,16 @@ void *UE_thread_fep_slot1(void *arg) {
uint8_t l; uint8_t l;
uint8_t compute_llrs_slot1; uint8_t compute_llrs_slot1;
#ifdef UE_SLOT_PARALLELISATION
proc->instance_cnt_fep_slot1=-1; proc->instance_cnt_fep_slot1=-1;
#endif
while (!oai_exit) { while (!oai_exit) {
if (pthread_mutex_lock(&proc->mutex_fep_slot1) != 0) { if (pthread_mutex_lock(&proc->mutex_fep_slot1) != 0) {
LOG_E( PHY, "[SCHED][UE] error locking mutex for UE FEP Slo1\n" ); LOG_E( PHY, "[SCHED][UE] error locking mutex for UE FEP Slo1\n" );
exit_fun("nothing to add"); exit_fun("nothing to add");
} }
#ifdef UE_SLOT_PARALLELISATION
while (proc->instance_cnt_fep_slot1 < 0) { while (proc->instance_cnt_fep_slot1 < 0) {
// most of the time, the thread is waiting here // most of the time, the thread is waiting here
pthread_cond_wait( &proc->cond_fep_slot1, &proc->mutex_fep_slot1 ); pthread_cond_wait( &proc->cond_fep_slot1, &proc->mutex_fep_slot1 );
...@@ -4196,6 +4199,8 @@ void *UE_thread_fep_slot1(void *arg) { ...@@ -4196,6 +4199,8 @@ void *UE_thread_fep_slot1(void *arg) {
// Start Thread Processing // Start Thread Processing
LOG_I(PHY," [Th-Slave] ==> execute fep slot1 thread for AbsSubframe %d.%d \n", proc->frame_rx, proc->subframe_rx); LOG_I(PHY," [Th-Slave] ==> execute fep slot1 thread for AbsSubframe %d.%d \n", proc->frame_rx, proc->subframe_rx);
#endif
#if 1 #if 1
int frame_rx = proc->frame_rx; int frame_rx = proc->frame_rx;
int subframe_rx = proc->subframe_rx; int subframe_rx = proc->subframe_rx;
...@@ -4514,7 +4519,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4514,7 +4519,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
proc->dci_slot0_available=0; proc->dci_slot0_available=0;
proc->first_symbol_available=0; proc->first_symbol_available=0;
#ifdef UE_SLOT_PARALLELISATION
//LOG_I(PHY,"fep slot1 thread : instance_cnt %d \n", //LOG_I(PHY,"fep slot1 thread : instance_cnt %d \n",
// proc->instance_cnt_fep_slot1); // proc->instance_cnt_fep_slot1);
proc->instance_cnt_fep_slot1++; proc->instance_cnt_fep_slot1++;
...@@ -4531,41 +4536,42 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4531,41 +4536,42 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} }
AssertFatal(pthread_cond_signal(&proc->cond_fep_slot1) ==0 ,""); AssertFatal(pthread_cond_signal(&proc->cond_fep_slot1) ==0 ,"");
AssertFatal(pthread_mutex_unlock(&proc->mutex_fep_slot1) ==0,""); AssertFatal(pthread_mutex_unlock(&proc->mutex_fep_slot1) ==0,"");
#endif
/**** FFT Slot0 + Slot1 ****/ /**** FFT Slot0 + Slot1 ****/
// I- start main thread for FFT/ChanEst symbol: 0/1 --> 7 // I- start main thread for FFT/ChanEst symbol: 0/1 --> 7
// 1- perform FFT for pilot ofdm symbols first (ofdmSym7 ofdmSym4 or (ofdmSym6 ofdmSym3)) // 1- perform FFT for pilot ofdm symbols first (ofdmSym7 ofdmSym4 or (ofdmSym6 ofdmSym3))
//LOG_I(PHY,"FFT symbol %d slot %d \n",pilot0,slot1); LOG_I(PHY,"FFT symbol %d slot %d \n",pilot0,slot1);
front_end_fft(ue, front_end_fft(ue,
pilot0, pilot0,
slot1, slot1,
0, 0,
0); 0);
//LOG_I(PHY,"FFT symbol %d slot %d \n",pilot1,slot0); LOG_I(PHY,"FFT symbol %d slot %d \n",pilot1,slot0);
front_end_fft(ue, front_end_fft(ue,
pilot1, pilot1,
slot0, slot0,
0, 0,
0); 0);
//LOG_I(PHY,"ChanEst symbol %d slot %d\n",pilot1,slot0); LOG_I(PHY,"ChanEst symbol %d slot %d\n",pilot1,slot0);
front_end_chanEst(ue, front_end_chanEst(ue,
pilot1, pilot1,
slot0, slot0,
0); 0);
//LOG_I(PHY,"ChanEst symbol %d slot %d\n",pilot0,slot1); LOG_I(PHY,"ChanEst symbol %d slot %d\n",pilot0,slot1);
front_end_chanEst(ue, front_end_chanEst(ue,
pilot0, pilot0,
slot1, slot1,
0); 0);
proc->chan_est_pilot0_slot1_available = 1; proc->chan_est_pilot0_slot1_available = 1;
//LOG_I(PHY,"Set available channelEst to 1 AbsSubframe %d.%d \n",frame_rx,subframe_rx); LOG_I(PHY,"Set available channelEst to 1 AbsSubframe %d.%d \n",frame_rx,subframe_rx);
// 2- perform FFT for other ofdm symbols other than pilots // 2- perform FFT for other ofdm symbols other than pilots
for (l=first_ofdm_sym; l<=l2; l++) for (l=first_ofdm_sym; l<=l2; l++)
{ {
if( (l != pilot0) && (l != pilot1)) if( (l != pilot0) && (l != pilot1))
{ {
//LOG_I(PHY,"FFT symbol %d slot %d \n", l, slot0); LOG_I(PHY,"FFT symbol %d slot %d \n", l, slot0);
start_meas(&ue->ofdm_demod_stats); start_meas(&ue->ofdm_demod_stats);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
front_end_fft(ue, front_end_fft(ue,
...@@ -4583,7 +4589,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4583,7 +4589,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
{ {
if( (l != pilot0) && (l != pilot1)) if( (l != pilot0) && (l != pilot1))
{ {
//LOG_I(PHY,"ChanEst symbol %d slot %d\n",l,slot0); LOG_I(PHY,"ChanEst symbol %d slot %d\n",l,slot0);
front_end_chanEst(ue, front_end_chanEst(ue,
l, l,
slot0, slot0,
...@@ -4598,7 +4604,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4598,7 +4604,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
return(-1); return(-1);
} }
//LOG_I(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols); LOG_I(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
LOG_I(PHY,"Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx); LOG_I(PHY,"Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx);
proc->dci_slot0_available=1; proc->dci_slot0_available=1;
...@@ -4682,7 +4688,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4682,7 +4688,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#endif #endif
stop_meas(&ue->generic_stat); stop_meas(&ue->generic_stat);
printf("------Front-End PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); //printf("------Front-End PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
/**** End Subframe FFT-ChannelEst ****/ /**** End Subframe FFT-ChannelEst ****/
...@@ -4757,7 +4763,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4757,7 +4763,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} }
stop_meas(&ue->generic_stat); stop_meas(&ue->generic_stat);
printf("------LLR-Slot0 [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); //printf("------LLR-Slot0 [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
#if 1 #if 1
// start slave thread for Pdsch Procedure (slot1) // start slave thread for Pdsch Procedure (slot1)
...@@ -4828,7 +4834,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4828,7 +4834,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
wait++; wait++;
} }
stop_meas(&ue->generic_stat); stop_meas(&ue->generic_stat);
printf("------ Waiting for LLR-Slot1 [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); //printf("------ Waiting for LLR-Slot1 [SFN %d]: %5.2f ------\n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
LOG_I(PHY,"==> Start Turbo Decoder wait %d\n", wait); LOG_I(PHY,"==> Start Turbo Decoder wait %d\n", wait);
// Start Turbo decoder // Start Turbo decoder
...@@ -4888,7 +4894,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4888,7 +4894,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
abstraction_flag); abstraction_flag);
ue->dlsch_ra[eNB_id]->active = 0; ue->dlsch_ra[eNB_id]->active = 0;
} }
printf("------ Turbo Decoding [SFN %d]: %5.2f ------\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0)); //printf("------ Turbo Decoding [SFN %d]: %5.2f ------\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
/**** End Pdsch processing for this subframe ****/ /**** End Pdsch processing for this subframe ****/
...@@ -4926,7 +4932,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ...@@ -4926,7 +4932,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]); stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
printf("------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0)); //printf("------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
LOG_I(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); LOG_I(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
return (0); return (0);
......
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