You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<cxx-refinsynopsis="" to="parallel.alg.reductions"></cxx-ref> Support for reductions
134
134
template<class T, class BinaryOperation>
@@ -288,7 +288,7 @@ <h1>Reductions</h1>
288
288
</thead>
289
289
</table>
290
290
291
-
<cxx-example>The following code updates each element of <code>y</code> and sets <code>s</code>ot the sum of the squares.
291
+
<cxx-example>The following code updates each element of <code>y</code> and sets <code>s</code><ins>to</ins><del>ot</del> the sum of the squares.
292
292
<pre>
293
293
extern int n;
294
294
extern float x[], y[], a;
@@ -333,7 +333,7 @@ <h1>Inductions</h1>
333
333
<em>unspecified</em> induction(T&& var, S stride);</cxx-signature>
334
334
335
335
<cxx-returns>
336
-
an induction object with induction value type <code>remove_cv_t>remove_reference_t>T<<</code>,
336
+
an induction object with induction value type <code>remove_cv_t<ins><</ins><del>></del>remove_reference_t<ins><</ins><del>></del>T<ins>>></ins><del><<</del></code>,
337
337
initial value <code>var</code>, and (if specified) stride <code>stride</code>. If <code>T</code> is an lvalue reference
338
338
to non-<code>const</code> type, then the object referenced by <code>var</code> becomes the live-out object for the
339
339
induction object; otherwise there is no live-out object.
@@ -425,13 +425,13 @@ <h1>For loop</h1>
425
425
The first element in the input sequence is <code>start</code>. Each subsequent element is generated by adding
426
426
<code>stride</code> to the previous element, if <code>stride</code> is specified, otherwise by incrementing
427
427
the previous element. <cxx-note>As described in the C++ standard, section [algorithms.general], arithmetic
428
-
on non-random-access iterators is performed using advance and distance.</cxx-note><cxx-note>The order of the
428
+
on non-random-access iterators is performed using <ins><code>advance</code></ins><del>advance</del> and <ins><code>distance</code></ins><del>distance</del>.</cxx-note><cxx-note>The order of the
429
429
elements of the input sequence is important for determining ordinal position of an application of <em>f</em>,
430
430
even though the applications themselves may be unordered.</cxx-note></p>
431
431
432
432
The first argument to <em>f</em> is an element from the input sequence. <cxx-note>if <code>I</code> is an
433
433
iterator type, the iterators in the input sequence are not dereferenced before
434
-
being passed to <em>f</em>.</cxx-note> For each member of the rest parameter pack
434
+
being passed to <em>f</em>.</cxx-note> For each member of the <ins><code>rest</code></ins><del>rest</del> parameter pack
435
435
excluding <em>f</em>, an additional argument is passed to each application of <em>f</em> as follows:
<p><cxx-note>This overrides the usual guarantee from the C++ Standard, <cxx-refin="cxx" to="intro.execution"></cxx-ref> [intro.execution] that function executions do not overlap with one another.</cxx-note></p>
41
41
42
-
<p>During the execution of a parallel algorithm with the <code>experimental::execution::unsequenced_policy</code> policy, if the invocation of an element access function exits via an uncaught exception, <code>terminate()</code> shall be called.</p>
42
+
<p>During the execution of a parallel algorithm with the <code>experimental::execution::unsequenced_policy</code> policy, if the invocation of an element access function exits via an uncaught exception, <code>terminate()</code><ins>will</ins><del>shall</del> be called.</p>
<p>The class <code>vector_policy</code> 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. Additionally, such vectorization will result in an execution that respects the sequencing constraints of wavefront application ([parallel.alg.general.wavefront]). <cxx-note>The implementation thus makes stronger guarantees than for <code>unsequenced_policy</code>, for example.</cxx-note></p>
54
54
55
-
<p>The invocations of element access functions in parallel algorithms invoked with an execution policy of type <code>vector_policy</code> are permitted to execute in unordered fashion in the calling thread, unsequenced with respect to one another within the calling thread, subject to the sequencing constraints of wavefront application (<cxx-refto="parallel.alg.general.wavefront"></cxx-ref>) for the last argument to <code>for_loop</code>or <code>for_loop_strided</code>.</p>
55
+
<p>The invocations of element access functions in parallel algorithms invoked with an execution policy of type <code>vector_policy</code> are permitted to execute in unordered fashion in the calling thread, unsequenced with respect to one another within the calling thread, subject to the sequencing constraints of wavefront application (<cxx-refto="parallel.alg.general.wavefront"></cxx-ref>) for the last argument to <code>for_loop</code><ins>, for_loop_n,</ins><del>or </del><code>for_loop_strided</code><ins>, or <code>for_loop_strided_n</code>.</p>
56
56
57
-
<p>During the execution of a parallel algorithm with the <code>experimental::execution::vector_policy</code> policy, if the invocation of an element access function exits via an uncaught exception, <code>terminate()</code> shall be called.</p>
57
+
<p>During the execution of a parallel algorithm with the <code>experimental::execution::vector_policy</code> policy, if the invocation of an element access function exits via an uncaught exception, <code>terminate()</code><ins>will</ins><del>shall</del> be called.</p>
0 commit comments