hanchenye-llvm-project/pstl
Louis Dionne 72b8e77a49 [pstl] By default, disable the parallel policies
Since we don't have any non-trivial PSTL backend that doesn't require
TBB yet, enabling the parallel policies by default breaks people that
try to build all of LLVM without having an installation of TBB. Since
this is unacceptable, parallel policies are disabled by default.

We can re-enable it once we have a backend that does not require anything
beyond what C++ already requires. For example, we could have a simple
backend that uses std::thread by default or something along those lines,
with the understanding that vendors would use their own (more efficient)
backend.

llvm-svn: 356194
2019-03-14 19:33:58 +00:00
..
cmake Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
include/pstl [pstl] Fix missing parallel policy guards 2019-03-01 01:26:35 +00:00
test [pstl] Remove some warnings when compiling with a recent Clang 2019-02-15 17:30:35 +00:00
.arcconfig
.clang-format
CMakeLists.txt [pstl] By default, disable the parallel policies 2019-03-14 19:33:58 +00:00
CREDITS.txt
LICENSE.txt Fix typos throughout the license files that somehow I and my reviewers 2019-01-21 09:52:34 +00:00
ParallelSTLConfig.cmake.in Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
README.md [NFC] Fix formatting of README.md for better rendering 2019-01-07 16:54:02 +00:00

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

  • unseq and par_unseq policies only have effect with compilers that support #pragma omp simd or #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_scan shall 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_sort the dereferenced value type of the provided iterators shall be DefaultConstructible.
  • For remove, remove_if, unique the 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.