Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/experimental/parallelism"

From cppreference.com
(Parallelized versions of existing algorithms: uninitialized_meow are from <memory>)
m (fmt, {{sup}})
 
(17 intermediate revisions by 3 users not shown)
Line 2: Line 2:
 
{{cpp/experimental/parallelism/navbar}}
 
{{cpp/experimental/parallelism/navbar}}
  
The C++ Extensions for Parallelism, ISO/IEC TS 19570:xxxx,<!-- looks like it will be 2015 at this point --> defines the following new components for the C++ standard library:
+
{{fmbox|class=noprint|style=font-size: 0.8em|text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard (except for dynamic execution policy and {{tt|exception_list}}) as of 3/2016; see [[cpp/algorithm|the algorithm library]] {{mark since c++17}}}}
 +
 
 +
The C++ Extensions for Parallelism, ISO/IEC TS 19570:2015 defines the following new components for the C++ standard library:
  
 
===Execution policies===
 
===Execution policies===
 +
The parallelism TS describes three execution policies: [[cpp/experimental/parallelism/execution policy#sequential|sequential]], [[cpp/experimental/parallelism/execution policy#parallel|parallel]], and [[cpp/experimental/parallelism/execution policy#parallel vector|parallel+vector]], and provides corresponding execution policy types and objects. Users may select an execution policy statically by invoking a parallel algorithm with the an execution policy object of the corresponding type, or dynamically by using the type-erasing {{tt|execution_policy}} class.
 +
 +
Implementations may define additional execution policies as an extension. The semantics of parallel algorithms invoked with an execution policy object of implementation-defined type is implementation-defined.
 +
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc header | experimental/execution_policy }}
+
{{dsc header|experimental/execution_policy}}
<!-- include is_execution_policy and is_execution_policy_v in that as helpers -->
+
{{dsc class|cpp/experimental/execution_policy_tag_t|title=sequential_execution_policy<br/>parallel_execution_policy<br/>parallel_vector_execution_policy|execution policy types}}
{{dsc class | cpp/experimental/sequential_execution_policy | sequential execution policy}}
+
{{dsc const|cpp/experimental/execution_policy_tag|title=seq<br/>par<br/>par_vec|global execution policy objects}}
<!-- include seq as helper inside -->
+
{{dsc class|cpp/experimental/execution_policy|dynamic execution policy}}
{{dsc class | cpp/experimental/parallel_execution_policy | parallel execution policy}}
+
{{dsc tclass|cpp/experimental/is_execution_policy|test whether a class represents an execution policy}}
<!-- include par as helper inside -->
+
{{dsc end}}
{{dsc class | cpp/experimental/parallel_vector_execution_policy | parallel/vector execution policy}}
+
 
<!-- include parvec as helper inside -->
+
===Exception lists===
{{dsc class | cpp/experimental/execution_policy | dynamic execution policy}}
+
{{dsc begin}}
{{dsc header | experimental/exception_list }}
+
{{dsc header|experimental/exception_list}}
{{dsc class | cpp/experimental/exception_list | exceptions raised during parallel executions}}
+
{{dsc class|cpp/experimental/exception_list|exceptions raised during parallel executions}}
 
{{dsc end}}
 
{{dsc end}}
  
 
===Parallelized versions of existing algorithms===
 
