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
ZhouShuya
OpenXG-RAN
Commits
af892cc0
Commit
af892cc0
authored
6 years ago
by
laurent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
start fixing parallel threads
parent
c1f7678e
Changes
13
Show 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>
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
);
}
...
...
This diff is collapsed.
Click to expand it.
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
;
}
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
,
(
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
printStatIndent
(
time_stats_t
*
ptr
,
char
*
txt
)
{
printf
(
"|__ %-
50s %.2f us (%
d trials)
\n
"
,
printf
(
"|__ %-
38s %6.2f us (%3
d trials)
\n
"
,
txt
,
ptr
->
trials
?
inMicroS
(
ptr
->
diff
/
ptr
->
trials
)
:
0
,
ptr
->
trials
);
}
void
printStatIndent2
(
time_stats_t
*
ptr
,
char
*
txt
,
int
turbo_iter
)
{
void
printStatIndent2
(
time_stats_t
*
ptr
,
char
*
txt
)
{
double
timeBase
=
1
/
(
1000
*
cpu_freq_GHz
);
printf
(
" |__ %-
45s %.2f us (cycles/block %ld, %5
d trials)
\n
"
,
printf
(
" |__ %-
34s %6.2f us (%3
d 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
);
}
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
)
{
void
printStatIndent3
(
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
?
((
double
)
ptr
->
diff
)
/
ptr
->
trials
*
timeBase
:
0
,
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
logDistribution
(
FILE
*
fd
,
time_stats_t
*
ptr
,
varArray_t
*
sortedList
,
int
dropped
)
{
fprintf
(
fd
,
"%f;%f;%f;%f;%f;%f;%d;"
,
squareRoot
(
ptr
),
...
...
This diff is collapsed.
Click to expand it.
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,7 +964,7 @@ int main(int argc, char **argv)
if
(
help
)
exit
(
0
);
set_parallel_conf
(
"PARALLEL_RU_L1_TRX_SPLIT"
);
if
(
thread_struct
.
parallel_conf
!=
PARALLEL_SINGLE_THREAD
)
set_worker_conf
(
"WORKER_ENABLE"
);
if
(
transmission_mode
>
1
)
pa
=
dBm3
;
...
...
@@ -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"
);
}
...
...
This diff is collapsed.
Click to expand it.
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,7 +600,7 @@ int main(int argc, char **argv) {
if
(
help
)
exit
(
0
);
set_parallel_conf
(
"PARALLEL_RU_L1_TRX_SPLIT"
);
if
(
thread_struct
.
parallel_conf
!=
PARALLEL_SINGLE_THREAD
)
set_worker_conf
(
"WORKER_ENABLE"
);
RC
.
nb_L1_inst
=
1
;
RC
.
nb_RU
=
1
;
...
...
@@ -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
,
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
);
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"
);
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
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
@@ -1320,11 +1318,6 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
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"
);
eNB
->
if_inst
->
schedule_response
=
schedule_response
;
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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