SimGrid  3.18
Versatile Simulation of Distributed Systems

Detailed Description

Parallel map.

Parallel map class.

A function is applied to all elements of a std::vector in parallel with n worker threads. The worker threads are persistent until the destruction of the parmap.

If there are more than n elements in the vector, the worker threads are allowed to fetch themselves remaining work with method next() and execute it.

Classes

class  simgrid::xbt::Parmap< T >
 

Enumerations

enum  e_xbt_parmap_mode_t { XBT_PARMAP_POSIX, XBT_PARMAP_FUTEX, XBT_PARMAP_BUSY_WAIT, XBT_PARMAP_DEFAULT }
 Synchronization mode of the worker threads of a parmap. More...
 

Functions

 simgrid::xbt::Parmap< T >::Parmap (unsigned num_workers, e_xbt_parmap_mode_t mode)
 Creates a parallel map object. More...
 
 simgrid::xbt::Parmap< T >::~Parmap ()
 Destroys a parmap. More...
 
void simgrid::xbt::Parmap< T >::apply (void(*fun)(T), const std::vector< T > &data)
 Applies a list of tasks in parallel. More...
 
boost::optional< T > simgrid::xbt::Parmap< T >::next ()
 Returns a next task to process. More...
 
 simgrid::xbt::Parmap< T >::PosixSynchro::PosixSynchro (Parmap< T > &parmap)
 
 simgrid::xbt::Parmap< T >::PosixSynchro::~PosixSynchro ()
 
void simgrid::xbt::Parmap< T >::PosixSynchro::master_signal ()
 
void simgrid::xbt::Parmap< T >::PosixSynchro::master_wait ()
 
void simgrid::xbt::Parmap< T >::PosixSynchro::worker_signal ()
 
void simgrid::xbt::Parmap< T >::PosixSynchro::worker_wait (unsigned round)
 
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::master_signal ()
 
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::master_wait ()
 
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::worker_signal ()
 
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::worker_wait (unsigned)
 

Enumeration Type Documentation

◆ e_xbt_parmap_mode_t

Synchronization mode of the worker threads of a parmap.

Enumerator
XBT_PARMAP_POSIX 

use POSIX synchronization primitives

XBT_PARMAP_FUTEX 

use Linux futex system call

XBT_PARMAP_BUSY_WAIT 

busy waits (no system calls, maximum CPU usage)

XBT_PARMAP_DEFAULT 

futex if available, posix otherwise

Function Documentation

◆ Parmap()

template<typename T >
simgrid::xbt::Parmap< T >::Parmap ( unsigned  num_workers,
e_xbt_parmap_mode_t  mode 
)

Creates a parallel map object.

Parameters
num_workersnumber of worker threads to create
modehow to synchronize the worker threads

◆ ~Parmap()

template<typename T >
simgrid::xbt::Parmap< T >::~Parmap ( )

Destroys a parmap.

◆ apply()

template<typename T >
void simgrid::xbt::Parmap< T >::apply ( void(*)(T)  fun,
const std::vector< T > &  data 
)

Applies a list of tasks in parallel.

Parameters
funthe function to call in parallel
dataeach element of this vector will be passed as an argument to fun

◆ next()

template<typename T >
boost::optional< T > simgrid::xbt::Parmap< T >::next ( )

Returns a next task to process.

Worker threads call this function to get more work.

Returns
the next task to process, or throws a std::out_of_range exception if there is no more work

◆ PosixSynchro()

template<typename T >
simgrid::xbt::Parmap< T >::PosixSynchro::PosixSynchro ( Parmap< T > &  parmap)
explicit

◆ ~PosixSynchro()

template<typename T >
simgrid::xbt::Parmap< T >::PosixSynchro::~PosixSynchro ( )

◆ master_signal() [1/2]

template<typename T >
void simgrid::xbt::Parmap< T >::PosixSynchro::master_signal ( )

◆ master_wait() [1/2]

template<typename T >
void simgrid::xbt::Parmap< T >::PosixSynchro::master_wait ( )

◆ worker_signal() [1/2]

template<typename T >
void simgrid::xbt::Parmap< T >::PosixSynchro::worker_signal ( )

◆ worker_wait() [1/2]

template<typename T >
void simgrid::xbt::Parmap< T >::PosixSynchro::worker_wait ( unsigned  round)

◆ master_signal() [2/2]

template<typename T >
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::master_signal ( )

◆ master_wait() [2/2]

template<typename T >
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::master_wait ( )

◆ worker_signal() [2/2]

template<typename T >
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::worker_signal ( )

◆ worker_wait() [2/2]

template<typename T >
void simgrid::xbt::Parmap< T >::BusyWaitSynchro::worker_wait ( unsigned  round)