===Parallelized versions of existing algorithms===
Provides parallelized versions of 77 algorithms from <algorithm>, <numeric> and <memory>
+
The TS provides [[cpp/experimental/parallelism/existing|parallelized versions]] of the following 69 algorithms from <algorithm>, <numeric> and <memory>:
{{todo|how to show it best? Add an overload to each std:: page for visibility or just here?}}
+
{{collapse top|Standard library algorithms for which parallelized versions are provided}}
<!-- algorithm list:
+
{{div col|3}}
adjacent_difference
+
* {{lc|std::adjacent_difference}}
adjacent_find
+
* {{lc|std::adjacent_find}}
all_of
+
* {{lc|std::all_of}}
any_of
+
* {{lc|std::any_of}}
copy
+
* {{lc|std::copy}}
copy_if
+
* {{lc|std::copy_if}}
copy_n
+
* {{lc|std::copy_n}}
count
+
* {{lc|std::count}}
count_if
+
* {{lc|std::count_if}}
equal
+
* {{lc|std::equal}}
exclusive_scan
+
* {{lc|std::fill}}
fill
+
* {{lc|std::fill_n}}
fill_n
+
* {{lc|std::find}}
find
+
* {{lc|std::find_end}}
find_end
+
* {{lc|std::find_first_of}}
find_first_of
+
* {{lc|std::find_if}}
find_if
+
* {{lc|std::find_if_not}}
find_if_not
+
* {{lc|std::generate}}
for_each
+
* {{lc|std::generate_n}}
for_each_n
+
* {{lc|std::includes}}
generate
+
* {{lc|std::inner_product}}
generate_n
+
* {{lc|std::inplace_merge}}
includes
+
* {{lc|std::is_heap}}
inclusive_scan
+
* {{lc|std::is_heap_until}}
inner_product
+
* {{lc|std::is_partitioned}}
inplace_merge
+
* {{lc|std::is_sorted}}
is_heap
+
* {{lc|std::is_sorted_until}}
is_heap_until
+
* {{lc|std::lexicographical_compare}}
is_partitioned
+
* {{lc|std::max_element}}
is_sorted
+
* {{lc|std::merge}}
is_sorted_until
+
* {{lc|std::min_element}}
lexicographical_compare
+
* {{lc|std::minmax_element}}
max_element
+
* {{lc|std::mismatch}}
merge
+
* {{ltt|cpp/algorithm/move|std::move}}
min_element
+
* {{lc|std::none_of}}
minmax_element
+
* {{lc|std::nth_element}}
mismatch
+
* {{lc|std::partial_sort}}
move
+
* {{lc|std::partial_sort_copy}}
none_of
+
* {{lc|std::partition}}
nth_element
+
* {{lc|std::partition_copy}}
partial_sort
+
* {{ltt|cpp/algorithm/remove|std::remove}}
partial_sort_copy
+
* {{lc|std::remove_copy}}
partition
+
* {{lc|std::remove_copy_if}}
partition_copy
+
* {{lc|std::remove_if}}
reduce
+
* {{lc|std::replace}}
remove
+
* {{lc|std::replace_copy}}
remove_copy
+
* {{lc|std::replace_copy_if}}
remove_copy_if
+
* {{lc|std::replace_if}}
remove_if
+
* {{lc|std::reverse}}
replace
+
* {{lc|std::reverse_copy}}
replace_copy
+
* {{lc|std::rotate}}
replace_copy_if
+
* {{lc|std::rotate_copy}}
replace_if
+
* {{lc|std::search}}
reverse
+
* {{lc|std::search_n}}
reverse_copy
+
* {{lc|std::set_difference}}
rotate
+
* {{lc|std::set_intersection}}
rotate_copy
+
* {{lc|std::set_symmetric_difference}}
search
+
* {{lc|std::set_union}}
search_n
+
* {{lc|std::sort}}
set_difference
+
* {{lc|std::stable_partition}}
set_intersection
+
* {{lc|std::stable_sort}}
set_symmetric_difference
+
* {{lc|std::swap_ranges}}
set_union
+
* {{lc|std::transform}}
sort
+
* {{lc|std::uninitialized_copy}}
stable_partition
+
* {{lc|std::uninitialized_copy_n}}
stable_sort
+
* {{lc|std::uninitialized_fill}}
swap_ranges
+
* {{lc|std::uninitialized_fill_n}}
transform
+
* {{lc|std::unique}}
transform_exclusive_scan
+
* {{lc|std::unique_copy}}
transform_inclusive_scan
+
{{div col end}}
transform_reduce
+
{{collapse bottom}}
uninitialized_copy
+
uninitialized_copy_n
+
uninitialized_fill
+
uninitialized_fill_n
+
unique
+
unique_copy
+
-->
+
  
 
===New algorithms===
 
