Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用堆栈共享和拆分任务时使用哪个线程并行接口?_C++_Parallel Processing_Openmp_Tbb - Fatal编程技术网

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

C++ 使用堆栈共享和拆分任务时使用哪个线程并行接口?,c++,parallel-processing,openmp,tbb,C++,Parallel Processing,Openmp,Tbb,我计划写一个代码,在那里我想分享的工作使用任务,可以分割。在串行版本中,我使用根任务初始化的堆栈。通过反复弹出一个任务来清空堆栈,然后执行或拆分该任务,并将子任务推回到堆栈上。并行实现此功能的最佳(最高效、最轻松)方式和接口(tbb、openmp等)是什么?任何线程并行接口是否都明确支持这样的并行堆栈(或者是否有更好的堆栈替代方案)?您实际描述的是工作窃取队列。这是从Cilk编程语言开始的(http://en.wikipedia.org/wiki/Cilk)并继续介绍作为英特尔编译器一部分的Ci

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

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

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


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

嗯。。您可能想看看,尤其是在
中,使用single来启动具有根任务的并行区域
。在这里,您可以为堆栈中的每个元素弹出一个任务。tbb/ppl中的task_组应该可以轻松完成此操作。您是否需要堆栈的后进先出行为,或者fifo或未指定是否足够好?任务是否独立?你说的“可以分割”是什么意思?