Commit 6551ec4c authored by ISIP CS/NCTU's avatar ISIP CS/NCTU

isip turbo decoder thread parallel according to code segment

parent ae0494b0
...@@ -29,6 +29,18 @@ ...@@ -29,6 +29,18 @@
* \note * \note
* \warning * \warning
*/ */
/*! \function isip_ulsch_decoding_data
* \brief Implementation of turbo decoder paralleling
* \author YT Liao (Yuan-Te), TY Hsu, TH Wang(Judy)
* \date 2019
* \version 0.1
* \company ISIP@NCTU and Eurecom
* \email: ytliao.cs97g@nctu.edu.tw, tyhsu@cs.nctu.edu.tw, Tsu-Han.Wang@eurecom.fr
* \note
* \warning
*/
#ifndef __LTE_TRANSPORT_PROTO__H__ #ifndef __LTE_TRANSPORT_PROTO__H__
#define __LTE_TRANSPORT_PROTO__H__ #define __LTE_TRANSPORT_PROTO__H__
#include "PHY/defs.h" #include "PHY/defs.h"
...@@ -1903,6 +1915,12 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB, ...@@ -1903,6 +1915,12 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,
int harq_pid, int harq_pid,
int llr8_flag); int llr8_flag);
int isip_ulsch_decoding_data(PHY_VARS_eNB *eNB,
int UE_id,
int harq_pid,
int llr8_flag,
int current_thread_num);
uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB, uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
eNB_rxtx_proc_t *proc, eNB_rxtx_proc_t *proc,
uint8_t UE_index, uint8_t UE_index,
......
This diff is collapsed.
...@@ -29,6 +29,17 @@ ...@@ -29,6 +29,17 @@
\note \note
\warning \warning
*/ */
/* \brief variable define for turbo decoder paralleling
* \author YT Liao (Yuan-Te), TY Hsu, TH Wang(Judy)
* \date 2019
* \version 0.1
* \company ISIP@NCTU and Eurecom
* \email: ytliao.cs97g@nctu.edu.tw, tyhsu@cs.nctu.edu.tw, Tsu-Han.Wang@eurecom.fr
* \note
* \warning
*/
#ifndef __PHY_DEFS__H__ #ifndef __PHY_DEFS__H__
#define __PHY_DEFS__H__ #define __PHY_DEFS__H__
...@@ -76,6 +87,7 @@ ...@@ -76,6 +87,7 @@
#define RX_NB_TH_MAX 2 #define RX_NB_TH_MAX 2
#define RX_NB_TH 2 #define RX_NB_TH 2
#define ISIP_TURBO_THREAD_NUM 13
//#ifdef SHRLIBDEV //#ifdef SHRLIBDEV
//extern int rxrescale; //extern int rxrescale;
...@@ -457,6 +469,24 @@ typedef struct { ...@@ -457,6 +469,24 @@ typedef struct {
UE_rxtx_proc_t proc_rxtx[RX_NB_TH]; UE_rxtx_proc_t proc_rxtx[RX_NB_TH];
} UE_proc_t; } UE_proc_t;
// ISIP TURBO THREAD
typedef struct
{
struct PHY_VARS_eNB_s *eNB;
int thread_id;
volatile int flag_wait;
volatile int flag_done;
pthread_t pthread_rx;
pthread_cond_t cond_rx;
pthread_mutex_t mutex_rx;
pthread_attr_t attr_turbo;
int UE_id;
int harq_pid;
int llr8_flag;
int ret;
//int current_cnt;
} isip_turbo;
/// Top-level PHY Data Structure for eNB /// Top-level PHY Data Structure for eNB
typedef struct PHY_VARS_eNB_s { typedef struct PHY_VARS_eNB_s {
/// Module ID indicator for this instance /// Module ID indicator for this instance
...@@ -653,13 +683,23 @@ typedef struct PHY_VARS_eNB_s { ...@@ -653,13 +683,23 @@ typedef struct PHY_VARS_eNB_s {
time_stats_t ulsch_deinterleaving_stats; time_stats_t ulsch_deinterleaving_stats;
time_stats_t ulsch_demultiplexing_stats; time_stats_t ulsch_demultiplexing_stats;
time_stats_t ulsch_llr_stats; time_stats_t ulsch_llr_stats;
time_stats_t ulsch_tc_init_stats; // time_stats_t ulsch_tc_init_stats;
time_stats_t ulsch_tc_alpha_stats; // time_stats_t ulsch_tc_alpha_stats;
time_stats_t ulsch_tc_beta_stats; // time_stats_t ulsch_tc_beta_stats;
time_stats_t ulsch_tc_gamma_stats; // time_stats_t ulsch_tc_gamma_stats;
time_stats_t ulsch_tc_ext_stats; // time_stats_t ulsch_tc_ext_stats;
time_stats_t ulsch_tc_intl1_stats; // time_stats_t ulsch_tc_intl1_stats;
time_stats_t ulsch_tc_intl2_stats; // time_stats_t ulsch_tc_intl2_stats;
time_stats_t ulsch_tc_init_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_alpha_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_beta_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_gamma_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_ext_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_intl1_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t ulsch_tc_intl2_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t isip_turbo_stats;
time_stats_t isip_ulsch_turbo_decoding_stats[ISIP_TURBO_THREAD_NUM];
time_stats_t isip_wait_loop;
#ifdef LOCALIZATION #ifdef LOCALIZATION
/// time state for localization /// time state for localization
...@@ -683,6 +723,9 @@ typedef struct PHY_VARS_eNB_s { ...@@ -683,6 +723,9 @@ typedef struct PHY_VARS_eNB_s {
/// Pointer for ifdevice buffer struct /// Pointer for ifdevice buffer struct
if_buffer_t ifbuffer; if_buffer_t ifbuffer;
//isip turbo thread
isip_turbo isip_turbo_thread[ISIP_TURBO_THREAD_NUM];
} PHY_VARS_eNB; } PHY_VARS_eNB;
#define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg #define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
...@@ -160,9 +160,10 @@ typedef enum { ...@@ -160,9 +160,10 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_END VCD_SIGNAL_DUMPER_VARIABLES_END
} vcd_signal_dump_variables; } vcd_signal_dump_variables;
typedef enum { typedef enum
{
/* softmodem signals */ /* softmodem signals */
VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP=0, VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP = 0,
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ,
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE,
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_IF, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_IF,
...@@ -185,7 +186,7 @@ typedef enum { ...@@ -185,7 +186,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1,
/* RRH signals */ /* RRH signals */
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX,
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX,
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TRX, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TRX,
...@@ -266,6 +267,32 @@ typedef enum { ...@@ -266,6 +267,32 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD0,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD1,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD2,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD3,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD4,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD5,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD6,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD7,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD8,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD9,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD10,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD11,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ISIP_THREAD12,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST0,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST1,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST2,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST3,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST4,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST5,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST6,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST7,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST8,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST9,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST10,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST11,
VCD_SIGNAL_DUMPER_FUNCTIONS_ISIP_THREAD_TEST12,
#if 1 // add for debugging losing PDSCH immediately before and after reporting CQI #if 1 // add for debugging losing PDSCH immediately before and after reporting CQI
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING_FILL_CQI, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING_FILL_CQI,
#endif #endif
...@@ -350,7 +377,7 @@ typedef enum { ...@@ -350,7 +377,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC, VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC,
VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_RELAY_THREAD, VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_RELAY_THREAD,
VCD_SIGNAL_DUMPER_FUNCTIONS_TEST, VCD_SIGNAL_DUMPER_FUNCTIONS_TEST,
/* IF4/IF5 signals */ /* IF4/IF5 signals */
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4,
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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