cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
toolbox::concurrent Namespace Reference

Functions

base::thread_pool_singleton_tdefault_pool ()
 获取默认线程池实例/Get the default thread pool instance
 
template<typename Iterator , typename Function >
void parallel_for_each (Iterator begin, Iterator end, Function func)
 使用TBB并行对范围[begin, end)中的每个元素应用函数
 
template<typename InputIt , typename OutputIt , typename UnaryOperation >
void parallel_transform (InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op)
 使用TBB并行转换范围[first1, last1)中的元素并存储到从d_first开始的范围
 
template<typename Iterator , typename T , typename BinaryOperation >
parallel_reduce (Iterator begin, Iterator end, T identity, BinaryOperation reduce_op)
 使用TBB对范围[begin, end)执行并行归约操作
 
template<typename InputIt , typename OutputIt , typename T , typename BinaryOperation >
void parallel_inclusive_scan (InputIt first, InputIt last, OutputIt d_first, T init, BinaryOperation binary_op, T identity)
 使用TBB执行并行包含扫描操作
 
template<typename RandomIt , typename Compare >
void parallel_merge_sort (RandomIt begin, RandomIt end, Compare comp)
 使用TBB实现并行合并排序
 
template<typename RandomIt , typename Compare >
void parallel_tim_sort (RandomIt begin, RandomIt end, Compare comp)
 使用TBB实现并行TimSort
 
template<typename Iterator , typename Function >
CPP_TOOLBOX_EXPORT void parallel_for_each (Iterator begin, Iterator end, Function func)
 并行对范围[begin, end)中的每个元素应用函数/Applies a function to each element in range [begin, end) in parallel
 
template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void parallel_for_each (std::vector< T, Alloc > &vec, Function func)
 向量的便捷重载/Convenience overload for vectors
 
template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void parallel_for_each (const std::vector< T, Alloc > &vec, Function func)
 常量向量的便捷重载/Convenience overload for const vectors
 
template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void parallel_for_each (std::array< T, N > &arr, Function func)
 数组的便捷重载/Convenience overload for arrays
 
template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void parallel_for_each (const std::array< T, N > &arr, Function func)
 常量数组的便捷重载/Convenience overload for const arrays
 
template<typename InputIt , typename OutputIt , typename UnaryOperation >
CPP_TOOLBOX_EXPORT void parallel_transform (InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op)
 并行将输入范围的元素转换到输出范围/Transforms elements from input range to output range in parallel
 
template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void parallel_transform (std::vector< T, Alloc > &vec, Function func)
 向量的便捷重载/Convenience overload for vectors
 
template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void parallel_transform (const std::vector< T, Alloc > &vec, Function func)
 常量向量的便捷重载/Convenience overload for const vectors
 
template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void parallel_transform (std::array< T, N > &arr, Function func)
 数组的便捷重载/Convenience overload for arrays
 
template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void parallel_transform (const std::array< T, N > &arr, Function func)
 常量数组的便捷重载/Convenience overload for const arrays
 
template<typename Iterator , typename T , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T parallel_reduce (Iterator begin, Iterator end, T identity, BinaryOperation reduce_op)
 对范围[begin, end)执行并行归约操作/Performs parallel reduction on range [begin, end)
 
template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T parallel_reduce (std::vector< T, Alloc > &vec, T identity, BinaryOperation reduce_op)
 向量的便捷重载/Convenience overload for vectors
 
template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T parallel_reduce (const std::vector< T, Alloc > &vec, T identity, BinaryOperation reduce_op)
 常量向量的便捷重载/Convenience overload for const vectors
 
template<typename T , size_t N, typename BinaryOperation >
CPP_TOOLBOX_EXPORT T parallel_reduce (std::array< T, N > &arr, T identity, BinaryOperation reduce_op)
 数组的便捷重载/Convenience overload for arrays
 
template<typename T , size_t N, typename BinaryOperation >
CPP_TOOLBOX_EXPORT T parallel_reduce (const std::array< T, N > &arr, T identity, BinaryOperation reduce_op)
 常量数组的便捷重载/Convenience overload for const arrays
 
template<typename InputIt , typename OutputIt , typename T , typename BinaryOperation >
CPP_TOOLBOX_EXPORT void parallel_inclusive_scan (InputIt first, InputIt last, OutputIt d_first, T init, BinaryOperation binary_op, T identity=T {})
 并行前缀和(包含式)/Parallel inclusive scan (prefix sum)
 
