World Ocean Simulation System (WOSS) library
woss::WossManagerResDbMT Class Reference

Multi-threaded extension of WossManagerResDb. More...

#include <woss-manager.h>

Inheritance diagram for woss::WossManagerResDbMT:
Inheritance graph
Collaboration diagram for woss::WossManagerResDbMT:
Collaboration graph

Classes

struct  ThreadCondSignal
 

Public Member Functions

 WossManagerResDbMT ()
 
virtual ~WossManagerResDbMT () override=default
 
virtual std::unique_ptr< PressuregetWossPressure (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, const Time &time_value) override
 
virtual std::unique_ptr< PressuregetWossPressure (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, double time_value) override
 
virtual std::unique_ptr< TimeArrgetWossTimeArr (const CoordZ &tx_coordz, const CoordZ &rx_coordz, double start_frequency, double end_frequency, const Time &time_value) override
 
virtual std::unique_ptr< TimeArrgetWossTimeArr (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
 
WossManagerResDbsetWossDbManager (const std::shared_ptr< WossDbManager > &ptr)
 
- Public Member Functions inherited from woss::WossManager
 WossManager ()
 
virtual ~WossManager ()=default
 
virtual std::shared_ptr< WossgetActiveWoss (const CoordZ &tx, const CoordZ &rx, double start_frequency, double end_frequency)
 
virtual WossManagereraseActiveWoss (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
 
WossManagersetWossCreator (const std::shared_ptr< WossCreator > &ptr)
 
void setTimeEvolutionActiveFlag (bool flag)
 
void setDebugFlag (bool flag)
 
std::shared_ptr< WossCreatorgetWossCreator () 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< TimeArrdbGetTimeArr (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< PressuredbGetPressure (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< WossgetWoss (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< WossDbManagerwoss_db_manager
 
- Protected Attributes inherited from woss::WossManager
std::shared_ptr< WossCreatorwoss_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}
 

Detailed Description

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.

Member Typedef Documentation

◆ ActiveWoss

using woss::WossManagerResDbMT::ActiveWoss = std::map< std::shared_ptr<Woss>, std::unique_ptr<ThreadCondSignal> >
protected

◆ AWCIter

using woss::WossManagerResDbMT::AWCIter = ActiveWoss::const_iterator
protected

◆ AWCRIter

using woss::WossManagerResDbMT::AWCRIter = ActiveWoss::const_reverse_iterator
protected

◆ AWIter

using woss::WossManagerResDbMT::AWIter = ActiveWoss::iterator
protected

◆ AWRIter

using woss::WossManagerResDbMT::AWRIter = ActiveWoss::reverse_iterator
protected

Constructor & Destructor Documentation

◆ WossManagerResDbMT()

WossManagerResDbMT::WossManagerResDbMT ( )

WossManagerResDbMT default constructor

References checkConcurrentThreads(), and max_thread_number.

Here is the call graph for this function:

◆ ~WossManagerResDbMT()

virtual woss::WossManagerResDbMT::~WossManagerResDbMT ( )
overridevirtualdefault

Member Function Documentation

◆ checkConcurrentThreads()

void WossManagerResDbMT::checkConcurrentThreads ( )
protected

Sets concurrent_threads valid range

References concurrent_threads, woss::WossManager::debug, and max_thread_number.

Referenced by setConcurrentThreads(), and WossManagerResDbMT().

◆ getConcurrentThreads()

unsigned int woss::WossManagerResDbMT::getConcurrentThreads ( ) const
inline

Gets the number of concurrent threads

Returns
number of concurrent threads

References concurrent_threads.

◆ getUseThreadPoolFlag()

bool woss::WossManagerResDbMT::getUseThreadPoolFlag ( )
inline

Gets the usage of woss::ThreadPool flag, which configures the multithread operation

Returns
true if woss::ThreadPool is in use, false if std::async is in use.

References use_thread_pool.

◆ getWossPressure() [1/4]

std::unique_ptr< Pressure > WossManagerResDbMT::getWossPressure ( const CoordZ tx_coordz,
const CoordZ rx_coordz,
double  start_frequency,
double  end_frequency,
const Time time_value 
)
overridevirtual

Returns a valid Pressure for given parameters

Parameters
txconst reference to a valid CoordZ object ( transmitter )
rxconst reference to a valid CoordZ object ( receiver )
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valueconst reference to a valid Time object
Returns
std::unique_ptr to a valid Pressure 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().

Here is the call graph for this function:

◆ getWossPressure() [2/4]

std::unique_ptr< Pressure > WossManagerResDbMT::getWossPressure ( const CoordZ tx_coordz,
const CoordZ rx_coordz,
double  start_frequency,
double  end_frequency,
double  time_value 
)
overridevirtual

Returns a valid Pressure for given parameters

Parameters
txconst reference to a valid CoordZ object ( transmitter )
rxconst reference to a valid CoordZ object ( receiver )
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valuenumber of seconds after start time
Returns
std::unique_ptr to a valid Pressure object

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.

Here is the call graph for this function:

◆ getWossPressure() [3/4]

PressureVector WossManagerResDbMT::getWossPressure ( const CoordZPairVect coordinates,
double  start_frequency,
double  end_frequency,
const Time time_value 
)
overridevirtual

Returns a valid vector of Pressure* for given parameters

Parameters
coordinatesconst reference to a valid CoordZPairVect
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valueconst reference to a valid Time object
Returns
valid PressureVector

Reimplemented from woss::WossManager.

References concurrent_threads, woss::WossManager::debug, getWossPressure(), woss::WossManager::getWossPressure(), woss::ThreadPool::submit(), and use_thread_pool.

Here is the call graph for this function:

◆ getWossPressure() [4/4]

PressureVector WossManagerResDbMT::getWossPressure ( const CoordZPairVect coordinates,
double  start_frequency,
double  end_frequency,
double  time_value 
)
overridevirtual

Returns a valid vector of Pressure* for given parameters

Parameters
coordinatesconst reference to a valid CoordZPairVect
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valuenumber of seconds after start time
Returns
valid PressureVector

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.

Here is the call graph for this function:

◆ getWossTimeArr() [1/4]

std::unique_ptr< TimeArr > WossManagerResDbMT::getWossTimeArr ( const CoordZ tx_coordz,
const CoordZ rx_coordz,
double  start_frequency,
double  end_frequency,
const Time time_value 
)
overridevirtual

Returns a valid TimeArr for given parameters

Parameters
txconst reference to a valid CoordZ object ( transmitter )
rxconst reference to a valid CoordZ object ( receiver )
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valueconst reference to a valid Time object
Returns
std::unique_ptr to a valid TimeArr 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().

Here is the call graph for this function:

◆ getWossTimeArr() [2/4]

std::unique_ptr< TimeArr > WossManagerResDbMT::getWossTimeArr ( const CoordZ tx_coordz,
const CoordZ rx_coordz,
double  start_frequency,
double  end_frequency,
double  time_value 
)
overridevirtual

Returns a valid TimeArr for given parameters

Parameters
txconst reference to a valid CoordZ object ( transmitter )
rxconst reference to a valid CoordZ object ( receiver )
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valuenumber of seconds after start time
Returns
std::unique_ptr to a valid TimeArr object

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.

Here is the call graph for this function:

◆ getWossTimeArr() [3/4]

TimeArrVector WossManagerResDbMT::getWossTimeArr ( const CoordZPairVect coordinates,
double  start_frequency,
double  end_frequency,
const Time time_value 
)
overridevirtual

Returns a valid vector of TimeArr* for given parameters

Parameters
coordinatesconst reference to a valid CoordZPairVect
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valueconst reference to a valid Time object
Returns
valid TimeArrVector

Reimplemented from woss::WossManager.

References concurrent_threads, woss::WossManager::debug, getWossTimeArr(), woss::WossManager::getWossTimeArr(), woss::ThreadPool::submit(), and use_thread_pool.

Here is the call graph for this function:

◆ getWossTimeArr() [4/4]

TimeArrVector WossManagerResDbMT::getWossTimeArr ( const CoordZPairVect coordinates,
double  start_frequency,
double  end_frequency,
double  time_value 
)
overridevirtual

Returns a valid vector of TimeArr* for given parameters

Parameters
coordinatesconst reference to a valid CoordZPairVect
start_freqstart frequency [Hz]
end_freqend frequency [Hz]
time_valuenumber of seconds after start time
Returns
valid TimeArrVector

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.

Here is the call graph for this function:

◆ setConcurrentThreads()

void woss::WossManagerResDbMT::setConcurrentThreads ( unsigned int  number)
inline

Sets the number of concurrent threads. If number < 0 multi-threading is disabled. If number = 0 the thread number is automatically handled.

Parameters
numbernumber of concurrent threads

References checkConcurrentThreads(), and concurrent_threads.

Here is the call graph for this function:

◆ setUseThreadPoolFlag()

void woss::WossManagerResDbMT::setUseThreadPoolFlag ( bool  flag)
inline

Sets the usage of woss::ThreadPool or std::async for multithread operation

Parameters
flagtrue if woss::ThreadPool has to be used, false otherwise

References use_thread_pool.

Referenced by WossBellhopTest::doRun().

Member Data Documentation

◆ active_woss

ActiveWoss woss::WossManagerResDbMT::active_woss
protected

Set of current active Woss objects

Referenced by getWossPressure(), and getWossTimeArr().

◆ concurrent_threads

unsigned int woss::WossManagerResDbMT::concurrent_threads
protected

◆ max_thread_number

unsigned int woss::WossManagerResDbMT::max_thread_number
protected

Max number of created threads

Referenced by checkConcurrentThreads(), and WossManagerResDbMT().

◆ request_mutex

std::mutex woss::WossManagerResDbMT::request_mutex
protected

Request mutex

Referenced by getWossPressure(), and getWossTimeArr().

◆ use_thread_pool

bool woss::WossManagerResDbMT::use_thread_pool
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().


The documentation for this class was generated from the following files: