From 927a7360f9ca5ba1e69ad8928b3c53044c1e3bd9 Mon Sep 17 00:00:00 2001
From: Jared Hoberock
NVIDIA Corporation
Technical Specification for C++ Extensions for Parallelism
+ Working Draft, Technical Specification for C++ Extensions for Parallelism Version 2
Header
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2<experimental/algorithm> synopsisv1 {
template<class ExecutionPolicy,
class InputIterator, class Function>
void for_each(ExecutionPolicy&& exec,
@@ -499,7 +499,7 @@ Header
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2<experimental/numeric> synopsisv1 {
template<class InputIterator>
typename iterator_traits<InputIterator>::value_type
reduce(InputIterator first, InputIterator last);
diff --git a/exceptions.html b/exceptions.html
index 4c07716..caac5de 100644
--- a/exceptions.html
+++ b/exceptions.html
@@ -9,7 +9,7 @@ Exception reporting behavior
During the execution of a standard parallel algorithm, if the invocation of an element access function
- exits viaterminates with an uncaught exception, the behavior of the program is determined by the type of
+ exits via an uncaught exception, the behavior of the program is determined by the type of
execution policy used to invoke the algorithm:
sequential_execution_policy or
- parallel_execution_policy, the execution of the algorithm exits viaexception_listexception_list containing allexception_list+parallel_execution_policy, the execution of the algorithm exits via an + exception. The exception shall be anexception_listcontaining all uncaught exceptions thrown during + the invocations of element access functions, or optionally the uncaught exception if there was only one.- For example, the number of invocations of the user-provided function object in -whenfor_eachis unspecified. Wfor_eachis executed sequentially, - if an invocation of the user-provided function object throws an exception,for_eachcan exit via the uncaught exception, or throw anexception_listcontaining the original exception. -only one exception will be contained in the+ For example, whenexception_listobject.for_eachis executed sequentially, + if an invocation of the user-provided function object throws an exception,for_eachcan exit via the uncaught exception, or throw anexception_listcontaining the original exception.These guarantees imply that, unless the algorithm has failed to allocate memory and - exits via terminated withstd::bad_alloc, all exceptions thrown during the execution of + exits viastd::bad_alloc, all exceptions thrown during the execution of the algorithm are communicated to the caller. It is unspecified whether an algorithm implementation will "forge ahead" after encountering and capturing a user exception.- The algorithm may exit via terminate withthestd::bad_allocexception even if one or more - user-provided function objects have exited viaterminated withan exception. For example, this can happen when an algorithm fails to allocate memory while + The algorithm may exit via thestd::bad_allocexception even if one or more + user-provided function objects have exited via an exception. For example, this can happen when an algorithm fails to allocate memory while creating or adding elements to theexception_listobject.
<experimental/exception_list> synopsis<experimental/execution_policy> synopsisstd. Unless otherwise specified, all
components described in this Technical Specification are declared in namespace
- std::experimental::parallel::v1.
+ std::experimental::parallel::v2v1.
std.
@@ -60,7 +60,7 @@ Unless otherwise specified, references to such entities described in this
Technical Specification are assumed to be qualified with
- std::experimental::parallel::v1, and references to entities described in the C++
+ std::experimental::parallel::v2, and references to entities described in the C++
Standard Library are assumed to be qualified with v1std::.
Extensions that are expected to eventually be added to an existing header @@ -77,7 +77,7 @@
For the purposes of this document, the terms and definitions given in the C++ Standard and the following apply.
-A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v1 with a formal template parameter named ExecutionPolicy.
A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v2 with a formal template parameter named v1ExecutionPolicy.
Parallel algorithms access objects indirectly accessible via their arguments by invoking the following functions: @@ -95,13 +95,13 @@
An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
@@ -152,7 +151,6 @@<experimental/numeric>
+ __cpp_lib_experimental_parallel_task_block<experimental/task_block>| Document Number: | |
|---|---|
| Document Number: | |
| Date: | |
| Date: | |
| Revises: | |
| Revises: | |
| Editor: |
Note: this is an early draft. It’s known to be incomplet and incorrekt, and it has lots of bad formatting.
std. Unless otherwise specified, all
components described in this Technical Specification are declared in namespace
- std::experimental::parallel::v1.
+ std::experimental::parallel::v2v1.
Unless otherwise specified, references to such entities described in this
Technical Specification are assumed to be qualified with
- std::experimental::parallel::v1, and references to entities described in the C++
+ std::experimental::parallel::v2, and references to entities described in the C++
Standard Library are assumed to be qualified with v1std::.
Extensions that are expected to eventually be added to an existing header @@ -1298,7 +1347,7 @@
For the purposes of this document, the terms and definitions given in the C++ Standard and the following apply.
-A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v1 with a formal template parameter named ExecutionPolicy.
A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v2 with a formal template parameter named v1ExecutionPolicy.
Parallel algorithms access objects indirectly accessible via their arguments by invoking the following functions: @@ -1316,7 +1365,7 @@
An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
+ +An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
__cpp_lib_experimental_parallel_task_block |
+ 201510 | +
+ <experimental/task_block>+ |
+
<experimental/execution_policy> synopsis<experimental/execution_policy> synopsisnamespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2v1 {
// 2.3, Execution policy type trait
template<class T> struct is_execution_policy;
template<class T> constexpr bool is_execution_policy_v = is_execution_policy<T>::value;
@@ -1514,7 +1568,10 @@ Feature-testing recommendations
template<class T> struct is_execution_policy { see below };
- is_execution_policy can be used to detect parallel execution policies for the purpose of excluding function signatures from otherwise ambiguous overload resolution participation.
+ is_execution_policy
+ can be used to detect parallel execution policies for the purpose of
+excluding function signatures from otherwise ambiguous overload
+resolution participation.
is_execution_policy<T> shall be a UnaryTypeTrait with a BaseCharacteristic of true_type if T is the type of a standard or implementation-defined execution policy, otherwise false_type.
@@ -1543,7 +1600,10 @@
Feature-testing recommendations
class sequential_execution_policy{ unspecified };
- The class sequential_execution_policy is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and require that a parallel algorithm's execution may not be parallelized.
+ The class sequential_execution_policy
+ is an execution policy type used as a unique type to disambiguate
+parallel algorithm overloading and require that a parallel algorithm's
+execution may not be parallelized.
class parallel_execution_policy{ unspecified };
- The class parallel_execution_policy is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be parallelized.
The class parallel_execution_policy
+ is an execution policy type used as a unique type to disambiguate
+parallel algorithm overloading and indicate that a parallel algorithm's
+execution may be parallelized.
class parallel_vector_execution_policy{ unspecified };
- The class class parallel_vector_execution_policy is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be vectorized and parallelized.
The class class parallel_vector_execution_policy
+ is an execution policy type used as a unique type to disambiguate
+parallel algorithm overloading and indicate that a parallel algorithm's
+execution may be vectorized and parallelized.
During the execution of a standard parallel algorithm, if the invocation of an element access function
- exits viaterminates with an uncaught exception, the behavior of the program is determined by the type of
+ exits via an uncaught exception, the behavior of the program is determined by the type of
execution policy used to invoke the algorithm:
sequential_execution_policy or
- parallel_execution_policy, the execution of the algorithm exits viaexception_listexception_list containing allexception_listparallel_execution_policy, the execution of the algorithm exits via an
+ exception. The exception shall be an exception_list containing all uncaught exceptions thrown during
+ the invocations of element access functions, or optionally the uncaught exception if there was only one.
for_each is unspecified. Wfor_each is executed sequentially,
- if an invocation of the user-provided function object throws an exception, for_each can exit via the uncaught exception, or throw an exception_list containing the original exception.
- exception_list object.for_each is executed sequentially,
+ if an invocation of the user-provided function object throws an exception, for_each can exit via the uncaught exception, or throw an exception_list containing the original exception.
+
— end note ]
std::bad_alloc, all exceptions thrown during the execution of
- the algorithm are communicated to the caller. It is unspecified whether an algorithm implementation will "forge ahead" after
+ exits via std::bad_alloc, all exceptions
+thrown during the execution of
+ the algorithm are communicated to the caller. It is
+unspecified whether an algorithm implementation will "forge ahead" after
+
encountering and capturing a user exception.
— end note ]
std::bad_alloc exception even if one or more
- user-provided function objects have exited viastd::bad_alloc
+ exception even if one or more
+ user-provided function objects have exited via an
+exception. For example, this can happen when an algorithm fails to
+allocate memory while
creating or adding elements to the exception_list object.
— end note ]
@@ -1837,14 +1906,13 @@ <experimental/exception_list> synopsis<experimental/exception_list> synopsis
-namespace std {
+ namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2v1 {
class exception_list : public exception
{
@@ -2403,14 +2471,14 @@ Feature-testing recommendations
- 4.3.1 Header <experimental/algorithm> synopsis
[parallel.alg.ops.synopsis]
+ 4.3.1 Header <experimental/algorithm> synopsis
[parallel.alg.ops.synopsis]
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2v1 {
template<class ExecutionPolicy,
class InputIterator, class Function>
void for_each(ExecutionPolicy&& exec,
@@ -2629,14 +2697,14 @@ Feature-testing recommendations
- 4.4.1 Header <experimental/numeric> synopsis
[parallel.alg.numeric.synopsis]
+ 4.4.1 Header <experimental/numeric> synopsis
[parallel.alg.numeric.synopsis]
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2v1 {
template<class InputIterator>
typename iterator_traits<InputIterator>::value_type
reduce(InputIterator first, InputIterator last);
@@ -3275,6 +3343,469 @@ Feature-testing recommendations
+
+
+
+
+
+ 5 Task Block
[parallel.task_block]
+
+
+
+
+
+
+
+ 5.1 Header <experimental/task_block> synopsis
[parallel.task_block.synopsis]
+
+
+
+ namespace std {
+namespace experimental {
+namespace parallel {
+inline namespace v2 {
+ class task_cancelled_exception;
+
+ class task_block;
+
+ template<class F>
+ void define_task_block(F&& f);
+
+ template<class f>
+ void define_task_block_restore_thread(F&& f);
+}
+}
+}
+}
+
+
+
+
+
+
+
+
+
+ 5.2 Class task_cancelled_exception
[parallel.task_block.task_cancelled_exception]
+
+
+ namespace std {
+namespace experimental {
+namespace parallel
+inline namespace v2 {
+
+ class task_cancelled_exception : public exception
+ {
+ public:
+ task_cancelled_exception() noexcept;
+ virtual const char* what() const noexcept;
+ };
+}
+}
+}
+}
+
+
+
+ The class task_cancelled_exception defines the type of objects thrown by
+ task_block::run or task_block::wait if they detect than an
+ exception is pending within the current parallel block. See 5.5 , below.
+
+
+
+
+
+
+ 5.2.1 task_cancelled_exception member function what
[parallel.task_block.task_cancelled_exception.what]
+
+
+
+
+
+ virtual const char* what() const noexcept
+
+
+
+
+
+
+
+ - Returns:
-
+ An implementation-defined NTBS.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.3 Class task_block
[parallel.task_block.class]
+
+
+ namespace std {
+namespace experimental {
+namespace parallel {
+inline namespace v2 {
+
+ class task_block
+ {
+ private:
+ ~task_block();
+
+ public:
+ task_block(const task_block&) = delete;
+ task_block& operator=(const task_block&) = delete;
+ void operator&() const = delete;
+
+ template<class F>
+ void run(F&& f);
+
+ void wait();
+ };
+}
+}
+}
+}
+
+
+
+ The class task_block defines an interface for forking and joining parallel tasks. The define_task_block and define_task_block_restore_thread function templates create an object of type task_block and pass a reference to that object to a user-provided function object.
+
+
+
+ An object of class task_block cannot be constructed,
+ destroyed, copied, or moved except by the implementation of the task
+block library. Taking the address of a task_block object via operator& is ill-formed. Obtaining its address by any other means (including addressof) results in a pointer with an unspecified value; dereferencing such a pointer results in undefined behavior.
+
+
+
+ A task_block is active if it was created by the nearest enclosing task block, where “task block” refers to an
+ invocation of define_task_block or define_task_block_restore_thread and “nearest enclosing” means the most
+ recent invocation that has not yet completed. Code designated for execution in another thread by means other
+ than the facilities in this section (e.g., using thread or async) are not enclosed in the task block and a
+ task_block passed to (or captured by) such code is not active within that code. Performing any operation on a
+ task_block that is not active results in undefined behavior.
+
+
+
+ When the argument to task_block::run is called, no task_block is active, not even the task_block on which run was called.
+ (The function object should not, therefore, capture a task_block from the surrounding block.)
+
+
+
+
+ [ Example:
+
+ define_task_block([&](auto& tb) {
+ tb.run([&]{
+ tb.run([] { f(); }); // Error: tb is not active within run
+ define_task_block([&](auto& tb2) { // Define new task block
+ tb2.run(f);
+ ...
+ });
+ });
+ ...
+});
+
+
+ — end example ]
+
+
+ [ Note:
+
+ Implementations are encouraged to diagnose the above error at translation time.
+
+ — end note ]
+
+
+
+
+
+
+ 5.3.1 task_block member function template run
[parallel.task_block.class.run]
+
+
+
+
+
+
+ template<class F> void run(F&& f);
+
+
+
+
+
+
+
+ - Requires:
-
+
F shall be MoveConstructible. DECAY_COPY(std::forward<F>(f))() shall be a valid expression.
+
+
+
+
+
+ - Preconditions:
-
+
*this shall be the active task_block.
+
+
+
+
+
+ - Effects:
-
+ Evaluates
DECAY_COPY(std::forward<F>(f))(), where DECAY_COPY(std::forward<F>(f))
+ is evaluated synchronously within the current thread. The call to the resulting copy of the function object is
+ permitted to run on an unspecified thread created by the implementation in an unordered fashion relative to
+ the sequence of operations following the call to run(f) (the continuation), or indeterminately sequenced
+ within the same thread as the continuation. The call to run synchronizes with the call to the function
+ object. The completion of the call to the function object synchronizes with the next invocation of wait on
+ the same task_block or completion of the nearest enclosing task block (i.e., the define_task_block or
+ define_task_block_restore_thread that created this task_block).
+
+
+
+
+
+ - Throws:
-
+
task_cancelled_exception, as described in 5.5 .
+
+
+
+
+
+ - Remarks:
-
+ The
run function may return on a thread other than the one on which it was called; in such cases,
+ completion of the call to run synchronizes with the continuation.
+
+ [ Note:
+ The return from run is ordered similarly to an ordinary function call in a single thread.
+ — end note ]
+
+
+
+
+
+
+ - Remarks:
-
+ The invocation of the user-supplied function object
f may be immediate or may be delayed until
+ compute resources are available. run might or might not return before the invocation of f completes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.3.2 task_block member function wait
[parallel.task_block.class.wait]
+
+
+
+
+
+
+ void wait();
+
+
+
+
+
+
+
+ - Preconditions:
*this shall be the active task_block.
+
+
+
+
+ - Effects:
-
+ Blocks until the tasks spawned using this
task_block have completed.
+
+
+
+
+
+ - Throws:
-
+
task_cancelled_exception, as described in 5.5 .
+
+
+
+
+
+ - Postconditions:
-
+ All tasks spawned by the nearest enclosing task block have completed.
+
+
+
+
+
+ - Remarks:
-
+ The
wait function may return on a thread other than the one on which it was called; in such cases, completion of the call to wait synchronizes with subsequent operations.
+
+ [ Note:
+ The return from wait is ordered similarly to an ordinary function call in a single thread.
+ — end note ]
+
+
+
+
+ [ Example:
+ define_task_block([&](auto& tb) {
+ tb.run([&]{ process(a, w, x); }); // Process a[w] through a[x]
+ if (y < x) tb.wait(); // Wait if overlap between [w,x) and [y,z)
+ process(a, y, z); // Process a[y] through a[z]
+});
+
+
+ — end example ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.4 Function template define_task_block
[parallel.task_block.define_task_block]
+
+
+
+
+
+ template<class F>
+void define_task_block(F&& f);
+ template<class F>
+void define_task_block_restore_thread(F&& f);
+
+
+
+
+
+
+
+
+
+
+ - Requires:
-
+ Given an lvalue
tb of type task_block, the expression f(tb) shall be well-formed
+
+
+
+
+
+ - Effects:
-
+ Constructs a
task_block tb and calls f(tb).
+
+
+
+
+
+ - Throws:
-
+
exception_list, as specified in 5.5 .
+
+
+
+
+
+ - Postconditions:
-
+ All tasks spawned from
f have finished execution.
+
+
+
+
+
+ - Remarks:
-
+ The
define_task_block function may return on a thread other than the one on which it was called
+ unless there are no task blocks active on entry to define_task_block (see 5.3 ), in which
+ case the function returns on the original thread. When define_task_block returns on a different thread,
+ it synchronizes with operations following the call. [ Note:
+ The return from define_task_block is ordered
+ similarly to an ordinary function call in a single thread.
+ — end note ]
+ The define_task_block_restore_thread
+ function always returns on the same thread as the one on which it was called.
+
+
+
+
+
+ - Notes:
-
+ It is expected (but not mandated) that
f will (directly or indirectly) call tb.run(function-object).
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.5 Exception Handling
[parallel.task_block.exceptions]
+
+
+
+
+ Every task_block has an associated exception list. When the task block starts, its associated exception list is empty.
+
+
+
+ When an exception is thrown from the user-provided function object passed to define_task_block or
+ define_task_block_restore_thread, it is added to the exception list for that task block. Similarly, when
+ an exception is thrown from the user-provided function object passed into task_block::run, the exception
+ object is added to the exception list associated with the nearest enclosing task block. In both cases, an
+ implementation may discard any pending tasks that have not yet been invoked. Tasks that are already in
+ progress are not interrupted except at a call to task_block::run or task_block::wait as described below.
+
+
+
+ If the implementation is able to detect that an exception has been thrown by another task within
+ the same nearest enclosing task block, then task_block::run or task_block::wait may throw
+ task_canceled_exception; these instances of task_canceled_exception are not added to the exception
+ list of the corresponding task block.
+
+
+
+ When a task block finishes with a non-empty exception list, the exceptions are aggregated into an exception_list object, which is then thrown from the task block.
+
+
+
+ The order of the exceptions in the exception_list object is unspecified.
+
+
+
+
+
+
+
+
+
+
diff --git a/parallelism-ts.pdf b/parallelism-ts.pdf
deleted file mode 100644
index afabf1739b3dad23ea375a3702291977f9f01be8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 212423
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쎒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
diff --git a/parallelism-ts.html b/parallelism-ts.html index 3097044..8857fdf 100644 --- a/parallelism-ts.html +++ b/parallelism-ts.html @@ -1,6 +1,7 @@ -
-
+