Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjie
OpenXG-RAN
Commits
af892cc0
Commit
af892cc0
authored
Nov 14, 2018
by
laurent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
start fixing parallel threads
parent
c1f7678e
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
151 additions
and
206 deletions
+151
-206
common/utils/LOG/log.c
common/utils/LOG/log.c
+0
-4
nfapi/oai_integration/nfapi_vnf.c
nfapi/oai_integration/nfapi_vnf.c
+1
-3
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+1
-1
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+9
-10
openair1/PHY/defs_common.h
openair1/PHY/defs_common.h
+46
-7
openair1/PHY/defs_eNB.h
openair1/PHY/defs_eNB.h
+1
-2
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+3
-1
openair1/SIMULATION/LTE_PHY/common_sim.h
openair1/SIMULATION/LTE_PHY/common_sim.h
+25
-17
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+29
-51
openair1/SIMULATION/LTE_PHY/ulsim.c
openair1/SIMULATION/LTE_PHY/ulsim.c
+31
-52
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+3
-10
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+1
-25
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+1
-23
No files found.
common/utils/LOG/log.c
View file @
af892cc0
...
...
@@ -39,10 +39,6 @@
#include "vcd_signal_dumper.h"
#include "assertions.h"
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
#endif
# include <pthread.h>
# include <string.h>
#include <linux/prctl.h>
...
...
nfapi/oai_integration/nfapi_vnf.c
View file @
af892cc0
...
...
@@ -196,14 +196,12 @@ void oai_create_enb(void) {
int
bodge_counter
=
0
;
PHY_VARS_eNB
*
eNB
=
RC
.
eNB
[
0
][
0
];
printf
(
"[VNF] RC.eNB[0][0]. Mod_id:%d CC_id:%d nb_CC[0]:%d abstraction_flag:%d single_thread_flag:%d
td:%p te:%p if_inst:%p
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
,
RC
.
nb_CC
[
0
],
eNB
->
abstraction_flag
,
eNB
->
single_thread_flag
,
eNB
->
td
,
eNB
->
te
,
eNB
->
if_inst
);
printf
(
"[VNF] RC.eNB[0][0]. Mod_id:%d CC_id:%d nb_CC[0]:%d abstraction_flag:%d single_thread_flag:%d
if_inst:%p
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
,
RC
.
nb_CC
[
0
],
eNB
->
abstraction_flag
,
eNB
->
single_thread_flag
,
eNB
->
if_inst
);
eNB
->
Mod_id
=
bodge_counter
;
eNB
->
CC_id
=
bodge_counter
;
eNB
->
abstraction_flag
=
0
;
eNB
->
single_thread_flag
=
0
;
//single_thread_flag;
eNB
->
td
=
ulsch_decoding_data_all
;
//(single_thread_flag==1) ? ulsch_decoding_data_2thread : ulsch_decoding_data;
eNB
->
te
=
dlsch_encoding_all
;
//(single_thread_flag==1) ? dlsch_encoding_2threads : dlsch_encoding;
RC
.
nb_CC
[
bodge_counter
]
=
1
;
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
af892cc0
...
...
@@ -1505,7 +1505,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
// Do ULSCH Decoding for data portion
ret
=
eNB
->
td
(
eNB
,
UE_id
,
harq_pid
,
llr8_flag
);
ret
=
ulsch_decoding_data_all
(
eNB
,
UE_id
,
harq_pid
,
llr8_flag
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0
+
harq_pid
,
0
);
...
...
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
View file @
af892cc0
...
...
@@ -1298,7 +1298,7 @@ void dlsch_channel_compensation(int **rxdataF_ext,
unsigned
short
rb
;
unsigned
char
aatx
,
aarx
,
symbol_mod
,
pilots
=
0
;
__m128i
*
dl_ch128
,
*
dl_ch128_2
,
*
dl_ch_mag128
,
*
dl_ch_mag128b
,
*
rxdataF128
,
*
rxdataF_comp128
,
*
rho128
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
,
QAM_amp128b
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
;
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
symbol
-
(
7
-
frame_parms
->
Ncp
)
:
symbol
;
...
...
@@ -1311,9 +1311,9 @@ void dlsch_channel_compensation(int **rxdataF_ext,
}
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antenna_ports_eNB
;
aatx
++
)
{
__m128i
QAM_amp128b
=
_mm_setzero_si128
();
if
(
mod_order
==
4
)
{
QAM_amp128
=
_mm_set1_epi16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128b
=
_mm_setzero_si128
();
}
else
if
(
mod_order
==
6
)
{
QAM_amp128
=
_mm_set1_epi16
(
QAM64_n1
);
//
QAM_amp128b
=
_mm_set1_epi16
(
QAM64_n2
);
...
...
@@ -1766,11 +1766,11 @@ void dlsch_channel_compensation_core(int **rxdataF_ext,
int
length_mod8
=
0
;
int
length2
;
__m128i
*
dl_ch128
,
*
dl_ch_mag128
,
*
dl_ch_mag128b
,
*
dl_ch128_2
,
*
rxdataF128
,
*
rxdataF_comp128
,
*
rho128
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
,
QAM_amp128b
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
;
int
aatx
=
0
,
aarx
=
0
;
for
(
aatx
=
0
;
aatx
<
n_tx
;
aatx
++
)
{
__m128i
QAM_amp128b
;
if
(
mod_order
==
4
)
{
QAM_amp128
=
_mm_set1_epi16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128b
=
_mm_setzero_si128
();
...
...
@@ -2158,7 +2158,7 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
__m128i
*
dl_ch0_128
,
*
dl_ch1_128
,
*
dl_ch_mag128
,
*
dl_ch_mag128b
,
*
rxdataF128
,
*
rxdataF_comp128
;
unsigned
char
aarx
=
0
,
symbol_mod
,
pilots
=
0
;
int
precoded_signal_strength
=
0
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
,
QAM_amp128b
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp128
;
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
symbol
-
(
7
-
frame_parms
->
Ncp
)
:
symbol
;
...
...
@@ -2167,10 +2167,9 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
//printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
__m128i
QAM_amp128b
=
_mm_setzero_si128
();
if
(
mod_order
==
4
)
{
QAM_amp128
=
_mm_set1_epi16
(
QAM16_n1
);
QAM_amp128b
=
_mm_setzero_si128
();
}
else
if
(
mod_order
==
6
)
{
QAM_amp128
=
_mm_set1_epi16
(
QAM64_n1
);
QAM_amp128b
=
_mm_set1_epi16
(
QAM64_n2
);
...
...
@@ -2621,7 +2620,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
int
**
rxdataF_comp0
=
pdsch_vars
->
rxdataF_comp0
;
int
**
rxdataF_comp1
=
pdsch_vars
->
rxdataF_comp1
[
harq_pid
][
round
];
unsigned
char
*
pmi_ext
=
pdsch_vars
->
pmi_ext
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp0_128
,
QAM_amp
0_128b
,
QAM_amp1_128
,
QAM_amp1_128b
;
__m128i
mmtmpD0
,
mmtmpD1
,
mmtmpD2
,
mmtmpD3
,
QAM_amp0_128
,
QAM_amp
1_128
;
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
symbol
-
(
7
-
frame_parms
->
Ncp
)
:
symbol
;
...
...
@@ -2632,17 +2631,17 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
// printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
__m128i
QAM_amp0_128b
=
_mm_setzero_si128
();
if
(
mod_order0
==
4
)
{
QAM_amp0_128
=
_mm_set1_epi16
(
QAM16_n1
);
QAM_amp0_128b
=
_mm_setzero_si128
();
}
else
if
(
mod_order0
==
6
)
{
QAM_amp0_128
=
_mm_set1_epi16
(
QAM64_n1
);
QAM_amp0_128b
=
_mm_set1_epi16
(
QAM64_n2
);
}
__m128i
QAM_amp1_128b
=
_mm_setzero_si128
();
if
(
mod_order1
==
4
)
{
QAM_amp1_128
=
_mm_set1_epi16
(
QAM16_n1
);
QAM_amp1_128b
=
_mm_setzero_si128
();
}
else
if
(
mod_order1
==
6
)
{
QAM_amp1_128
=
_mm_set1_epi16
(
QAM64_n1
);
QAM_amp1_128b
=
_mm_set1_epi16
(
QAM64_n2
);
...
...
openair1/PHY/defs_common.h
View file @
af892cc0
...
...
@@ -58,6 +58,7 @@
#include <math.h>
#include "common_lib.h"
#include "msc.h"
#include <common/utils/LOG/log.h>
//#include <complex.h>
...
...
@@ -862,22 +863,60 @@ typedef enum {
RESYNCH
=
4
}
UE_MODE_t
;
/// Threading Parameter
#define FOREACH_PARALLEL(GEN) \
GEN(PARALLEL_SINGLE_THREAD) \
GEN(PARALLEL_RU_L1_SPLIT) \
GEN(PARALLEL_RU_L1_TRX_SPLIT)
#define GENERATE_ENUM(N) N,
#define GENERATE_ENUMTXT(N) {(char*)#N, N},
typedef
enum
{
PARALLEL_SINGLE_THREAD
=
0
,
PARALLEL_RU_L1_SPLIT
=
1
,
PARALLEL_RU_L1_TRX_SPLIT
=
2
}
PARALLEL_CONF_t
;
FOREACH_PARALLEL
(
GENERATE_ENUM
)
}
PARALLEL_CONF_t
;
#define FOREACH_WORKER(GEN) GEN(WORKER_DISABLE) GEN(WORKER_ENABLE)
typedef
enum
{
WORKER_DISABLE
=
0
,
WORKER_ENABLE
=
1
FOREACH_WORKER
(
GENERATE_ENUM
)
}
WORKER_CONF_t
;
typedef
struct
THREAD_STRUCT_s
{
PARALLEL_CONF_t
parallel_conf
;
WORKER_CONF_t
worker_conf
;
}
THREAD_STRUCT
;
extern
THREAD_STRUCT
thread_struct
;
static
inline
void
set_parallel_conf
(
char
*
parallel_conf
)
{
mapping
config
[]
=
{
FOREACH_PARALLEL
(
GENERATE_ENUMTXT
)
{
NULL
,
-
1
}
};
thread_struct
.
parallel_conf
=
(
PARALLEL_CONF_t
)
map_str_to_int
(
config
,
parallel_conf
);
if
(
thread_struct
.
parallel_conf
==
-
1
)
{
LOG_E
(
ENB_APP
,
"Impossible value: %s
\n
"
,
parallel_conf
);
thread_struct
.
parallel_conf
=
PARALLEL_SINGLE_THREAD
;
}
}
static
inline
void
set_worker_conf
(
char
*
worker_conf
)
{
mapping
config
[]
=
{
FOREACH_WORKER
(
GENERATE_ENUMTXT
)
{
NULL
,
-
1
}
};
thread_struct
.
worker_conf
=
(
WORKER_CONF_t
)
map_str_to_int
(
config
,
worker_conf
);
if
(
thread_struct
.
worker_conf
==
-
1
)
{
LOG_E
(
ENB_APP
,
"Impossible value: %s
\n
"
,
worker_conf
);
thread_struct
.
worker_conf
=
WORKER_DISABLE
;
}
}
static
inline
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
)
{
return
thread_struct
.
parallel_conf
;
}
static
inline
WORKER_CONF_t
get_thread_worker_conf
(
void
)
{
return
thread_struct
.
worker_conf
;
}
typedef
enum
{
SF_DL
,
SF_UL
,
SF_S
}
lte_subframe_t
;
...
...
openair1/PHY/defs_eNB.h
View file @
af892cc0
...
...
@@ -904,8 +904,6 @@ typedef struct PHY_VARS_eNB_s {
/// Ethernet parameters for fronthaul interface
eth_params_t
eth_params
;
int
rx_total_gain_dB
;
int
(
*
td
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
UE_id
,
int
harq_pid
,
int
llr8_flag
);
int
(
*
te
)(
struct
PHY_VARS_eNB_s
*
,
uint8_t
*
,
uint8_t
,
LTE_eNB_DLSCH_t
*
,
int
,
uint8_t
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
);
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_eNB_s
*
eNB
);
uint8_t
local_flag
;
LTE_DL_FRAME_PARMS
frame_parms
;
...
...
@@ -1080,6 +1078,7 @@ typedef struct PHY_VARS_eNB_s {
time_stats_t
ofdm_mod_stats
;
time_stats_t
dlsch_common_and_dci
;
time_stats_t
dlsch_ue_specific
;
time_stats_t
dlsch_encoding_stats
;
time_stats_t
dlsch_modulation_stats
;
time_stats_t
dlsch_scrambling_stats
;
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
af892cc0
...
...
@@ -400,7 +400,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
start_meas
(
&
eNB
->
dlsch_encoding_stats
);
eNB
->
te
(
eNB
,
dlsch_encoding_all
(
eNB
,
dlsch_harq
->
pdu
,
dlsch_harq
->
pdsch_start
,
dlsch
,
...
...
@@ -582,6 +582,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
}
if
(
do_meas
==
1
)
stop_meas
(
&
eNB
->
dlsch_common_and_dci
);
if
(
do_meas
==
1
)
start_meas
(
&
eNB
->
dlsch_ue_specific
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX
,
0
);
...
...
@@ -649,6 +650,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PHICH
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX
+
(
eNB
->
CC_id
),
0
);
if
(
do_meas
==
1
)
stop_meas
(
&
eNB
->
dlsch_ue_specific
);
if
(
do_meas
==
1
)
stop_meas
(
&
eNB
->
phy_proc_tx
);
}
...
...
openair1/SIMULATION/LTE_PHY/common_sim.h
View file @
af892cc0
...
...
@@ -49,38 +49,46 @@ void sumUpStatsSlot(time_stats_t *res, time_stats_t src[RX_NB_TH][2], int lastAc
res
->
p_time
=
src
[
lastActive
][
last
].
p_time
;
}
void
printStatIndent
(
time_stats_t
*
ptr
,
char
*
txt
)
{
printf
(
"|__ %-50s %.2f us (%d trials)
\n
"
,
double
squareRoot
(
time_stats_t
*
ptr
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
return
sqrt
((
double
)
ptr
->
diff_square
*
pow
(
timeBase
,
2
)
/
ptr
->
trials
-
pow
((
double
)
ptr
->
diff
/
ptr
->
trials
*
timeBase
,
2
));
}
void
printDistribution
(
time_stats_t
*
ptr
,
varArray_t
*
sortedList
,
char
*
txt
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
printf
(
"%-43s %6.2f us (%d trials)
\n
"
,
txt
,
ptr
->
trials
?
inMicroS
(
ptr
->
diff
/
ptr
->
trials
)
:
0
,
(
double
)
ptr
->
diff
/
ptr
->
trials
*
timeBase
,
ptr
->
trials
);
printf
(
" Statistics std=%.2f, median=%.2f, q1=%.2f, q3=%.2f µs (on %ld trials)
\n
"
,
squareRoot
(
ptr
),
median
(
sortedList
),
q1
(
sortedList
),
q3
(
sortedList
),
sortedList
->
size
);
}
void
printStatIndent2
(
time_stats_t
*
ptr
,
char
*
txt
,
int
turbo_iter
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
printf
(
" |__ %-45s %.2f us (cycles/block %ld, %5d trials)
\n
"
,
void
printStatIndent
(
time_stats_t
*
ptr
,
char
*
txt
)
{
printf
(
"|__ %-38s %6.2f us (%3d trials)
\n
"
,
txt
,
ptr
->
trials
?
((
double
)
ptr
->
diff
)
/
ptr
->
trials
*
timeBase
:
0
,
turbo_iter
?
(
uint64_t
)
round
(((
double
)
ptr
->
diff
)
/
turbo_iter
)
:
0
,
ptr
->
trials
?
inMicroS
(
ptr
->
diff
/
ptr
->
trials
)
:
0
,
ptr
->
trials
);
}
double
squareRoot
(
time_stats_t
*
ptr
)
{
void
printStatIndent2
(
time_stats_t
*
ptr
,
char
*
txt
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
return
sqrt
((
double
)
ptr
->
diff_square
*
pow
(
timeBase
,
2
)
/
ptr
->
trials
-
pow
((
double
)
ptr
->
diff
/
ptr
->
trials
*
timeBase
,
2
));
printf
(
" |__ %-34s %6.2f us (%3d trials)
\n
"
,
txt
,
ptr
->
trials
?
((
double
)
ptr
->
diff
)
/
ptr
->
trials
*
timeBase
:
0
,
ptr
->
trials
);
}
void
print
Distribution
(
time_stats_t
*
ptr
,
varArray_t
*
sortedList
,
char
*
txt
)
{
void
print
StatIndent3
(
time_stats_t
*
ptr
,
char
*
txt
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
printf
(
"
%-50s :%.2f us (%
d trials)
\n
"
,
printf
(
"
|__ %-30s %6.2f us (%3
d trials)
\n
"
,
txt
,
(
double
)
ptr
->
diff
/
ptr
->
trials
*
timeBase
,
ptr
->
trials
);
printf
(
"|__ Statistics std=%.2f, median=%.2f, q1=%.2f, q3=%.2f µs (on %ld trials)
\n
"
,
squareRoot
(
ptr
),
median
(
sortedList
),
q1
(
sortedList
),
q3
(
sortedList
),
sortedList
->
size
);
ptr
->
trials
?
((
double
)
ptr
->
diff
)
/
ptr
->
trials
*
timeBase
:
0
,
ptr
->
trials
);
}
void
logDistribution
(
FILE
*
fd
,
time_stats_t
*
ptr
,
varArray_t
*
sortedList
,
int
dropped
)
{
fprintf
(
fd
,
"%f;%f;%f;%f;%f;%f;%d;"
,
squareRoot
(
ptr
),
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
af892cc0
...
...
@@ -85,30 +85,7 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for rx */
int
n_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
char
*
parallel_config
=
NULL
;
char
*
worker_config
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
void
set_parallel_conf
(
char
*
parallel_conf
)
{
if
(
strcmp
(
parallel_conf
,
"PARALLEL_SINGLE_THREAD"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_SINGLE_THREAD
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_SPLIT
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_TRX_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_TRX_SPLIT
;
printf
(
"[CONFIG] parallel conf is set to %d
\n
"
,
thread_struct
.
parallel_conf
);
}
void
set_worker_conf
(
char
*
worker_conf
)
{
if
(
strcmp
(
worker_conf
,
"WORKER_DISABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_DISABLE
;
else
if
(
strcmp
(
worker_conf
,
"WORKER_ENABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_ENABLE
;
printf
(
"[CONFIG] worker conf is set to %d
\n
"
,
thread_struct
.
worker_conf
);
}
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
)
{
return
thread_struct
.
parallel_conf
;
}
WORKER_CONF_t
get_thread_worker_conf
(
void
)
{
return
thread_struct
.
worker_conf
;
}
THREAD_STRUCT
thread_struct
;
int
emulate_rf
=
0
;
...
...
@@ -715,7 +692,7 @@ int main(int argc, char **argv)
DL_req
.
dl_config_request_body
.
dl_config_pdu_list
=
dl_config_pdu_list
;
TX_req
.
tx_request_body
.
tx_pdu_list
=
tx_pdu_list
;
set_parallel_conf
(
"PARALLEL_SINGLE_THREAD"
);
cpuf
=
cpu_freq_GHz
;
//signal(SIGSEGV, handler);
...
...
@@ -758,6 +735,7 @@ int main(int argc, char **argv)
{
"Subframe"
,
"subframe "
,
0
,
iptr
:&
subframe
,
defintval
:
7
,
TYPE_INT
,
0
},
{
"Trnti"
,
"rnti"
,
0
,
u16ptr
:&
n_rnti
,
defuintval
:
0x1234
,
TYPE_UINT16
,
0
},
{
"vi_mod"
,
"i_mod"
,
0
,
iptr
:
NULL
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Qparallel"
,
"Enable parallel execution"
,
0
,
strptr
:
NULL
,
defstrval
:
NULL
,
TYPE_STRING
,
0
},
{
"Performance"
,
"Display CPU perfomance of each L1 piece"
,
PARAMFLAG_BOOL
,
iptr
:&
print_perf
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"q_tx_port"
,
"Number of TX antennas ports used in eNB"
,
0
,
iptr
:
NULL
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"uEdual"
,
"Enables the Interference Aware Receiver for TM5 (default is normal receiver)"
,
0
,
iptr
:
NULL
,
defintval
:
0
,
TYPE_INT
,
0
},
...
...
@@ -965,6 +943,10 @@ int main(int argc, char **argv)
break
;
case
'Q'
:
set_parallel_conf
(
optarg
);
break
;
default:
printf
(
"Wrong option: %s
\n
"
,
long_options
[
option_index
].
name
);
exit
(
1
);
...
...
@@ -982,8 +964,8 @@ int main(int argc, char **argv)
if
(
help
)
exit
(
0
);
set_parallel_conf
(
"PARALLEL_RU_L1_TRX_SPLIT"
);
set_worker_conf
(
"WORKER_ENABLE"
);
if
(
thread_struct
.
parallel_conf
!=
PARALLEL_SINGLE_THREAD
)
set_worker_conf
(
"WORKER_ENABLE"
);
if
(
transmission_mode
>
1
)
pa
=
dBm3
;
printf
(
"dlsim: tmode %d, pa %d
\n
"
,
transmission_mode
,
pa
);
...
...
@@ -1079,11 +1061,7 @@ int main(int argc, char **argv)
ru
->
do_precoding
=
1
;
eNB
->
mac_enabled
=
1
;
if
(
two_thread_flag
==
0
)
{
eNB
->
te
=
dlsch_encoding
;
}
else
{
eNB
->
te
=
dlsch_encoding_2threads
;
if
(
get_thread_worker_conf
()
==
WORKER_ENABLE
)
{
extern
void
init_td_thread
(
PHY_VARS_eNB
*
);
extern
void
init_te_thread
(
PHY_VARS_eNB
*
);
init_td_thread
(
eNB
);
...
...
@@ -1442,6 +1420,8 @@ int main(int argc, char **argv)
reset_meas
(
&
eNB
->
dlsch_interleaving_stats
);
reset_meas
(
&
eNB
->
dlsch_rate_matching_stats
);
reset_meas
(
&
eNB
->
dlsch_turbo_encoding_stats
);
reset_meas
(
&
eNB
->
dlsch_common_and_dci
);
reset_meas
(
&
eNB
->
dlsch_ue_specific
);
for
(
int
i
=
0
;
i
<
RX_NB_TH
;
i
++
)
{
reset_meas
(
&
UE
->
phy_proc_rx
[
i
]);
// total UE rx
reset_meas
(
&
UE
->
ue_front_end_stat
[
i
]);
...
...
@@ -1783,9 +1763,6 @@ int main(int argc, char **argv)
}
if
(
UE
->
dlsch
[
UE
->
current_thread_id
[
subframe
]][
eNB_id
][
0
]
->
harq_ack
[
subframe
].
ack
==
1
)
{
avg_iter
+=
UE
->
dlsch
[
UE
->
current_thread_id
[
subframe
]][
eNB_id
][
0
]
->
last_iteration_cnt
;
...
...
@@ -2011,21 +1988,22 @@ int main(int argc, char **argv)
printf
(
"
\n
eNB TX function statistics (per 1ms subframe)
\n
"
);
printDistribution
(
&
eNB
->
phy_proc_tx
,
table_tx
,
"PHY proc tx"
);
printStatIndent
(
&
eNB
->
dlsch_common_and_dci
,
"DL common channels and dci time"
);
printStatIndent
(
&
eNB
->
dlsch_encoding_stats
,
"DLSCH encoding time"
);
printStatIndent2
(
&
eNB
->
dlsch_rate_matching_stats
,
"DLSCH rate matching time"
,
eNB
->
dlsch_rate_matching_stats
.
trials
);
printStatIndent2
(
&
eNB
->
dlsch_turbo_encoding_stats
,
"DLSCH turbo encoding time"
,
eNB
->
dlsch_turbo_encoding_stats
.
trials
);
printStatIndent2
(
&
eNB
->
dlsch_interleaving_stats
,
"DLSCH interleaving time"
,
eNB
->
dlsch_interleaving_stats
.
trials
);
printStatIndent
(
&
eNB
->
dlsch_scrambling_stats
,
"DLSCH scrambling time"
);
printStatIndent
(
&
eNB
->
dlsch_modulation_stats
,
"DLSCH modulation time"
);
printStatIndent
(
&
eNB
->
dlsch_ue_specific
,
"DL per ue part time"
);
printStatIndent2
(
&
eNB
->
dlsch_encoding_stats
,
"DLSCH encoding time"
);
printStatIndent3
(
&
eNB
->
dlsch_rate_matching_stats
,
"DLSCH rate matching time"
);
printStatIndent3
(
&
eNB
->
dlsch_turbo_encoding_stats
,
"DLSCH turbo encoding time"
);
printStatIndent3
(
&
eNB
->
dlsch_interleaving_stats
,
"DLSCH interleaving time"
);
printStatIndent2
(
&
eNB
->
dlsch_scrambling_stats
,
"DLSCH scrambling time"
);
printStatIndent2
(
&
eNB
->
dlsch_modulation_stats
,
"DLSCH modulation time"
);
printDistribution
(
&
eNB
->
ofdm_mod_stats
,
table_tx_ifft
,
"OFDM_mod (idft) time"
);
printf
(
"
\n
UE RX function statistics (per 1ms subframe)
\n
"
);
printDistribution
(
&
phy_proc_rx_tot
,
table_rx
,
"Total PHY proc rx"
);
printStatIndent
(
&
ue_front_end_tot
,
"Front end processing"
);
printStatIndent
(
&
dlsch_llr_tot
,
"rx_pdsch processing"
);
printStatIndent2
(
&
pdsch_procedures_tot
,
"pdsch processing"
,
pdsch_procedures_tot
.
trials
);
printStatIndent2
(
&
dlsch_procedures_tot
,
"dlsch processing"
,
dlsch_procedures_tot
.
trials
);
printStatIndent2
(
&
UE
->
crnti_procedures_stats
,
"C-RNTI processing"
,
UE
->
crnti_procedures_stats
.
trials
);
printStatIndent2
(
&
pdsch_procedures_tot
,
"pdsch processing"
);
printStatIndent2
(
&
dlsch_procedures_tot
,
"dlsch processing"
);
printStatIndent2
(
&
UE
->
crnti_procedures_stats
,
"C-RNTI processing"
);
printStatIndent
(
&
UE
->
ofdm_demod_stats
,
"ofdm demodulation"
);
printStatIndent
(
&
UE
->
dlsch_channel_estimation_stats
,
"DLSCH channel estimation time"
);
printStatIndent
(
&
UE
->
dlsch_freq_offset_estimation_stats
,
"DLSCH frequency offset estimation time"
);
...
...
@@ -2041,13 +2019,13 @@ int main(int argc, char **argv)
(
double
)
UE
->
dlsch_turbo_decoding_stats
.
diff
/
UE
->
dlsch_turbo_decoding_stats
.
trials
*
timeBase
,
(
int
)((
double
)
UE
->
dlsch_turbo_decoding_stats
.
diff
/
UE
->
dlsch_turbo_decoding_stats
.
trials
),
UE
->
dlsch_turbo_decoding_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_init_stats
,
"init"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_alpha_stats
,
"alpha"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_beta_stats
,
"beta"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_gamma_stats
,
"gamma"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_ext_stats
,
"ext"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_intl1_stats
,
"turbo internal interleaver"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_intl2_stats
,
"intl2+HardDecode+CRC"
,
UE
->
dlsch_tc_init_stats
.
trials
);
printStatIndent2
(
&
UE
->
dlsch_tc_init_stats
,
"init"
);
printStatIndent2
(
&
UE
->
dlsch_tc_alpha_stats
,
"alpha"
);
printStatIndent2
(
&
UE
->
dlsch_tc_beta_stats
,
"beta"
);
printStatIndent2
(
&
UE
->
dlsch_tc_gamma_stats
,
"gamma"
);
printStatIndent2
(
&
UE
->
dlsch_tc_ext_stats
,
"ext"
);
printStatIndent2
(
&
UE
->
dlsch_tc_intl1_stats
,
"turbo internal interleaver"
);
printStatIndent2
(
&
UE
->
dlsch_tc_intl2_stats
,
"intl2+HardDecode+CRC"
);
}
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
af892cc0
...
...
@@ -96,30 +96,7 @@ nfapi_tx_request_pdu_t tx_pdu_list[MAX_NUM_TX_REQUEST_PDU];
nfapi_tx_request_t
TX_req
;
Sched_Rsp_t
sched_resp
;
char
*
parallel_config
=
NULL
;
char
*
worker_config
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
void
set_parallel_conf
(
char
*
parallel_conf
)
{
if
(
strcmp
(
parallel_conf
,
"PARALLEL_SINGLE_THREAD"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_SINGLE_THREAD
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_SPLIT
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_TRX_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_TRX_SPLIT
;
printf
(
"[CONFIG] parallel conf is set to %d
\n
"
,
thread_struct
.
parallel_conf
);
}
void
set_worker_conf
(
char
*
worker_conf
)
{
if
(
strcmp
(
worker_conf
,
"WORKER_DISABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_DISABLE
;
else
if
(
strcmp
(
worker_conf
,
"WORKER_ENABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_ENABLE
;
printf
(
"[CONFIG] worker conf is set to %d
\n
"
,
thread_struct
.
worker_conf
);
}
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
)
{
return
thread_struct
.
parallel_conf
;
}
WORKER_CONF_t
get_thread_worker_conf
(
void
)
{
return
thread_struct
.
worker_conf
;
}
THREAD_STRUCT
thread_struct
;
void
fill_nfapi_ulsch_config_request
(
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
...
...
@@ -410,7 +387,6 @@ int main(int argc, char **argv) {
double
effective_rate
=
0
.
0
;
char
channel_model_input
[
10
]
=
{
0
};
static
int
max_turbo_iterations
=
4
;
static
int
parallel_flag
=
0
;
int
nb_rb_set
=
0
;
int
sf
;
static
int
threequarter_fs
=
0
;
...
...
@@ -428,6 +404,8 @@ int main(int argc, char **argv) {
TX_req
.
tx_request_body
.
tx_pdu_list
=
tx_pdu_list
;
cpu_freq_GHz
=
(
double
)
get_cpu_freq_GHz
();
cpuf
=
cpu_freq_GHz
;
set_parallel_conf
(
"PARALLEL_SINGLE_THREAD"
);
printf
(
"Detected cpu_freq %f GHz
\n
"
,
cpu_freq_GHz
);
AssertFatal
(
load_configmodule
(
argc
,
argv
)
!=
NULL
,
"cannot load configuration module, exiting
\n
"
);
...
...
@@ -455,7 +433,7 @@ int main(int argc, char **argv) {
{
"Doppler"
,
"Maximum doppler shift"
,
0
,
dblptr
:&
maxDoppler
,
defdblval
:
0
.
0
,
TYPE_DOUBLE
,
0
},
{
"Zdump"
,
"dump table"
,
PARAMFLAG_BOOL
,
iptr
:&
dump_table
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Forms"
,
"Display the soft scope"
,
PARAMFLAG_BOOL
,
iptr
:&
xforms
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Lparallel"
,
"Enable parallel execution"
,
PARAMFLAG_BOOL
,
iptr
:&
parallel_flag
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Lparallel"
,
"Enable parallel execution"
,
0
,
strptr
:
NULL
,
defstrval
:
NULL
,
TYPE_STRING
,
0
},
{
"Iterations"
,
"Number of iterations of turbo decoder"
,
0
,
iptr
:&
max_turbo_iterations
,
defintval
:
4
,
TYPE_INT
,
0
},
{
"Performance"
,
"Display CPU perfomance of each L1 piece"
,
PARAMFLAG_BOOL
,
iptr
:
NULL
,
defintval
:
0
,
TYPE_INT
,
0
},
{
"Q_cqi"
,
"Enable CQI"
,
PARAMFLAG_BOOL
,
iptr
:&
cqi_flag
,
defintval
:
0
,
TYPE_INT
,
0
},
...
...
@@ -600,6 +578,10 @@ int main(int argc, char **argv) {
opp_enabled
=
1
;
break
;
case
'L'
:
set_parallel_conf
(
optarg
);
break
;
default:
printf
(
"Wrong option: %s
\n
"
,
long_options
[
option_index
].
name
);
exit
(
1
);
...
...
@@ -618,8 +600,8 @@ int main(int argc, char **argv) {
if
(
help
)
exit
(
0
);
set_parallel_conf
(
"PARALLEL_RU_L1_TRX_SPLIT"
);
set_worker_conf
(
"WORKER_ENABLE"
);
if
(
thread_struct
.
parallel_conf
!=
PARALLEL_SINGLE_THREAD
)
set_worker_conf
(
"WORKER_ENABLE"
);
RC
.
nb_L1_inst
=
1
;
RC
.
nb_RU
=
1
;
lte_param_init
(
&
eNB
,
&
UE
,
&
ru
,
...
...
@@ -767,7 +749,7 @@ int main(int argc, char **argv) {
UE
->
ulsch
[
0
]
=
new_ue_ulsch
(
N_RB_DL
,
0
);
printf
(
"ULSCH %p
\n
"
,
UE
->
ulsch
[
0
]);
if
(
parallel_flag
==
1
)
{
if
(
get_thread_worker_conf
()
==
WORKER_ENABLE
)
{
extern
void
init_fep_thread
(
PHY_VARS_eNB
*
,
pthread_attr_t
*
);
extern
void
init_td_thread
(
PHY_VARS_eNB
*
);
init_fep_thread
(
eNB
,
NULL
);
...
...
@@ -1175,8 +1157,7 @@ int main(int argc, char **argv) {
}
start_meas
(
&
eNB
->
phy_proc_rx
);
ru
->
feprx
=
(
parallel_flag
==
1
)
?
ru_fep_full_2thread
:
fep_full
;
eNB
->
td
=
(
parallel_flag
==
1
)
?
ulsch_decoding_data_2thread
:
ulsch_decoding_data
;
ru
->
feprx
=
(
get_thread_worker_conf
()
==
WORKER_ENABLE
)
?
ru_fep_full_2thread
:
fep_full
;
ru
->
feprx
(
ru
);
phy_procedures_eNB_uespec_RX
(
eNB
,
proc_rxtx
);
stop_meas
(
&
eNB
->
phy_proc_rx
);
...
...
@@ -1377,20 +1358,18 @@ int main(int argc, char **argv) {
printStatIndent
(
&
UE
->
ulsch_rate_matching_stats
,
"ULSCH rate-matching time"
);
printStatIndent
(
&
UE
->
ulsch_interleaving_stats
,
"ULSCH sub-block interleaving"
);
printStatIndent
(
&
UE
->
ulsch_multiplexing_stats
,
"ULSCH multiplexing time"
);
printDistribution
(
&
eNB
->
phy_proc_rx
,
table_rx
,
"
\n
Total PHY proc rx subframe"
);
printDistribution
(
&
ru
->
ofdm_demod_stats
,
table_rx_fft
,
"OFDM_demod time"
);
printDistribution
(
&
eNB
->
ulsch_demodulation_stats
,
table_rx_demod
,
"ULSCH demodulation time"
);
printf
(
"ULSCH Decoding time (%.2f Mbit/s, avg iter %.2f) :%.2f us (%d trials, max %.2f)
\n
"
,
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
TBS
/
1000
.
0
,(
double
)
iter_trials
,
(
double
)
eNB
->
ulsch_decoding_stats
.
diff
/
eNB
->
ulsch_decoding_stats
.
trials
*
timeBase
,
eNB
->
ulsch_decoding_stats
.
trials
,
(
double
)
eNB
->
ulsch_decoding_stats
.
max
*
timeBase
);
printf
(
"|__ Statistics std: %.2fus median %.2fus q1 %.2fus q3 %.2fus
\n
"
,
squareRoot
(
&
eNB
->
ulsch_decoding_stats
),
median
(
table_rx_dec
),
q1
(
table_rx_dec
),
q3
(
table_rx_dec
));
printStatIndent
(
&
eNB
->
ulsch_deinterleaving_stats
,
"sub-block interleaving"
);
printStatIndent
(
&
eNB
->
ulsch_demultiplexing_stats
,
"sub-block demultiplexing"
);
printStatIndent
(
&
eNB
->
ulsch_rate_unmatching_stats
,
"sub-block rate-matching"
);
printf
(
"
\n
"
);
printDistribution
(
&
eNB
->
phy_proc_rx
,
table_rx
,
"Total PHY proc rx subframe"
);
printDistribution
(
&
ru
->
ofdm_demod_stats
,
table_rx_fft
,
"|__ OFDM_demod time"
);
printDistribution
(
&
eNB
->
ulsch_demodulation_stats
,
table_rx_demod
,
"|__ ULSCH demodulation time"
);
printDistribution
(
&
eNB
->
ulsch_decoding_stats
,
table_rx_dec
,
"|__ ULSCH Decoding time"
);
printf
(
" (%.2f Mbit/s, avg iter %.2f, max %.2f)
\n
"
,
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
TBS
/
1000
.
0
,
(
double
)
iter_trials
,
(
double
)
eNB
->
ulsch_decoding_stats
.
max
*
timeBase
);
printStatIndent2
(
&
eNB
->
ulsch_deinterleaving_stats
,
"sub-block interleaving"
);
printStatIndent2
(
&
eNB
->
ulsch_demultiplexing_stats
,
"sub-block demultiplexing"
);
printStatIndent2
(
&
eNB
->
ulsch_rate_unmatching_stats
,
"sub-block rate-matching"
);
printf
(
"|__ turbo_decoder(%d bits), avg iterations: %.1f %.2f us (%d cycles, %d trials)
\n
"
,
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
Cminus
?
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
Kminus
:
...
...
@@ -1399,13 +1378,13 @@ int main(int argc, char **argv) {
(
double
)
eNB
->
ulsch_turbo_decoding_stats
.
diff
/
eNB
->
ulsch_turbo_decoding_stats
.
trials
*
timeBase
,
(
int
)((
double
)
eNB
->
ulsch_turbo_decoding_stats
.
diff
/
eNB
->
ulsch_turbo_decoding_stats
.
trials
),
eNB
->
ulsch_turbo_decoding_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_init_stats
,
"init"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_alpha_stats
,
"alpha"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_beta_stats
,
"beta"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_gamma_stats
,
"gamma"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_ext_stats
,
"ext"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_intl1_stats
,
"turbo internal interleaver"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
2
(
&
eNB
->
ulsch_tc_intl2_stats
,
"intl2+HardDecode+CRC"
,
eNB
->
ulsch_tc_init_stats
.
trials
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_init_stats
,
"init"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_alpha_stats
,
"alpha"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_beta_stats
,
"beta"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_gamma_stats
,
"gamma"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_ext_stats
,
"ext"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_intl1_stats
,
"turbo internal interleaver"
);
printStatIndent
3
(
&
eNB
->
ulsch_tc_intl2_stats
,
"intl2+HardDecode+CRC"
);
}
if
(
abstx
)
{
//ABSTRACTION
...
...
targets/RT/USER/lte-enb.c
View file @
af892cc0
...
...
@@ -149,8 +149,6 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe);
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
void
wakeup_prach_eNB_br
(
PHY_VARS_eNB
*
eNB
,
RU_t
*
ru
,
int
frame
,
int
subframe
);
#endif
extern
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
);
extern
WORKER_CONF_t
get_thread_worker_conf
(
void
);
extern
uint8_t
nfapi_mode
;
extern
void
oai_subframe_ind
(
uint16_t
sfn
,
uint16_t
sf
);
...
...
@@ -855,9 +853,9 @@ static void* process_stats_thread(void* param) {
while
(
!
oai_exit
)
{
sleep
(
1
);
if
(
opp_enabled
==
1
)
{
if
(
eNB
->
td
)
print_meas
(
&
eNB
->
ulsch_decoding_stats
,
"ulsch_decoding"
,
NULL
,
NULL
);
if
(
eNB
->
te
)
{
if
(
eNB
->
ulsch_decoding_stats
.
trials
>
0
)
print_meas
(
&
eNB
->
ulsch_decoding_stats
,
"ulsch_decoding"
,
NULL
,
NULL
);
if
(
eNB
->
dlsch_encoding_stats
.
trials
>
0
)
{
print_meas
(
&
eNB
->
dlsch_turbo_encoding_preperation_stats
,
"dlsch_coding_crc"
,
NULL
,
NULL
);
print_meas
(
&
eNB
->
dlsch_turbo_encoding_segmentation_stats
,
"dlsch_segmentation"
,
NULL
,
NULL
);
print_meas
(
&
eNB
->
dlsch_encoding_stats
,
"dlsch_encoding"
,
NULL
,
NULL
);
...
...
@@ -1319,11 +1317,6 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
#ifndef OCP_FRAMEWORK
LOG_I
(
PHY
,
"Initializing eNB %d CC_id %d
\n
"
,
inst
,
CC_id
);
#endif
eNB
->
td
=
ulsch_decoding_data_all
;
eNB
->
te
=
dlsch_encoding_all
;
LOG_I
(
PHY
,
"Registering with MAC interface module
\n
"
);
AssertFatal
((
eNB
->
if_inst
=
IF_Module_init
(
inst
))
!=
NULL
,
"Cannot register interface"
);
...
...
targets/RT/USER/lte-softmodem.c
View file @
af892cc0
...
...
@@ -219,31 +219,7 @@ int numerology = 0;
char
*
parallel_config
=
NULL
;
char
*
worker_config
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
void
set_parallel_conf
(
char
*
parallel_conf
)
{
if
(
strcmp
(
parallel_conf
,
"PARALLEL_SINGLE_THREAD"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_SINGLE_THREAD
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_SPLIT
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_TRX_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_TRX_SPLIT
;
printf
(
"[CONFIG] parallel conf is set to %d
\n
"
,
thread_struct
.
parallel_conf
);
}
void
set_worker_conf
(
char
*
worker_conf
)
{
if
(
strcmp
(
worker_conf
,
"WORKER_DISABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_DISABLE
;
else
if
(
strcmp
(
worker_conf
,
"WORKER_ENABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_ENABLE
;
printf
(
"[CONFIG] worker conf is set to %d
\n
"
,
thread_struct
.
worker_conf
);
}
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
)
{
return
thread_struct
.
parallel_conf
;
}
WORKER_CONF_t
get_thread_worker_conf
(
void
)
{
return
thread_struct
.
worker_conf
;
}
THREAD_STRUCT
thread_struct
;
/* struct for ethernet specific parameters given in eNB conf file */
eth_params_t
*
eth_params
;
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
af892cc0
...
...
@@ -226,29 +226,7 @@ char *worker_config = NULL;
char
*
usrp_args
=
NULL
;
char
*
usrp_clksrc
=
NULL
;
static
THREAD_STRUCT
thread_struct
;
void
set_parallel_conf
(
char
*
parallel_conf
)
{
if
(
strcmp
(
parallel_conf
,
"PARALLEL_SINGLE_THREAD"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_SINGLE_THREAD
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_SPLIT
;
else
if
(
strcmp
(
parallel_conf
,
"PARALLEL_RU_L1_TRX_SPLIT"
)
==
0
)
thread_struct
.
parallel_conf
=
PARALLEL_RU_L1_TRX_SPLIT
;
printf
(
"[CONFIG] parallel conf is set to %d
\n
"
,
thread_struct
.
parallel_conf
);
}
void
set_worker_conf
(
char
*
worker_conf
)
{
if
(
strcmp
(
worker_conf
,
"WORKER_DISABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_DISABLE
;
else
if
(
strcmp
(
worker_conf
,
"WORKER_ENABLE"
)
==
0
)
thread_struct
.
worker_conf
=
WORKER_ENABLE
;
printf
(
"[CONFIG] worker conf is set to %d
\n
"
,
thread_struct
.
worker_conf
);
}
PARALLEL_CONF_t
get_thread_parallel_conf
(
void
)
{
return
thread_struct
.
parallel_conf
;
}
WORKER_CONF_t
get_thread_worker_conf
(
void
)
{
return
thread_struct
.
worker_conf
;
}
THREAD_STRUCT
thread_struct
;
/* struct for ethernet specific parameters given in eNB conf file */
eth_params_t
*
eth_params
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment