timing measure for full coding process
This commit is contained in:
@@ -680,6 +680,8 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
time_stats_t *i_stats)
|
||||
{
|
||||
|
||||
//start_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
|
||||
eNB_proc_t *proc = &eNB->proc;
|
||||
unsigned int G;
|
||||
@@ -701,6 +703,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
if (dlsch->harq_processes[harq_pid]->round == 0) { // this is a new packet
|
||||
|
||||
start_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
|
||||
// Add 24-bit crc (polynomial A) to payload
|
||||
crc = crc24a(a,
|
||||
A)>>8;
|
||||
@@ -710,7 +713,9 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
dlsch->harq_processes[harq_pid]->B = A+24;
|
||||
memcpy(dlsch->harq_processes[harq_pid]->b,a,(A/8)+4);
|
||||
stop_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
|
||||
|
||||
start_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
|
||||
if (lte_segmentation(dlsch->harq_processes[harq_pid]->b,
|
||||
dlsch->harq_processes[harq_pid]->c,
|
||||
dlsch->harq_processes[harq_pid]->B,
|
||||
@@ -722,8 +727,26 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
&dlsch->harq_processes[harq_pid]->F)<0)
|
||||
return(-1);
|
||||
|
||||
stop_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
|
||||
|
||||
|
||||
proc->tep[0].eNB = eNB;
|
||||
proc->tep[0].dlsch = dlsch;
|
||||
proc->tep[0].G = G;
|
||||
proc->tep[0].harq_pid = harq_pid;
|
||||
|
||||
proc->tep[1].eNB = eNB;
|
||||
proc->tep[1].dlsch = dlsch;
|
||||
proc->tep[1].G = G;
|
||||
proc->tep[1].harq_pid = harq_pid;
|
||||
|
||||
proc->tep[2].eNB = eNB;
|
||||
proc->tep[2].dlsch = dlsch;
|
||||
proc->tep[2].G = G;
|
||||
proc->tep[2].harq_pid = harq_pid;
|
||||
|
||||
start_meas(&eNB->dlsch_turbo_encoding_signal_stats);
|
||||
|
||||
pthread_mutex_lock( &proc->mutex_te[0] );
|
||||
if (proc->instance_cnt_te[0]==0) {
|
||||
printf("[eNB] TE thread busy\n");
|
||||
exit_fun("TE thread busy");
|
||||
@@ -733,11 +756,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
++proc->instance_cnt_te[0];
|
||||
|
||||
proc->tep[0].eNB = eNB;
|
||||
proc->tep[0].dlsch = dlsch;
|
||||
proc->tep[0].G = G;
|
||||
proc->tep[0].harq_pid = harq_pid;
|
||||
|
||||
// wakeup worker to do second half segments
|
||||
if (pthread_cond_signal(&proc->cond_te[0]) != 0) {
|
||||
printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
|
||||
@@ -748,6 +766,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
pthread_mutex_unlock( &proc->mutex_te[0] );
|
||||
////////////////////////////////////////////////////////////////
|
||||
pthread_mutex_lock( &proc->mutex_te[1] );
|
||||
if (proc->instance_cnt_te[1]==0) {
|
||||
printf("[eNB] TE thread busy\n");
|
||||
exit_fun("TE thread busy");
|
||||
@@ -757,11 +776,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
++proc->instance_cnt_te[1];
|
||||
|
||||
proc->tep[1].eNB = eNB;
|
||||
proc->tep[1].dlsch = dlsch;
|
||||
proc->tep[1].G = G;
|
||||
proc->tep[1].harq_pid = harq_pid;
|
||||
|
||||
// wakeup worker to do second half segments
|
||||
if (pthread_cond_signal(&proc->cond_te[1]) != 0) {
|
||||
printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
|
||||
@@ -773,6 +787,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
pthread_mutex_unlock( &proc->mutex_te[1] );
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
pthread_mutex_lock( &proc->mutex_te[2] );
|
||||
if (proc->instance_cnt_te[2]==0) {
|
||||
printf("[eNB] TE thread busy\n");
|
||||
exit_fun("TE thread busy");
|
||||
@@ -782,11 +797,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
|
||||
++proc->instance_cnt_te[2];
|
||||
|
||||
proc->tep[2].eNB = eNB;
|
||||
proc->tep[2].dlsch = dlsch;
|
||||
proc->tep[2].G = G;
|
||||
proc->tep[2].harq_pid = harq_pid;
|
||||
|
||||
// wakeup worker to do second half segments
|
||||
if (pthread_cond_signal(&proc->cond_te[2]) != 0) {
|
||||
printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
|
||||
@@ -797,6 +807,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
||||
pthread_mutex_unlock( &proc->mutex_te[2] );
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
stop_meas(&eNB->dlsch_turbo_encoding_signal_stats);
|
||||
start_meas(te_main_stats);
|
||||
for (r=(dlsch->harq_processes[harq_pid]->C>>2)*3; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
||||
|
||||
|
||||
@@ -1143,8 +1143,11 @@ typedef struct PHY_VARS_eNB_s {
|
||||
time_stats_t dlsch_modulation_stats;
|
||||
time_stats_t dlsch_scrambling_stats;
|
||||
time_stats_t dlsch_rate_matching_stats;
|
||||
time_stats_t dlsch_turbo_encoding_preperation_stats;
|
||||
time_stats_t dlsch_turbo_encoding_segmentation_stats;
|
||||
time_stats_t dlsch_turbo_encoding_stats;
|
||||
time_stats_t dlsch_turbo_encoding_waiting_stats;
|
||||
time_stats_t dlsch_turbo_encoding_signal_stats;
|
||||
time_stats_t dlsch_turbo_encoding_main_stats;
|
||||
time_stats_t dlsch_turbo_encoding_wakeup_stats0;
|
||||
time_stats_t dlsch_turbo_encoding_wakeup_stats1;
|
||||
|
||||
@@ -711,7 +711,10 @@ static void* process_stats_thread(void* param) {
|
||||
if (eNB->td) print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL);
|
||||
if (eNB->te)
|
||||
{
|
||||
print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_prepare",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_turbo_encoding_signal_stats,"coding_signal",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_turbo_encoding_main_stats,"coding_main",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_turbo_encoding_waiting_stats,"coding_wait",NULL,NULL);
|
||||
print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats0,"coding_worker_0",NULL,NULL);
|
||||
|
||||
Reference in New Issue
Block a user