template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT void parallel_inclusive_scan (const std::vector< T, Alloc > &input, std::vector< T, Alloc > &out, T init, BinaryOperation binary_op, T identity=T {})
 向量便捷重载/Convenience overload for vector
 
template<typename RandomIt , typename Compare = std::less<>>
CPP_TOOLBOX_EXPORT void parallel_merge_sort (RandomIt begin, RandomIt end, Compare comp=Compare())
 并行合并排序/Parallel merge sort (chunked)
 
template<typename RandomIt , typename Compare = std::less<>>
CPP_TOOLBOX_EXPORT void parallel_tim_sort (RandomIt begin, RandomIt end, Compare comp=Compare())
 A simplified parallel TimSort implementation.
 

Function Documentation

◆ default_pool()

base::thread_pool_singleton_t & toolbox::concurrent::default_pool ( )
inline

获取默认线程池实例/Get the default thread pool instance

Returns
单例线程池实例的引用/Reference to the singleton thread pool instance

◆ parallel_for_each() [1/6]

template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_for_each ( const std::array< T, N > &  arr,
Function  func 
)

常量数组的便捷重载/Convenience overload for const arrays

◆ parallel_for_each() [2/6]

template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_for_each ( const std::vector< T, Alloc > &  vec,
Function  func 
)

常量向量的便捷重载/Convenience overload for const vectors

◆ parallel_for_each() [3/6]

template<typename Iterator , typename Function >
void toolbox::concurrent::parallel_for_each ( Iterator  begin,
Iterator  end,
Function  func 
)

使用TBB并行对范围[begin, end)中的每个元素应用函数

并行对范围[begin, end)中的每个元素应用函数/Applies a function to each element in range [begin, end) in parallel

直接使用TBB的parallel_for_each实现高效并行处理

Template Parameters
Iterator输入迭代器类型(必须支持随机访问以实现高效分块)
Function一元函数对象类型
Parameters
begin范围起始迭代器
end范围结束迭代器
func应用于每个元素的函数对象

◆ parallel_for_each() [4/6]

template<typename Iterator , typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_for_each ( Iterator  begin,
Iterator  end,
Function  func 
)

并行对范围[begin, end)中的每个元素应用函数/Applies a function to each element in range [begin, end) in parallel

使用默认线程池进行手动任务分割和提交/Uses default thread pool for manual task division and submission

Template Parameters
Iterator输入迭代器类型(必须支持随机访问以实现高效分块)/Input iterator type (must support random access for efficient chunking)
Function一元函数对象类型/Unary function object type
Parameters
begin范围起始迭代器/Start iterator of range
end范围结束迭代器/End iterator of range
func应用于每个元素的函数对象/Function object to apply to each element
std::vector<int> vec = {1, 2, 3, 4, 5};
// 并行将每个元素翻倍/Double each element in parallel
parallel_for_each(vec.begin(), vec.end(), [](int& x) {
x *= 2;
});
// vec 现在包含 {2, 4, 6, 8, 10}/vec now contains {2, 4, 6, 8, 10}
// 并行打印每个元素/Print each element in parallel
parallel_for_each(vec.begin(), vec.end(), [](const int& x) {
std::cout << x << " ";
});
void parallel_for_each(Iterator begin, Iterator end, Function func)
使用TBB并行对范围[begin, end)中的每个元素应用函数
Definition parallel_raw.hpp:21

并行对范围[begin, end)中的每个元素应用函数/Applies a function to each element in range [begin, end) in parallel

直接使用TBB的parallel_for_each实现高效并行处理

Template Parameters
Iterator输入迭代器类型(必须支持随机访问以实现高效分块)
Function一元函数对象类型
Parameters
begin范围起始迭代器
end范围结束迭代器
func应用于每个元素的函数对象

◆ parallel_for_each() [5/6]

template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_for_each ( std::array< T, N > &  arr,
Function  func 
)

数组的便捷重载/Convenience overload for arrays

◆ parallel_for_each() [6/6]

template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_for_each ( std::vector< T, Alloc > &  vec,
Function  func 
)

向量的便捷重载/Convenience overload for vectors

Template Parameters
T向量元素类型/Vector element type
Alloc向量分配器类型/Vector allocator type
Function函数对象类型/Function object type
Parameters
vec要处理的向量/Vector to process
func要应用的函数/Function to apply

◆ parallel_inclusive_scan() [1/3]

