@@ -305,39 +305,22 @@ class pdsch_processor_factory_sw : public pdsch_processor_factory
305305
306306class 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-
318308public:
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
373372class pdsch_processor_lite_factory_sw : public pdsch_processor_factory
0 commit comments