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
alex037yang
OpenXG-RAN
Commits
c2d0eb7d
Commit
c2d0eb7d
authored
Feb 18, 2018
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
enabling multi-thread encoder. To be tested.
parent
5e732df7
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
168 additions
and
101 deletions
+168
-101
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+168
-101
No files found.
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
c2d0eb7d
...
...
@@ -288,14 +288,16 @@ int dlsch_encoding_2threads0(te_params *tep) {
unsigned
short
iind
;
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
,
Kr_int
=
0
;
uint8_t
*
d_tmp
[
MAX_NUM_DLSCH_SEGMENTS
];
// unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING_W
,
VCD_FUNCTION_IN
);
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
round
==
0
)
{
// this is a new packet
#ifdef TD_DECODING
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
current_worker
;
r
<
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
(
current_worker
+
1
);
r
++
)
{
if
(
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
Cminus
)
...
...
@@ -333,6 +335,30 @@ int dlsch_encoding_2threads0(te_params *tep) {
&
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
][
96
],
dlsch
->
harq_processes
[
harq_pid
]
->
w
[
r
]);
}
#else
Kr
=
dlsch
->
harq_processes
[
harq_pid
]
->
Kplus
;
//workaround for nr ldpc using lte interleaving
Kr_bytes
=
Kr
>>
3
;
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
>=
2
)
Kr_int
=
G
/
(
3
*
dlsch
->
harq_processes
[
harq_pid
]
->
C
);
else
Kr_int
=
Kr
;
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
current_worker
;
r
<
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
(
current_worker
+
1
);
r
++
)
{
memset
(
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
0
,(
96
+
12
+
3
+
3
*
8448
)
*
sizeof
(
uint8_t
));
d_tmp
[
r
]
=
&
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
][
96
];
}
ldpc_encoder_optim_8seg
(
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
d_tmp
,
Kr
,
1
,
3
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
NULL
,
NULL
,
NULL
,
NULL
);
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
current_worker
;
r
<
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
total_worker
+
1
))
*
(
current_worker
+
1
);
r
++
)
{
dlsch
->
harq_processes
[
harq_pid
]
->
RTC
[
r
]
=
sub_block_interleaving_turbo
((
Kr_int
),
&
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
][
96
],
dlsch
->
harq_processes
[
harq_pid
]
->
w
[
r
]);
}
#endif
}
...
...
@@ -439,9 +465,10 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
subframe
];
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
A
;
unsigned
int
A
,
Z
;
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
,
Kr_int
=
0
;
uint8_t
*
d_tmp
[
MAX_NUM_DLSCH_SEGMENTS
];
// unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
...
...
@@ -466,6 +493,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
//stop_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
start_meas
(
&
eNB
->
dlsch_turbo_encoding_segmentation_stats
);
#ifdef TD_DECODING
if
(
lte_segmentation
(
dlsch
->
harq_processes
[
harq_pid
]
->
b
,
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
dlsch
->
harq_processes
[
harq_pid
]
->
B
,
...
...
@@ -476,6 +504,17 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
&
dlsch
->
harq_processes
[
harq_pid
]
->
Kminus
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
F
)
<
0
)
return
(
-
1
);
#else
nr_segmentation
(
dlsch
->
harq_processes
[
harq_pid
]
->
b
,
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
dlsch
->
harq_processes
[
harq_pid
]
->
B
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
Kplus
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
Kminus
,
&
Z
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
F
);
#endif
stop_meas
(
&
eNB
->
dlsch_turbo_encoding_segmentation_stats
);
...
...
@@ -510,6 +549,8 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
}
stop_meas
(
&
eNB
->
dlsch_turbo_encoding_signal_stats
);
#ifdef TD_DECODING
start_meas
(
te_main_stats
);
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
worker_num
+
1
))
*
worker_num
;
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
r
++
)
{
...
...
@@ -552,6 +593,35 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
dlsch
->
harq_processes
[
harq_pid
]
->
w
[
r
]);
stop_meas
(
i_stats
);
}
#else
Kr
=
dlsch
->
harq_processes
[
harq_pid
]
->
Kplus
;
//workaround for nr ldpc using lte interleaving
Kr_bytes
=
Kr
>>
3
;
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
>=
2
)
Kr_int
=
G
/
(
3
*
dlsch
->
harq_processes
[
harq_pid
]
->
C
);
else
Kr_int
=
Kr
;
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
worker_num
+
1
))
*
worker_num
;
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
r
++
)
{
memset
(
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
0
,(
96
+
12
+
3
+
3
*
8448
)
*
sizeof
(
uint8_t
));
d_tmp
[
r
]
=
&
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
][
96
];
}
start_meas
(
te_stats
);
ldpc_encoder_optim_8seg
(
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
d_tmp
,
Kr
,
1
,
3
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
NULL
,
NULL
,
NULL
,
NULL
);
stop_meas
(
te_stats
);
start_meas
(
i_stats
);
for
(
r
=
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
/
(
worker_num
+
1
))
*
worker_num
;
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
r
++
)
{
dlsch
->
harq_processes
[
harq_pid
]
->
RTC
[
r
]
=
sub_block_interleaving_turbo
((
Kr_int
),
&
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
][
96
],
dlsch
->
harq_processes
[
harq_pid
]
->
w
[
r
]);
}
stop_meas
(
i_stats
);
#endif
}
else
{
...
...
@@ -652,10 +722,9 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
time_stats_t
*
i_stats
)
{
int
encoding_return
=
0
;
/*
unsigned
int
L
,
C
,
B
;
B
=
dlsch
->
harq_processes
[
dlsch
->
harq_ids
[
subframe
]]
->
B
;
if(B<=6144
)
if
(
B
<=
8448
)
{
L
=
0
;
C
=
1
;
...
...
@@ -663,14 +732,14 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
else
{
L
=
24
;
C = B/(6144
-L);
if((6144
-L)*C < B)
C
=
B
/
(
8448
-
L
);
if
((
8448
-
L
)
*
C
<
B
)
{
C
=
C
+
1
;
}
}
if(C >= 8 && get_nprocs()>
8 && codingw)//one main three worker
if
(
C
>=
8
&&
get_nprocs
()
>=
8
&&
codingw
)
//one main three worker
{
encoding_return
=
dlsch_encoding_2threads
(
eNB
,
...
...
@@ -726,7 +795,6 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
}
else
{
*/
encoding_return
=
dlsch_encoding
(
eNB
,
a
,
...
...
@@ -737,7 +805,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
rm_stats
,
te_stats
,
i_stats
);
//
}
}
return
encoding_return
;
}
...
...
@@ -763,7 +831,6 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
subframe
];
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
A
,
Z
;
unsigned
*
pz
=
&
Z
;
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
,
Kr_int
=
0
;
// unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
...
...
@@ -829,7 +896,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
&
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
Kplus
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
Kminus
,
pz
,
&
Z
,
&
dlsch
->
harq_processes
[
harq_pid
]
->
F
);
#endif
...
...
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