在并行计算中,分叉会合模型是设置和执行并行程序的一种方式,使得程序在指定一点上“分叉”(fork)而开始并行执行,在随后的一点上“会合”(join)并恢复顺序执行。并行区段可以递归的fork,直到达到特定的任务粒度(granularity)。Fork–join可以被视为是一种并行设计模式,它最早由马尔文·康威公式化于1963年。
概述
通过递归的嵌套fork–join计算,可以获得并行版本的分治范型,表达为如下一般性伪代码:
解决(问题):
if 问题足够小:
直接解决问题 (顺序算法)
else:
for 部份 in 细分(问题)
fork 子任务来解决(部份)
join 在前面的循环中生成的所有子任务
return 合并的结果
例子
简单的并行归并排序是一种fork–join算法:
mergesort(A, lo, hi):
if lo 。Cilk编程语言有对fork和join的语言级别支持,其形式为spawn和sync关键字或Cilk Plus中的cilk_spawn和cilk_sync。
参见
- 并行编程模型
- Fork (系统调用)
*
*
引用
外部链接
- [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3872.pdf A Primer on Scheduling Fork–Join Parallelism with Work Stealing]
评论 (0)