template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_inclusive_scan ( const std::vector< T, Alloc > &  input,
std::vector< T, Alloc > &  out,
init,
BinaryOperation  binary_op,
identity = T {} 
)

向量便捷重载/Convenience overload for vector

◆ parallel_inclusive_scan() [2/3]

template<typename InputIt , typename OutputIt , typename T , typename BinaryOperation >
void toolbox::concurrent::parallel_inclusive_scan ( InputIt  first,
InputIt  last,
OutputIt  d_first,
init,
BinaryOperation  binary_op,
identity 
)

使用TBB执行并行包含扫描操作

并行前缀和(包含式)/Parallel inclusive scan (prefix sum)

使用TBB的parallel_scan实现高效并行扫描

Template Parameters
InputIt输入迭代器类型
OutputIt输出迭代器类型
T扫描结果和初始值的类型
BinaryOperation二元操作类型
Parameters
first输入范围起始
last输入范围结束
d_first输出范围起始
init初始值
binary_op二元操作
identity二元操作的单位元素

◆ parallel_inclusive_scan() [3/3]

template<typename InputIt , typename OutputIt , typename T , typename BinaryOperation >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_inclusive_scan ( InputIt  first,
InputIt  last,
OutputIt  d_first,
init,
BinaryOperation  binary_op,
identity 
)

并行前缀和(包含式)/Parallel inclusive scan (prefix sum)

Template Parameters
InputIt输入迭代器类型(随机访问)/Input iterator type
OutputIt输出迭代器类型(随机访问)/Output iterator type
T值类型/Value type
BinaryOperation二元操作类型/Binary operation type
Parameters
first输入范围起始/Start of input range
last输入范围结束/End of input range
d_first输出范围起始/Start of output range
init起始值/Initial value
binary_op用于累加的二元操作/Binary operation for accumulation
identitybinary_op 的单位元素/Identity element for binary_op

并行前缀和(包含式)/Parallel inclusive scan (prefix sum)

使用TBB的parallel_scan实现高效并行扫描

Template Parameters
InputIt输入迭代器类型
OutputIt输出迭代器类型
T扫描结果和初始值的类型
BinaryOperation二元操作类型
Parameters
first输入范围起始
last输入范围结束
d_first输出范围起始
init初始值
binary_op二元操作
identity二元操作的单位元素

◆ parallel_merge_sort() [1/2]

template<typename RandomIt , typename Compare >
void toolbox::concurrent::parallel_merge_sort ( RandomIt  begin,
RandomIt  end,
Compare  comp 
)

使用TBB实现并行合并排序

并行合并排序/Parallel merge sort (chunked)

直接使用TBB的parallel_sort实现高效并行排序

Template Parameters
RandomIt随机访问迭代器类型
Compare比较器类型
Parameters
begin起始迭代器
end结束迭代器
comp比较器

◆ parallel_merge_sort() [2/2]

template<typename RandomIt , typename Compare = std::less<>>
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_merge_sort ( RandomIt  begin,
RandomIt  end,
Compare  comp 
)

并行合并排序/Parallel merge sort (chunked)

Template Parameters
RandomIt随机访问迭代器类型/Random access iterator type
Compare比较器类型/Comparator type

并行合并排序/Parallel merge sort (chunked)

直接使用TBB的parallel_sort实现高效并行排序

Template Parameters
RandomIt随机访问迭代器类型
Compare比较器类型
Parameters
begin起始迭代器
end结束迭代器
comp比较器

◆ parallel_reduce() [1/6]

template<typename T , size_t N, typename BinaryOperation >
CPP_TOOLBOX_EXPORT T toolbox::concurrent::parallel_reduce ( const std::array< T, N > &  arr,
identity,
BinaryOperation  reduce_op 
)

常量数组的便捷重载/Convenience overload for const arrays

◆ parallel_reduce() [2/6]

template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T toolbox::concurrent::parallel_reduce ( const std::vector< T, Alloc > &  vec,
identity,
BinaryOperation  reduce_op 
)

常量向量的便捷重载/Convenience overload for const vectors

◆ parallel_reduce() [3/6]

template<typename Iterator , typename T , typename BinaryOperation >
T toolbox::concurrent::parallel_reduce ( Iterator  begin,
Iterator  end,
identity,
BinaryOperation  reduce_op 
)

使用TBB对范围[begin, end)执行并行归约操作

对范围[begin, end)执行并行归约操作/Performs parallel reduction on range [begin, end)

