|
World Ocean Simulation System (WOSS) library
|
Multi-threaded extension of WossManagerResDb. More...
#include <woss-manager.h>


Classes | |
| struct | ThreadCondSignal |
Public Member Functions | |
| WossManagerResDbMT () | |
| virtual | ~WossManagerResDbMT () override=default |
| virtual std::unique_ptr< Pressure > | getWossPressure (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, const Time &time_value) override |
| virtual std::unique_ptr< Pressure > | getWossPressure (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, double time_value) override |
| virtual std::unique_ptr< TimeArr > | getWossTimeArr (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, const Time &time_value) override |
| virtual std::unique_ptr< TimeArr > | getWossTimeArr (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, double time_value) override |
| virtual PressureVector | getWossPressure (const CoordZPairVect &coordinates, double start_frequency, double end_frequency, const Time &time_value) override |
| virtual PressureVector | getWossPressure (const CoordZPairVect &coordinates, double start_frequency, double end_frequency, double time_value) override |
| virtual TimeArrVector | getWossTimeArr (const CoordZPairVect &coordinates, double start_frequency, double end_frequency, const Time &time_value) override |
| virtual TimeArrVector | getWossTimeArr (const CoordZPairVect &coordinates, double start_frequency, double end_frequency, double time_value) override |
| void | setConcurrentThreads (unsigned int number) |
| unsigned int | getConcurrentThreads () const |
| void | setUseThreadPoolFlag (bool flag) |
| bool | getUseThreadPoolFlag () |
Public Member Functions inherited from woss::WossManagerResDb | |
| WossManagerResDb () | |
| virtual | ~WossManagerResDb () override=default |
| WossManagerResDb & | setWossDbManager (const std::shared_ptr< WossDbManager > &ptr) |
Public Member Functions inherited from woss::WossManager | |
| WossManager () | |
| virtual | ~WossManager ()=default |
| virtual std::shared_ptr< Woss > | getActiveWoss (const CoordZ &tx, const CoordZ &rx, double start_frequency, double end_frequency) |
| virtual WossManager & | eraseActiveWoss (const CoordZ &tx, const CoordZ &rx, double start_frequency, double end_frequency)=0 |
| virtual bool | reset ()=0 |
| virtual bool | timeEvolve (const Time &time_value)=0 |
| WossManager & | setWossCreator (const std::shared_ptr< WossCreator > &ptr) |
| void | setTimeEvolutionActiveFlag (bool flag) |
| void | setDebugFlag (bool flag) |
| std::shared_ptr< WossCreator > | getWossCreator () const |
| bool | getTimeEvolutionActiveFlag () const |
| bool | getDebugFlag () const |
Protected Types | |
| using | ActiveWoss = std::map< std::shared_ptr< Woss >, std::unique_ptr< ThreadCondSignal > > |
| using | AWIter = ActiveWoss::iterator |
| using | AWRIter = ActiveWoss::reverse_iterator |
| using | AWCIter = ActiveWoss::const_iterator |
| using | AWCRIter = ActiveWoss::const_reverse_iterator |
Protected Member Functions | |
| void | checkConcurrentThreads () |
Protected Member Functions inherited from woss::WossManagerResDb | |
| std::unique_ptr< TimeArr > | dbGetTimeArr (const CoordZ &tx, const CoordZ &rx, double frequency, const Time &time_value) const |
| void | dbInsertTimeArr (const CoordZ &tx, const CoordZ &rx, double frequency, const Time &time_value, const TimeArr &channel) const |
| std::unique_ptr< Pressure > | dbGetPressure (const CoordZ &tx, const CoordZ &rx, double frequency, const Time &time_value) const |
| void | dbInsertPressure (const CoordZ &tx, const CoordZ &rx, double frequency, const Time &time_value, const Pressure &press) const |
Protected Member Functions inherited from woss::WossManager | |
| virtual std::shared_ptr< Woss > | getWoss (const CoordZ &tx, const CoordZ &rx, double start_frequency, double end_frequency)=0 |
Protected Attributes | |
| unsigned int | max_thread_number |
| unsigned int | concurrent_threads |
| std::mutex | request_mutex |
| ActiveWoss | active_woss |
| bool | use_thread_pool |
Protected Attributes inherited from woss::WossManagerResDb | |
| std::shared_ptr< WossDbManager > | woss_db_manager |
Protected Attributes inherited from woss::WossManager | |
| std::shared_ptr< WossCreator > | woss_creator |
| bool | debug |
| bool | is_time_evolution_active |
Additional Inherited Members | |
Static Protected Attributes inherited from woss::WossManager | |
| static const Time | NO_EVOLUTION_TIME = {1, 1, 1901 , 1, 1, 1} |
Multi-threaded extension of WossManagerResDb.
WossManagerResDbMT is a multi-threaded extension of WossManagerResDb. It uses the std c++ multithread library. This class is optimized for multi-processor cpu.Don't use it if a multi-processor cpu is not installed. Please notice that simulation will suffer an heavy time penalty if a result db is used and Woss objects are not run. This is due to the thread creation and synchronization overhead. Therefore no multi-thread should be used when reading already computed channel simulator data.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
| WossManagerResDbMT::WossManagerResDbMT | ( | ) |
WossManagerResDbMT default constructor
References checkConcurrentThreads(), and max_thread_number.

