Re: [心得] C++17 execution policy

楼主: IKAFIRE (没有)   2016-05-17 02:23:41
因为推文感觉问题描述不清楚,干脆回一篇问问题
看完这三个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而采用这个?
作者: LPH66 (-6.2598534e+18f)   2016-05-17 02:44:00
也许是让循环能被 vectorization (向量化)?就是每次循环利用 SIMD 暂存器一次跑多个循环这样没有这条保证的话, 如前文所言乱序必须是拆 thread 才会有拆 thread 就会有一些 sequence 上的问题是 vectorization所无法保证的
作者: lsc36 (lsc36)   2016-05-17 10:35:00
可以让compiler改变执行顺序来加速
楼主: IKAFIRE (没有)   2016-05-17 10:53:00
感谢解答

Links booklink

Contact Us: admin [ a t ] ucptt.com