直接使用TBB的parallel_reduce实现高效并行归约

Template Parameters
Iterator输入迭代器类型(必须支持随机访问)
T归约结果和单位元素的类型
BinaryOperation二元操作类型
Parameters
begin起始迭代器
end结束迭代器
identity归约操作的单位元素
reduce_op用于合并两个T值或T与元素类型的二元操作
Returns
并行归约的结果

◆ parallel_reduce() [4/6]

template<typename Iterator , typename T , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T toolbox::concurrent::parallel_reduce ( Iterator  begin,
Iterator  end,
identity,
BinaryOperation  reduce_op 
)

对范围[begin, end)执行并行归约操作/Performs parallel reduction on range [begin, end)

使用默认线程池进行任务分割。执行局部归约然后合并结果。reduce_op应该是可结合的。identity必须是reduce_op的单位元素/Uses default thread pool for task division. Performs local reduction then merges results. reduce_op should be associative. identity must be identity element for reduce_op.

Template Parameters
Iterator输入迭代器类型(必须支持随机访问)/Input iterator type (must support random access)
T归约结果和单位元素的类型/Type of reduction result and identity element
BinaryOperation二元操作类型,签名应为T(const T&, const ElementType&)或T(T,T)/Binary operation type, signature should be T(const T&, const ElementType&) or T(T,T)
Parameters
begin起始迭代器/Start iterator
end结束迭代器/End iterator
identity归约操作的单位元素/Identity element for reduction
reduce_op用于合并两个T值或T与元素类型的二元操作/Binary operation to merge two T values or T with element type
Returns
并行归约的结果/Result of parallel reduction
std::vector<int> vec = {1, 2, 3, 4, 5};
// 并行求和/Sum elements in parallel
int sum = parallel_reduce(vec.begin(), vec.end(), 0,
std::plus<int>());
// sum == 15
// 并行查找最大元素/Find maximum element in parallel
int max = parallel_reduce(vec.begin(), vec.end(),
std::numeric_limits<int>::min(),
[](int a, int b) { return std::max(a,b); });
// max == 5
// 并行计算字符串连接/Concatenate strings in parallel
std::vector<std::string> strings = {"Hello", " ", "World", "!"};
std::string result = parallel_reduce(strings.begin(), strings.end(),
std::string(),
std::plus<std::string>());
// result == "Hello World!"
T parallel_reduce(Iterator begin, Iterator end, T identity, BinaryOperation reduce_op)
使用TBB对范围[begin, end)执行并行归约操作
Definition parallel_raw.hpp:129

对范围[begin, end)执行并行归约操作/Performs parallel reduction on range [begin, end)

直接使用TBB的parallel_reduce实现高效并行归约

Template Parameters
Iterator输入迭代器类型(必须支持随机访问)
T归约结果和单位元素的类型
BinaryOperation二元操作类型
Parameters
begin起始迭代器
end结束迭代器
identity归约操作的单位元素
reduce_op用于合并两个T值或T与元素类型的二元操作
Returns
并行归约的结果

◆ parallel_reduce() [5/6]

template<typename T , size_t N, typename BinaryOperation >
CPP_TOOLBOX_EXPORT T toolbox::concurrent::parallel_reduce ( std::array< T, N > &  arr,
identity,
BinaryOperation  reduce_op 
)

数组的便捷重载/Convenience overload for arrays

◆ parallel_reduce() [6/6]

template<typename T , typename Alloc , typename BinaryOperation >
CPP_TOOLBOX_EXPORT T toolbox::concurrent::parallel_reduce ( std::vector< T, Alloc > &  vec,
identity,
BinaryOperation  reduce_op 
)

向量的便捷重载/Convenience overload for vectors

◆ parallel_tim_sort() [1/2]

template<typename RandomIt , typename Compare >
void toolbox::concurrent::parallel_tim_sort ( RandomIt  begin,
RandomIt  end,
Compare  comp 
)

使用TBB实现并行TimSort

A simplified parallel TimSort implementation.

由于TBB的parallel_sort已经是高度优化的并行排序算法, 我们直接使用它作为TimSort的实现

Template Parameters
RandomIt随机访问迭代器类型
Compare比较器类型
Parameters
begin起始迭代器
end结束迭代器
comp比较器

◆ parallel_tim_sort() [2/2]

template<typename RandomIt , typename Compare = std::less<>>
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_tim_sort ( RandomIt  begin,
RandomIt  end,
Compare  comp 
)