|
overridevirtualdefault |
|
protected |
Sets concurrent_threads valid range
References concurrent_threads, woss::WossManager::debug, and max_thread_number.
Referenced by setConcurrentThreads(), and WossManagerResDbMT().
|
inline |
Gets the number of concurrent threads
References concurrent_threads.
|
inline |
Gets the usage of woss::ThreadPool flag, which configures the multithread operation
References use_thread_pool.
|
overridevirtual |
Returns a valid Pressure for given parameters
| tx | const reference to a valid CoordZ object ( transmitter ) |
| rx | const reference to a valid CoordZ object ( receiver ) |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | const reference to a valid Time object |
Reimplemented from woss::WossManagerResDb.
References active_woss, concurrent_threads, woss::WossManagerResDb::dbGetPressure(), woss::WossManagerResDb::dbInsertPressure(), woss::WossManager::debug, woss::CoordZ::getCartDistance(), woss::CoordZ::getDepth(), woss::WossManager::getWoss(), woss::WossManagerResDb::getWossPressure(), woss::Singleton< T >::instance(), woss::WossManager::is_time_evolution_active, woss::WossManager::NO_EVOLUTION_TIME, request_mutex, and woss::WossManager::woss_creator.
Referenced by getWossPressure(), getWossPressure(), and getWossPressure().

|
overridevirtual |
Returns a valid Pressure for given parameters
| tx | const reference to a valid CoordZ object ( transmitter ) |
| rx | const reference to a valid CoordZ object ( receiver ) |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | number of seconds after start time |
Reimplemented from woss::WossManager.
References woss::WossManager::debug, woss::CoordZ::getCartDistance(), getWossPressure(), woss::Singleton< T >::instance(), woss::Time::isValid(), woss::SimTime::start_time, and woss::WossManager::woss_creator.

|
overridevirtual |
Returns a valid vector of Pressure* for given parameters
| coordinates | const reference to a valid CoordZPairVect |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | const reference to a valid Time object |
Reimplemented from woss::WossManager.
References concurrent_threads, woss::WossManager::debug, getWossPressure(), woss::WossManager::getWossPressure(), woss::ThreadPool::submit(), and use_thread_pool.

|
overridevirtual |
Returns a valid vector of Pressure* for given parameters
| coordinates | const reference to a valid CoordZPairVect |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | number of seconds after start time |
Reimplemented from woss::WossManager.
References concurrent_threads, woss::WossManager::debug, woss::WossManager::getWossCreator(), getWossPressure(), woss::WossManager::getWossPressure(), woss::Time::isValid(), woss::SimTime::start_time, woss::ThreadPool::submit(), and use_thread_pool.

