tbb - 区分英特尔 tbb 中的连续传递与阻塞风格
问题描述
Intel TBB 中fork/join 并行中Continuation-passing Style 和Blocking Style 的优缺点是什么?
解决方案
连续传递风格保证了某些理论空间和时间界限,而阻塞风格则没有。
在阻塞方式中,如果父任务创建了一些子任务,则父任务将被阻塞,直到其所有子任务完成并且绑定到堆栈的线程可用。如果执行父线程的线程正在等待子任务,它充其量可以帮助一些其他线程,但是它正在帮助的线程可能会陷入类似的等待游戏中。空间界限受到伤害,因为这些卡住的任务会占用堆栈空间。
延续风格将线程与堆栈解耦,这样子任务完成后,父任务可以立即继续执行。由于它没有绑定到堆栈,因此完成最后一个子任务的线程占用了父任务的继续执行。
一些参考资料:
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 做的事情。
推荐阅读
- java - 如何将 .docx 中的子字符串存储到 java bean 类?
- date - Algolia - DateTimePicker - 选择日期
- elasticsearch - 如何更新弹性搜索索引
- database - 如何按创建日期删除 MongoDB 中的数据?
- jquery - 单击时如何使包含下拉列表的导航栏变暗?
- javascript - 用 saga 和 typescript 连接 redux-form
- angular - 堆栈跟踪中的 Subject.js 随机超出最大调用堆栈
- reactjs - 如果路由匹配但没有该 id 值的数据,则重定向
- cors - GeoSever REST API - CORS 阻塞
- excel - 如何使单元格中的某些文本变为粗体?