使用哪个线程并行接口来使用堆栈进行任务共享和拆分



我计划写一个代码,我想要使用可以分割的任务共享工作。在串行版本中,我使用用根任务初始化的堆栈。通过反复弹出任务来清空堆栈,然后执行或拆分该任务,并将子任务推回到堆栈上。并行实现这一点的最佳(最有效和最轻松)方式和接口(tbb, openmp等)是什么?任何线程并行接口是否显式支持这样的并行堆栈(或者是否有更好的堆栈替代方案)?

您实际描述的是一个窃取工作的队列。这是从Cilk编程语言(http://en.wikipedia.org/wiki/Cilk)开始的,然后是Cilk++,它是Intel编译器的一部分。您可以获得Linux的免费评估版本。

Intel TBB还具有一个工作窃取队列,并支持自动拆分任务,如果你想自己拆分它们,还可以添加额外的控制。OpenMP没有这种控制,但我不认为这是不可能的。

还有来自Sandia的qthreads (https://code.google.com/p/qthreads/),它是一个很好的包,允许您拥有M:N调度程序(N个OS线程上的M个用户级线程)。

相关内容

最新更新