A simplified parallel TimSort implementation.

Template Parameters
RandomItRandom access iterator type
CompareComparator type

A simplified parallel TimSort implementation.

由于TBB的parallel_sort已经是高度优化的并行排序算法, 我们直接使用它作为TimSort的实现

Template Parameters
RandomIt随机访问迭代器类型
Compare比较器类型
Parameters
begin起始迭代器
end结束迭代器
comp比较器

◆ parallel_transform() [1/6]

template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_transform ( const std::array< T, N > &  arr,
Function  func 
)

常量数组的便捷重载/Convenience overload for const arrays

◆ parallel_transform() [2/6]

template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_transform ( const std::vector< T, Alloc > &  vec,
Function  func 
)

常量向量的便捷重载/Convenience overload for const vectors

◆ parallel_transform() [3/6]

template<typename InputIt , typename OutputIt , typename UnaryOperation >
void toolbox::concurrent::parallel_transform ( InputIt  first1,
InputIt  last1,
OutputIt  d_first,
UnaryOperation  unary_op 
)

使用TBB并行转换范围[first1, last1)中的元素并存储到从d_first开始的范围

并行将输入范围的元素转换到输出范围/Transforms elements from input range to output range in parallel

使用TBB的parallel_for实现高效并行转换

Template Parameters
InputIt输入迭代器类型
OutputIt输出迭代器类型
UnaryOperation一元操作类型
Parameters
first1输入范围起始
last1输入范围结束
d_first输出范围起始
unary_op应用于每个元素的操作

◆ parallel_transform() [4/6]

template<typename InputIt , typename OutputIt , typename UnaryOperation >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_transform ( InputIt  first1,
InputIt  last1,
OutputIt  d_first,
UnaryOperation  unary_op 
)

并行将输入范围的元素转换到输出范围/Transforms elements from input range to output range in parallel

将一元操作应用于[first1, last1)并将结果存储在[d_first,...)/Applies unary_op to [first1, last1) storing results in [d_first,...)

Warning
输入和输出迭代器必须是随机访问迭代器/Input and output iterators must be random access iterators
输出范围[d_first, d_first + distance(first1, last1))必须有足够的分配容量/Output range [d_first, d_first + distance(first1, last1)) must have sufficient allocated capacity
Template Parameters
InputIt输入迭代器类型(std::random_access_iterator)/Input iterator type (std::random_access_iterator)
OutputIt输出迭代器类型(std::random_access_iterator)/Output iterator type (std::random_access_iterator)
UnaryOperation一元操作类型,签名应为OutType(const InType&)/Unary operation type, signature should be OutType(const InType&)
Parameters
first1输入范围起始/Start of input range
last1输入范围结束/End of input range
d_first输出范围起始/Start of output range
unary_op应用于每个元素的操作/Operation to apply to each element
std::vector<int> input = {1, 2, 3, 4, 5};
std::vector<int> output(input.size());
// 并行计算每个元素的平方/Square each element in parallel
parallel_transform(input.begin(), input.end(), output.begin(),
[](int x) { return x * x; });
// output 现在包含 {1, 4, 9, 16, 25}/output now contains {1, 4, 9, 16, 25}
// 并行将每个元素转换为字符串/Transform each element to string in parallel
std::vector<std::string> str_output(input.size());
parallel_transform(input.begin(), input.end(), str_output.begin(),
[](int x) { return std::to_string(x); });
void parallel_transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op)
使用TBB并行转换范围[first1, last1)中的元素并存储到从d_first开始的范围
Definition parallel_raw.hpp:70

并行将输入范围的元素转换到输出范围/Transforms elements from input range to output range in parallel

使用TBB的parallel_for实现高效并行转换

Template Parameters
InputIt输入迭代器类型
OutputIt输出迭代器类型
UnaryOperation一元操作类型
Parameters
first1输入范围起始
last1输入范围结束
d_first输出范围起始
unary_op应用于每个元素的操作

◆ parallel_transform() [5/6]

template<typename T , size_t N, typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_transform ( std::array< T, N > &  arr,
Function  func 
)

数组的便捷重载/Convenience overload for arrays

◆ parallel_transform() [6/6]

template<typename T , typename Alloc , typename Function >
CPP_TOOLBOX_EXPORT void toolbox::concurrent::parallel_transform ( std::vector< T, Alloc > &  vec,
Function  func 
)

向量的便捷重载/Convenience overload for vectors