Skip to content

Commit 8e2fdbf

Browse files
xavierarteagacodebot
authored andcommitted
phy: make PDSCH DM-RS processor a thread local pool
1 parent 3ff4e5b commit 8e2fdbf

File tree

3 files changed

+35
-34
lines changed

3 files changed

+35
-34
lines changed

lib/phy/upper/channel_processors/channel_processor_factories.cpp

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -305,39 +305,22 @@ class pdsch_processor_factory_sw : public pdsch_processor_factory
305305

306306
class pdsch_processor_concurrent_factory_sw : public pdsch_processor_factory
307307
{
308-
private:
309-
std::shared_ptr<crc_calculator_factory> crc_factory;
310-
std::shared_ptr<ldpc_encoder_factory> encoder_factory;
311-
std::shared_ptr<ldpc_rate_matcher_factory> rate_matcher_factory;
312-
std::shared_ptr<pseudo_random_generator_factory> prg_factory;
313-
std::shared_ptr<channel_modulation_factory> modulator_factory;
314-
std::shared_ptr<dmrs_pdsch_processor_factory> dmrs_factory;
315-
task_executor& executor;
316-
std::shared_ptr<pdsch_processor_concurrent_impl::codeblock_processor_pool> cb_processor_pool;
317-
318308
public:
319-
pdsch_processor_concurrent_factory_sw(std::shared_ptr<crc_calculator_factory> crc_factory_,
320-
std::shared_ptr<ldpc_encoder_factory> encoder_factory_,
321-
std::shared_ptr<ldpc_rate_matcher_factory> rate_matcher_factory_,
309+
pdsch_processor_concurrent_factory_sw(std::shared_ptr<crc_calculator_factory> crc_factory,
310+
std::shared_ptr<ldpc_encoder_factory> encoder_factory,
311+
std::shared_ptr<ldpc_rate_matcher_factory> rate_matcher_factory,
322312
std::shared_ptr<pseudo_random_generator_factory> prg_factory_,
323-
std::shared_ptr<channel_modulation_factory> modulator_factory_,
324-
std::shared_ptr<dmrs_pdsch_processor_factory> dmrs_factory_,
313+
std::shared_ptr<channel_modulation_factory> modulator_factory,
314+
std::shared_ptr<dmrs_pdsch_processor_factory> dmrs_factory,
325315
task_executor& executor_,
326316
unsigned nof_concurrent_threads) :
327-
crc_factory(std::move(crc_factory_)),
328-
encoder_factory(std::move(encoder_factory_)),
329-
rate_matcher_factory(std::move(rate_matcher_factory_)),
330-
prg_factory(std::move(prg_factory_)),
331-
modulator_factory(std::move(modulator_factory_)),
332-
dmrs_factory(std::move(dmrs_factory_)),
333-
executor(executor_)
317+
prg_factory(std::move(prg_factory_)), executor(executor_)
334318
{
335319
srsran_assert(crc_factory, "Invalid CRC calculator factory.");
336320
srsran_assert(encoder_factory, "Invalid encoder factory.");
337321
srsran_assert(rate_matcher_factory, "Invalid rate matcher factory.");
338322
srsran_assert(prg_factory, "Invalid PRG factory.");
339323
srsran_assert(modulator_factory, "Invalid modulator factory.");
340-
srsran_assert(dmrs_factory, "Invalid DM-RS factory.");
341324
srsran_assert(nof_concurrent_threads > 1, "Number of concurrent threads must be greater than one.");
342325

343326
// Create vector of codeblock processors.
@@ -356,18 +339,34 @@ class pdsch_processor_concurrent_factory_sw : public pdsch_processor_factory
356339
// Create pool of codeblock processors. It is common for all PDSCH processors.
357340
cb_processor_pool =
358341
std::make_shared<pdsch_processor_concurrent_impl::codeblock_processor_pool>(std::move(cb_processors));
342+
343+
// Create vector of PDSCH DM-RS generators.
344+
std::vector<std::unique_ptr<dmrs_pdsch_processor>> dmrs_generators;
345+
for (unsigned i_encoder = 0; i_encoder != nof_concurrent_threads; ++i_encoder) {
346+
dmrs_generators.emplace_back(dmrs_factory->create());
347+
}
348+
349+
// Create pool of PDSCH DM-RS generators. It is common for all PDSCH processors.
350+
dmrs_generator_pool =
351+
std::make_shared<pdsch_processor_concurrent_impl::pdsch_dmrs_generator_pool>(std::move(dmrs_generators));
359352
}
360353

361354
std::unique_ptr<pdsch_processor> create() override
362355
{
363356
return std::make_unique<pdsch_processor_concurrent_impl>(
364-
cb_processor_pool, prg_factory->create(), dmrs_factory->create(), executor);
357+
cb_processor_pool, prg_factory->create(), dmrs_generator_pool, executor);
365358
}
366359

367360
std::unique_ptr<pdsch_pdu_validator> create_validator() override
368361
{
369362
return std::make_unique<pdsch_processor_validator_impl>();
370363
}
364+
365+
private:
366+
std::shared_ptr<pseudo_random_generator_factory> prg_factory;
367+
task_executor& executor;
368+
std::shared_ptr<pdsch_processor_concurrent_impl::codeblock_processor_pool> cb_processor_pool;
369+
std::shared_ptr<pdsch_processor_concurrent_impl::pdsch_dmrs_generator_pool> dmrs_generator_pool;
371370
};
372371

