commit | 382d6fc91a495aaa6ba5311871daeb2a271f40d9 | [log] [tgz] |
---|---|---|
author | Dvorskiy, Mikhail <mikhail.dvorskiy@intel.com> | Tue Mar 10 19:09:57 2020 +0300 |
committer | Copybara-Service <copybara-worker@google.com> | Tue Sep 01 14:44:57 2020 -0700 |
tree | ba1a4fa6805d8576b807fbdfe69711f5ebc7d1c4 | |
parent | 9420419039c8996bba5974febb7c6063226d9287 [diff] |
[pstl] A fix for move placement-new (and destroy) allocated objects from raw memory. https://reviews.llvm.org/D74123 The fix affects follow algorithms: remove_if, unique, rotate, inplace_merge, partial_sort_copy, set_union, set_intersection, set_difference, set_symmetric_difference. For "is_trivial" types there are no problems with "creating objects/clean-up" For non-trivial types the algo results are also correct, but possible incorrect copying/moving "operator=" calls "by raw memory" within one of mentioned algo or incorrect destructor calls in the end of algo. GitOrigin-RevId: 5b0502dff5b6f510fbf823059faa042dd1523cef
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.
To use Parallel STL, you must have the following software installed:
unseq
and par_unseq
policies only have effect with compilers that support #pragma omp simd
or #pragma simd
.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
.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.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.remove
, remove_if
, unique
the dereferenced value type of the provided iterators shall be MoveConstructible.copy_if
, inplace_merge
, partial_sort
, partial_sort_copy
, partition_copy
, remove
, remove_if
, rotate
, sort
, stable_sort
, unique
, unique_copy
.