forked from OSchip/llvm-project
Summary: Recent Clangs give an error for this. Note that the size of this diff is caused by running clang-format on the result of removing the captures. I guess we'll see how well that works for us. Reviewers: jfb, rodgert Subscribers: jkorous, dexonsmith, libcxx-commits, mclow.lists Differential Revision: https://reviews.llvm.org/D55945 llvm-svn: 350544 |
||
|---|---|---|
| .. | ||
| build | ||
| cmake | ||
| include/pstl | ||
| test | ||
| .arcconfig | ||
| .clang-format | ||
| CMakeLists.txt | ||
| CREDITS.txt | ||
| LICENSE.txt | ||
| ParallelSTLConfig.cmake.in | ||
| README.md | ||
README.md
Parallel STL
Parallel STL is an implementation of the C++ standard library algorithms with support for execution policies, as specified in ISO/IEC 14882:2017 standard, commonly called C++17. The implementation also supports the unsequenced execution policy specified in Parallelism TS version 2 and proposed for the next version of the C++ standard in the C++ working group paper P1001. Parallel STL offers efficient support for both parallel and vectorized execution of algorithms. For sequential execution, it relies on an available implementation of the C++ standard library.
Prerequisites
To use Parallel STL, you must have the following software installed:
- C++ compiler with:
- Support for C++11
- Support for OpenMP* 4.0 SIMD constructs
- Threading Building Blocks (TBB) which is available for download at https://github.com/01org/tbb/
Known issues and limitations
unseqandpar_unseqpolicies only have effect with compilers that support#pragma omp simdor#pragma simd.- Parallel and vector execution is only supported for the algorithms if random access iterators are provided, while for other iterator types the execution will remain serial.
- The following algorithms do not allow efficient SIMD execution:
includes,inplace_merge,merge,nth_element,partial_sort,partial_sort_copy,set_difference,set_intersection,set_symmetric_difference,set_union,sort,stable_partition,stable_sort,unique. - The initial value type for
exclusive_scan,inclusive_scan,transform_exclusive_scan,transform_inclusive_scanshall be DefaultConstructible. A default constructed-instance of the initial value type shall be the identity element for the specified binary operation. - For
max_element,min_element,minmax_element,partial_sort,partial_sort_copy,sort,stable_sortthe dereferenced value type of the provided iterators shall be DefaultConstructible. - For
remove,remove_if,uniquethe dereferenced value type of the provided iterators shall be MoveConstructible. - The following algorithms require additional O(n) memory space for parallel execution:
copy_if,inplace_merge,partial_sort,partial_sort_copy,partition_copy,remove,remove_if,rotate,sort,stable_sort,unique,unique_copy.