首页 > 解决方案 > 区分英特尔 tbb 中的连续传递与阻塞风格

问题描述

Intel TBB 中fork/join 并行中Continuation-passing Style 和Blocking Style 的优缺点是什么?

标签: tbb

解决方案


连续传递风格保证了某些理论空间和时间界限,而阻塞风格则没有。

在阻塞方式中,如果父任务创建了一些子任务,则父任务将被阻塞,直到其所有子任务完成并且绑定到堆栈的线程可用。如果执行父线程的线程正在等待子任务,它充其量可以帮助一些其他线程,但是它正在帮助的线程可能会陷入类似的等待游戏中。空间界限受到伤害,因为这些卡住的任务会占用堆栈空间。

延续风格将线程与堆栈解耦,这样子任务完成后,父任务可以立即继续执行。由于它没有绑定到堆栈,因此完成最后一个子任务的线程占用了父任务的继续执行。

一些参考资料:

http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3872.pdf。TBB 中的连续传递允许那里描述的“贪婪的连续窃取”。

https://www.cse.wustl.edu/~angelee/home_page/papers/stacks.pdf。继续传递本质上是“策略 1:重新编译所有内容”,除了程序员必须为 TBB 做 Cilk 编译器为 Cilk 做的事情。


推荐阅读