Helios++
Helios software for LiDAR simulations
helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator > Class Template Reference

Class providing a shared memory sorting algorithm based on merge sort. More...

#include <SM_ParallelMergeSort.h>

Collaboration diagram for helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >:

Public Member Functions

 SM_ParallelMergeSort (size_t const numThreads)
 Build a shared memory parallel merge sort instance with given number of threads. The number of minimum elements will be twice the number of threads. More...
 
 SM_ParallelMergeSort (size_t const numThreads, size_t const minElements)
 Build a shared memory parallel merge sort instance with given number of threads and given minimum number of elements. More...
 
virtual void init ()
 Common initialization for all constructors.
 
virtual void trySort (RandomAccessIterator begin, RandomAccessIterator end, Comparator comparator)
 Sort given sequence using given comparator in a non-blocking fashion. It is, the function might return before the sequence has been sorted. More...
 
virtual void sort (RandomAccessIterator begin, RandomAccessIterator end, Comparator comparator)
 Like SM_ParallelMergeSort::trySort function but it returns only after sorting has been finished. It can be considered as the blocking counterpart of trySort. More...
 
virtual void join ()
 Force caller thread to wait until current sort has been finished. More...
 
virtual size_t getNumThreads () const
 Get the number of threads. More...
 
virtual void setNumThreads (size_t const numThreads)
 Set the number of threads. More...
 
virtual size_t getMinElements () const
 Get the minimum number of elements for parallel execution. More...
 
virtual void setMinElements (size_t const minElements)
 Set the minimum number of elements for parallel execution. More...
 

Protected Attributes

size_t numThreads
 How many threads can be used to compute parallel sorting. More...
 
size_t minElements
 If the number of elements to be sorted is less than minElements, then a sequential sort will be applied. More...
 
int maxDepth
 The maximum depth that the tree of splits must reach considering number of threads. More...
 
std::shared_ptr< SharedTaskSequencerstSequencer
 The shared task sequencer to handle concurrent execution of multiple threads. More...
 

Detailed Description

template<typename RandomAccessIterator, typename Comparator>
class helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >

Class providing a shared memory sorting algorithm based on merge sort.

Author
Alberto M. Esmoris Pena
Version
1.0

Sort \(m\) elements using \(n\) threads.

Template Parameters
RandomAccessIteratorType of iterator specifying start and end for sequence to be sorted
ComparatorType of comparator to be used to compare elements from a sequence

Constructor & Destructor Documentation

◆ SM_ParallelMergeSort() [1/2]

template<typename RandomAccessIterator , typename Comparator >
helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::SM_ParallelMergeSort ( size_t const  numThreads)
inline

Build a shared memory parallel merge sort instance with given number of threads. The number of minimum elements will be twice the number of threads.

See also
SM_ParallelMergeSort::numThreads

◆ SM_ParallelMergeSort() [2/2]

template<typename RandomAccessIterator , typename Comparator >
helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::SM_ParallelMergeSort ( size_t const  numThreads,
size_t const  minElements 
)
inline

Build a shared memory parallel merge sort instance with given number of threads and given minimum number of elements.

See also
SM_ParallelMergeSort::numThreads
SM_ParallelMergeSort::minElements

Member Function Documentation

◆ getMinElements()

template<typename RandomAccessIterator , typename Comparator >
virtual size_t helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::getMinElements ( ) const
inlinevirtual

Get the minimum number of elements for parallel execution.

Returns
Minimum number of elements for parallel execution
See also
SM_ParallelMergeSort::minElements

◆ getNumThreads()

template<typename RandomAccessIterator , typename Comparator >
virtual size_t helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::getNumThreads ( ) const
inlinevirtual

Get the number of threads.

Returns
Number of threads
See also
SM_ParallelMergeSort::numThreads

◆ join()

template<typename RandomAccessIterator , typename Comparator >
virtual void helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::join ( )
virtual

Force caller thread to wait until current sort has been finished.

Usage example

SM_ParallelMergeSort<...> sorter(4, 32);
sorter.trySort(x.begin(), x.end(), MyComparator())
...
sorter.join()
SM_ParallelMergeSort(size_t const numThreads)
Build a shared memory parallel merge sort instance with given number of threads. The number of minimu...
Definition: SM_ParallelMergeSort.h:73

◆ setMinElements()

template<typename RandomAccessIterator , typename Comparator >
virtual void helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::setMinElements ( size_t const  minElements)
inlinevirtual

Set the minimum number of elements for parallel execution.

Parameters
minElementsNew minimum number of elements for parallel execution
See also
SM_ParallelMergeSort::minElements

◆ setNumThreads()

template<typename RandomAccessIterator , typename Comparator >
virtual void helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::setNumThreads ( size_t const  numThreads)
inlinevirtual

Set the number of threads.

Parameters
numThreadsNew number of threads
See also
SM_ParallelMergeSort::numThreads

◆ sort()

template<typename RandomAccessIterator , typename Comparator >
virtual void helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::sort ( RandomAccessIterator  begin,
RandomAccessIterator  end,
Comparator  comparator 
)
inlinevirtual

Like SM_ParallelMergeSort::trySort function but it returns only after sorting has been finished. It can be considered as the blocking counterpart of trySort.

See also
SM_ParallelMergeSort::trySort

◆ trySort()

template<typename RandomAccessIterator , typename Comparator >
virtual void helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::trySort ( RandomAccessIterator  begin,
RandomAccessIterator  end,
Comparator  comparator 
)
virtual

Sort given sequence using given comparator in a non-blocking fashion. It is, the function might return before the sequence has been sorted.

Parameters
beginStart of sequence to be sorted
endEnd of sequence to be sorted
comparatorComparator defining sorting criteria
See also
SM_ParallelMergeSort::sort

Member Data Documentation

◆ maxDepth

template<typename RandomAccessIterator , typename Comparator >
int helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::maxDepth
protected

The maximum depth that the tree of splits must reach considering number of threads.

\[ d^* \]

See also
SM_ParallelMergeSort::numThreads

◆ minElements

template<typename RandomAccessIterator , typename Comparator >
size_t helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::minElements
protected

If the number of elements to be sorted is less than minElements, then a sequential sort will be applied.

\[ m_* \]

◆ numThreads

template<typename RandomAccessIterator , typename Comparator >
size_t helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::numThreads
protected

How many threads can be used to compute parallel sorting.

\[ n \]

◆ stSequencer

template<typename RandomAccessIterator , typename Comparator >
std::shared_ptr<SharedTaskSequencer> helios::hpc::SM_ParallelMergeSort< RandomAccessIterator, Comparator >::stSequencer
protected

The shared task sequencer to handle concurrent execution of multiple threads.

See also
SharedTaskSequencer

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