===New algorithms===
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc header | experimental/algorithm }}
+
{{dsc header|experimental/algorithm}}
{{dsc tfun | cpp/experimental/for_each | similar to {{lc|std::for_each}} except returns void}}
+
{{dsc tfun|cpp/experimental/for_each|similar to {{lc|std::for_each}} except returns void}}
{{dsc tfun | cpp/experimental/for_each_n | applies a function object to the first n elements of a sequence }}
+
{{dsc tfun|cpp/experimental/for_each_n|applies a function object to the first n elements of a sequence}}
{{dsc header | experimental/numeric }}
+
{{dsc header|experimental/numeric}}
{{dsc tfun | cpp/experimental/reduce | similar to {{lc|std::accumulate}}, except out of order }}
+
{{dsc inc|cpp/experimental/parallelism/dsc reduce}}
{{dsc tfun | cpp/experimental/exclusive_scan | similar to {{lc|std::partial_sum}}, excludes the ith input element from the ith sum}}
+
{{dsc tfun|cpp/experimental/exclusive_scan|similar to {{lc|std::partial_sum}}, excludes the i{{sup|th}} input element from the i{{sup|th}} sum}}
{{dsc tfun | cpp/experimental/inclusive_scan | similar to {{lc|std::partial_sum}}, includes the ith input element in the ith sum}}
+
{{dsc tfun|cpp/experimental/inclusive_scan|similar to {{lc|std::partial_sum}}, includes the i{{sup|th}} input element in the i{{sup|th}} sum}}
{{dsc tfun | cpp/experimental/transform_reduce | applies a functor, then reduces}}
+
{{dsc inc|cpp/experimental/parallelism/dsc transform_reduce}}
{{dsc tfun | cpp/experimental/transform_exclusive_scan | applies a functor, then calculates exclusive scan }}
+
{{dsc tfun|cpp/experimental/transform_exclusive_scan|applies a functor, then calculates exclusive scan}}
{{dsc tfun | cpp/experimental/transform_inclusive_scan | applies a functor, then calculates inclusive scan}}
+
{{dsc tfun|cpp/experimental/transform_inclusive_scan|applies a functor, then calculates inclusive scan}}
 
{{dsc end}}
 
{{dsc end}}
 +
 +
{{langlinks|zh}}

Latest revision as of 02:11, 28 November 2023

 
 
Experimental
Technical Specification
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals TS v2)
Library fundamentals 3 (library fundamentals TS v3)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Extensions for concurrency 2 (concurrency TS v2)
Concepts (concepts TS)
Ranges (ranges TS)
Reflection (reflection TS)
Mathematical special functions (special functions TR)
Experimental Non-TS
Pattern Matching
Linear Algebra
std::execution
Contracts
2D Graphics
 
 

The C++ Extensions for Parallelism, ISO/IEC TS 19570:2015 defines the following new components for the C++ standard library:

Contents

[edit] Execution policies

The parallelism TS describes three execution policies: sequential, parallel, and parallel+vector, and provides corresponding execution policy types and objects. Users may select an execution policy statically by invoking a parallel algorithm with the an execution policy object of the corresponding type, or dynamically by using the type-erasing execution_policy class.

Implementations may define additional execution policies as an extension. The semantics of parallel algorithms invoked with an execution policy object of implementation-defined type is implementation-defined.

execution policy types
(class)
global execution policy objects
(constant)
dynamic execution policy
(class)
test whether a class represents an execution policy
(class template)

[edit] Exception lists

exceptions raised during parallel executions
(class)

[edit] Parallelized versions of existing algorithms

The TS provides parallelized versions of the following 69 algorithms from <algorithm>, <numeric> and <memory>:

Standard library algorithms for which parallelized versions are provided

[edit] New algorithms

Defined in header <experimental/algorithm>
similar to std::for_each except returns void
(function template)
applies a function object to the first n elements of a sequence
(function template)
Defined in header <experimental/numeric>
(parallelism TS)
similar to std::accumulate, except out of order
(function template) [edit]
similar to std::partial_sum, excludes the ith input element from the ith sum
(function template)
similar to std::partial_sum, includes the ith input element in the ith sum
(function template)
(parallelism TS)
applies a functor, then reduces out of order
(function template) [edit]
applies a functor, then calculates exclusive scan
(function template)
applies a functor, then calculates inclusive scan
(function template)