|
overridevirtual |
Returns a valid TimeArr for given parameters
| tx | const reference to a valid CoordZ object ( transmitter ) |
| rx | const reference to a valid CoordZ object ( receiver ) |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | const reference to a valid Time object |
Reimplemented from woss::WossManagerResDb.
References active_woss, concurrent_threads, woss::TimeArr::createImpulse(), woss::WossManagerResDb::dbGetTimeArr(), woss::WossManagerResDb::dbInsertTimeArr(), woss::WossManager::debug, woss::CoordZ::getCartDistance(), woss::CoordZ::getDepth(), woss::Coord::getGreatCircleDistance(), woss::WossManager::getWoss(), woss::WossManagerResDb::getWossTimeArr(), woss::Singleton< T >::instance(), woss::WossManager::is_time_evolution_active, woss::WossManager::NO_EVOLUTION_TIME, request_mutex, and woss::WossManager::woss_creator.
Referenced by getWossTimeArr(), getWossTimeArr(), and getWossTimeArr().

|
overridevirtual |
Returns a valid TimeArr for given parameters
| tx | const reference to a valid CoordZ object ( transmitter ) |
| rx | const reference to a valid CoordZ object ( receiver ) |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | number of seconds after start time |
Reimplemented from woss::WossManager.
References woss::TimeArr::createImpulse(), woss::WossManager::debug, woss::CoordZ::getCartDistance(), getWossTimeArr(), woss::Singleton< T >::instance(), woss::Time::isValid(), woss::SimTime::start_time, and woss::WossManager::woss_creator.

|
overridevirtual |
Returns a valid vector of TimeArr* for given parameters
| coordinates | const reference to a valid CoordZPairVect |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | const reference to a valid Time object |
Reimplemented from woss::WossManager.
References concurrent_threads, woss::WossManager::debug, getWossTimeArr(), woss::WossManager::getWossTimeArr(), woss::ThreadPool::submit(), and use_thread_pool.

|
overridevirtual |
Returns a valid vector of TimeArr* for given parameters
| coordinates | const reference to a valid CoordZPairVect |
| start_freq | start frequency [Hz] |
| end_freq | end frequency [Hz] |
| time_value | number of seconds after start time |
Reimplemented from woss::WossManager.
References concurrent_threads, woss::WossManager::debug, woss::WossManager::getWossCreator(), getWossTimeArr(), woss::WossManager::getWossTimeArr(), woss::Time::isValid(), woss::SimTime::start_time, woss::ThreadPool::submit(), and use_thread_pool.

|
inline |
Sets the number of concurrent threads. If number < 0 multi-threading is disabled. If number = 0 the thread number is automatically handled.
| number | number of concurrent threads |
References checkConcurrentThreads(), and concurrent_threads.

|
inline |
Sets the usage of woss::ThreadPool or std::async for multithread operation
| flag | true if woss::ThreadPool has to be used, false otherwise |
References use_thread_pool.
Referenced by WossBellhopTest::doRun().
|
protected |
Set of current active Woss objects
Referenced by getWossPressure(), and getWossTimeArr().
|
protected |
Max number of concurrent threads
Referenced by checkConcurrentThreads(), getConcurrentThreads(), getWossPressure(), getWossPressure(), getWossPressure(), getWossTimeArr(), getWossTimeArr(), getWossTimeArr(), and setConcurrentThreads().
|
protected |
Max number of created threads
Referenced by checkConcurrentThreads(), and WossManagerResDbMT().
|
protected |
Request mutex
Referenced by getWossPressure(), and getWossTimeArr().
|
protected |
Flag that configures multithread ops, either with woss::ThreadPool or with the usage of std::async
Referenced by getUseThreadPoolFlag(), getWossPressure(), getWossPressure(), getWossTimeArr(), getWossTimeArr(), and setUseThreadPoolFlag().