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

时间:2011-11-23 10:58:19

标签: c++ parallel-processing openmp tbb

我打算编写一个代码,我希望使用可以拆分的任务来共享工作。在串行版本中,我使用根任务初始化的堆栈。通过重复弹出任务来清空堆栈,然后执行或拆分任务,并将子任务推回堆栈。什么是最好(最有效和最轻松)的方式和接口(tbb,openmp等)并行实现它?这样的并行堆栈是否由任何线程并行接口明确支持(或者是否有更好的替代堆栈)?

1 个答案:

答案 0 :(得分:2)

您实际描述的是工作窃取队列。这已经从Cilk编程语言(http://en.wikipedia.org/wiki/Cilk)开始,并继续使用作为英特尔编译器一部分的Cilk ++。您可以获得Linux的免费评估版。

英特尔TBB还具有工作窃取队列,支持自动拆分任务,如果您想自己拆分,还需要额外的控制。 OpenMP没有这种控制,但我认为这是不可能的。

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