switch for parallel FEP on ulsim. Deactivated for real-time operation.

This commit is contained in:
Raymond Knopp
2016-08-07 19:25:50 +02:00
parent 5b9f4714a9
commit 12801c5991
5 changed files with 13 additions and 17 deletions
+4 -7
View File
@@ -2568,9 +2568,7 @@ static void *fep_thread(void *param) {
PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param; PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param;
eNB_proc_t *proc = &eNB->proc; eNB_proc_t *proc = &eNB->proc;
while (!oai_exit) { while (!oai_exit) {
printf("Waiting for parallel FEP signal\n");
if (wait_on_condition(&proc->mutex_fep,&proc->cond_fep,&proc->instance_cnt_fep,"fep thread")<0) break; if (wait_on_condition(&proc->mutex_fep,&proc->cond_fep,&proc->instance_cnt_fep,"fep thread")<0) break;
printf("Running parallel FEP on first slot\n");
fep0(eNB,0); fep0(eNB,0);
if (release_thread(&proc->mutex_fep,&proc->instance_cnt_fep,"fep thread")<0) break; if (release_thread(&proc->mutex_fep,&proc->instance_cnt_fep,"fep thread")<0) break;
} }
@@ -2601,8 +2599,6 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP,1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP,1);
start_meas(&eNB->ofdm_demod_stats); start_meas(&eNB->ofdm_demod_stats);
printf("Running 2 thread FEP\n");
if (pthread_mutex_timedlock(&proc->mutex_fep,&wait) != 0) { if (pthread_mutex_timedlock(&proc->mutex_fep,&wait) != 0) {
printf("[eNB] ERROR pthread_mutex_lock for fep thread %d (IC %d)\n", proc->instance_cnt_fep); printf("[eNB] ERROR pthread_mutex_lock for fep thread %d (IC %d)\n", proc->instance_cnt_fep);
exit_fun( "error locking mutex_fep" ); exit_fun( "error locking mutex_fep" );
@@ -2618,7 +2614,7 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
++proc->instance_cnt_fep; ++proc->instance_cnt_fep;
printf("[eNB] waking up FEP thread\n");
if (pthread_cond_signal(&proc->cond_fep) != 0) { if (pthread_cond_signal(&proc->cond_fep) != 0) {
printf("[eNB] ERROR pthread_cond_signal for fep thread\n"); printf("[eNB] ERROR pthread_cond_signal for fep thread\n");
exit_fun( "ERROR pthread_cond_signal" ); exit_fun( "ERROR pthread_cond_signal" );
@@ -2628,7 +2624,6 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
pthread_mutex_unlock( &proc->mutex_fep ); pthread_mutex_unlock( &proc->mutex_fep );
// call second slot in this symbol // call second slot in this symbol
printf("Calling FEP for 2nd slot\n");
fep0(eNB,1); fep0(eNB,1);
if (pthread_mutex_timedlock(&proc->mutex_fep,&wait) != 0) { if (pthread_mutex_timedlock(&proc->mutex_fep,&wait) != 0) {
@@ -2643,10 +2638,12 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
}; };
pthread_mutex_unlock( &proc->mutex_fep ); pthread_mutex_unlock( &proc->mutex_fep );
if (wait_cnt>10000) { if (wait_cnt>1000000) {
printf("[eNB] parallel FEP didn't finish\n"); printf("[eNB] parallel FEP didn't finish\n");
exit_fun( "error" ); exit_fun( "error" );
} }
stop_meas(&eNB->ofdm_demod_stats);
} }
void eNB_fep_full(PHY_VARS_eNB *eNB) { void eNB_fep_full(PHY_VARS_eNB *eNB) {
+1 -1
View File
@@ -13,7 +13,7 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should haeve received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not, included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>. see <http://www.gnu.org/licenses/>.
+4 -6
View File
@@ -85,8 +85,6 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int n_tx_dropped = 0; /*!< \brief initial max process time for tx */ int n_tx_dropped = 0; /*!< \brief initial max process time for tx */
int n_rx_dropped = 0; /*!< \brief initial max process time for rx */ int n_rx_dropped = 0; /*!< \brief initial max process time for rx */
int oai_exit = 0;
void fill_ulsch_dci(PHY_VARS_eNB *eNB,void *UL_dci,int first_rb,int nb_rb,int mcs,int ndi,int cqi_flag) { void fill_ulsch_dci(PHY_VARS_eNB *eNB,void *UL_dci,int first_rb,int nb_rb,int mcs,int ndi,int cqi_flag) {
@@ -276,7 +274,7 @@ int main(int argc, char **argv)
char channel_model_input[10]; char channel_model_input[10];
uint8_t max_turbo_iterations=4; uint8_t max_turbo_iterations=4;
uint8_t llr8_flag=0; uint8_t parallel_flag=0;
int nb_rb_set = 0; int nb_rb_set = 0;
int threequarter_fs=0; int threequarter_fs=0;
@@ -534,7 +532,7 @@ int main(int argc, char **argv)
break; break;
case 'L': case 'L':
llr8_flag=1; parallel_flag=1;
break; break;
case 'I': case 'I':
@@ -691,7 +689,7 @@ int main(int argc, char **argv)
eNB->ulsch[0] = new_eNB_ulsch(max_turbo_iterations,N_RB_DL,0); eNB->ulsch[0] = new_eNB_ulsch(max_turbo_iterations,N_RB_DL,0);
UE->ulsch[0] = new_ue_ulsch(N_RB_DL,0); UE->ulsch[0] = new_ue_ulsch(N_RB_DL,0);
init_fep_thread(eNB,&eNB->proc.attr_fep); if (parallel_flag == 1) init_fep_thread(eNB,&eNB->proc.attr_fep);
// Create transport channel structures for 2 transport blocks (MIMO) // Create transport channel structures for 2 transport blocks (MIMO)
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
@@ -1186,7 +1184,7 @@ int main(int argc, char **argv)
} }
eNB->fep = eNB_fep_full_2thread; eNB->fep = (parallel_flag == 1) ? eNB_fep_full_2thread : eNB_fep_full;
eNB->do_prach = NULL; eNB->do_prach = NULL;
phy_procedures_eNB_common_RX(eNB); phy_procedures_eNB_common_RX(eNB);
@@ -1,4 +1,5 @@
openair0_device openair0; openair0_device openair0;
int oai_exit=0;
void exit_fun(const char *s) { exit(-1); } void exit_fun(const char *s) { exit(-1); }
+3 -3
View File
@@ -1634,7 +1634,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
break; break;
case NGFI_RRU_IF4p5: case NGFI_RRU_IF4p5:
eNB->do_prach = do_prach; eNB->do_prach = do_prach;
eNB->fep = (eNB->single_thread_flag == 0) ? NB_fep_full : eNB_fep_full_2thread; eNB->fep = eNB_fep_full;
eNB->proc_uespec_rx = NULL; eNB->proc_uespec_rx = NULL;
eNB->proc_tx = NULL;//proc_tx_rru_if4p5; eNB->proc_tx = NULL;//proc_tx_rru_if4p5;
eNB->tx_fh = NULL; eNB->tx_fh = NULL;
@@ -1661,7 +1661,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
break; break;
case eNodeB_3GPP: case eNodeB_3GPP:
eNB->do_prach = do_prach; eNB->do_prach = do_prach;
eNB->fep = (eNB->single_thread_flag == 0) ? NB_fep_full : eNB_fep_full_2thread; eNB->fep = eNB_fep_full;
eNB->proc_uespec_rx = phy_procedures_eNB_uespec_RX; eNB->proc_uespec_rx = phy_procedures_eNB_uespec_RX;
eNB->proc_tx = proc_tx_full; eNB->proc_tx = proc_tx_full;
eNB->tx_fh = NULL; eNB->tx_fh = NULL;
@@ -1679,7 +1679,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
break; break;
case eNodeB_3GPP_BBU: case eNodeB_3GPP_BBU:
eNB->do_prach = do_prach; eNB->do_prach = do_prach;
eNB->fep = (eNB->single_thread_flag == 0) ? NB_fep_full : eNB_fep_full_2thread; eNB->fep = eNB_fep_full;
eNB->proc_uespec_rx = phy_procedures_eNB_uespec_RX; eNB->proc_uespec_rx = phy_procedures_eNB_uespec_RX;
eNB->proc_tx = proc_tx_full; eNB->proc_tx = proc_tx_full;
eNB->tx_fh = tx_fh_if5; eNB->tx_fh = tx_fh_if5;