作者IKAFIRE (没有)
看板C_and_CPP
标题Re: [心得] C++17 execution policy
时间Tue May 17 02:23:41 2016
因为推文感觉问题描述不清楚,乾脆回一篇问问题
看完这三个policy之後对於他的设计感到有点疑惑,因此跑回去看draft
这是今年二月的版本
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r1.html
前一篇已经把这个草稿的精髓描述过了
我在这边只节录草稿中对於每个policy效果的描述
#
#sequential_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy object of type sequential_execution_policy are
indeterminately sequenced (in) the calling thread.
基本上似乎是个fallback用的policy,让你在不改变呼叫形式的情况下也可以避免平行化
只是有个疑问,为什麽要设计成「不保证执行顺序 (indeterminately sequenced)」呢?
有趣的是在2015的初稿中,原本是保证依序执行的,不知甚麽原因被改掉了
#
#parallel_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy object of type parallel_execution_policy are
permitted to execute in an unordered fashion in either the invoking thread or
in a thread implicitly created by the library to support parallel algorithm
execution.
还蛮好想像的行为,没甚麽问题
#
#parallel_vector_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy of type parallel_vector_execution_policy are
permitted to execute in an unordered fashion in unspecified threads, and
unsequenced with respect to one another within each thread.
问题来了,这个policy的优点何在?
乍看之下与parallel_execution_policy相较没有额外的好处,还会引入很多问题
例如前篇也提过的,许多synchronization都可能会变成deadlock
甚麽样的情况下会不用上一个policy而采用这个?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.119.253
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1463423025.A.33A.html
1F:推 LPH66: 也许是让回圈能被 vectorization (向量化)? 05/17 02:44
2F:→ LPH66: 就是每次回圈利用 SIMD 暂存器一次跑多个循环这样 05/17 02:44
3F:→ LPH66: 没有这条保证的话, 如前文所言乱序必须是拆 thread 才会有 05/17 02:46
4F:→ LPH66: 拆 thread 就会有一些 sequence 上的问题是 vectorization 05/17 02:47
5F:→ LPH66: 所无法保证的 05/17 02:47
6F:推 lsc36: 可以让compiler改变执行顺序来加速 05/17 10:35
7F:→ IKAFIRE: 感谢解答 05/17 10:53