373372
class pdsch_processor_lite_factory_sw : public pdsch_processor_factory

lib/phy/upper/channel_processors/pdsch_processor_concurrent_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ void pdsch_processor_concurrent_impl::process_dmrs()
382382
dmrs_config.precoding = config.precoding;
383383

384384
// Put DM-RS.
385-
dmrs->map(*mapper, dmrs_config);
385+
dmrs_generator_pool->get().map(*mapper, dmrs_config);
386386

387387
// Decrement asynchronous task counter.
388388
if (async_task_counter.fetch_sub(1) == 1) {

lib/phy/upper/channel_processors/pdsch_processor_concurrent_impl.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,28 @@ class pdsch_processor_concurrent_impl : public pdsch_processor
2727
public:
2828
/// Codeblock processor pool type.
2929
using codeblock_processor_pool = concurrent_thread_local_object_pool<pdsch_codeblock_processor>;
30+
/// PDSCH DM-RS generator pool type.
31+
using pdsch_dmrs_generator_pool = concurrent_thread_local_object_pool<dmrs_pdsch_processor>;
3032

3133
/// \brief Creates a concurrent PDSCH processor with all the dependencies.
3234
/// \param[in] segmenter_ LDPC transmitter segmenter.
3335
/// \param[in] cb_processor_pool_ Codeblock processor pool.
3436
/// \param[in] scrambler_ Scrambling pseudo-random generator.
3537
/// \param[in] dmrs_ DM-RS for PDSCH generator.
3638
/// \param[in] executor_ Asynchronous task executor.
37-
pdsch_processor_concurrent_impl(std::shared_ptr<codeblock_processor_pool> cb_processor_pool_,
38-
std::unique_ptr<pseudo_random_generator> scrambler_,
39-
std::unique_ptr<dmrs_pdsch_processor> dmrs_,
40-
task_executor& executor_) :
39+
pdsch_processor_concurrent_impl(std::shared_ptr<codeblock_processor_pool> cb_processor_pool_,
40+
std::unique_ptr<pseudo_random_generator> scrambler_,
41+
std::shared_ptr<pdsch_dmrs_generator_pool> dmrs_generator_pool_,
42+
task_executor& executor_) :
4143
scrambler(std::move(scrambler_)),
4244
cb_processor_pool(std::move(cb_processor_pool_)),
43-
dmrs(std::move(dmrs_)),
45+
dmrs_generator_pool(std::move(dmrs_generator_pool_)),
4446
executor(executor_),
4547
temp_codeword(pdsch_constants::CODEWORD_MAX_SYMBOLS)
4648
{
47-
srsran_assert(scrambler != nullptr, "Invalid scrambler pointer.");
48-
srsran_assert(cb_processor_pool != nullptr, "Invalid CB processor pool pointer.");
49-
srsran_assert(dmrs != nullptr, "Invalid DM-RS pointer.");
49+
srsran_assert(scrambler, "Invalid scrambler pointer.");
50+
srsran_assert(cb_processor_pool, "Invalid CB processor pool pointer.");
51+
srsran_assert(dmrs_generator_pool, "Invalid DM-RS pointer.");
5052
}
5153

5254
// See interface for documentation.
@@ -91,7 +93,7 @@ class pdsch_processor_concurrent_impl : public pdsch_processor
9193
/// Pool of code block processors.
9294
std::shared_ptr<codeblock_processor_pool> cb_processor_pool;
9395
/// DM-RS processor.
94-
std::unique_ptr<dmrs_pdsch_processor> dmrs;
96+
std::shared_ptr<pdsch_dmrs_generator_pool> dmrs_generator_pool;
9597
/// Asynchronous task executor.
9698
task_executor& executor;
9799

0 commit comments

Comments
 (0)