我们正在考虑使用C/C++
的并行框架。我们有一些非常特殊的条件,并不是100%肯定,例如TBB
可以添加“更多”内容。
N
个正在运行的线程和一个同步的工作队列(使用pthread
互斥锁)。int
)。重复此操作直到队列为空。
嗯,现在,我想知道像TBB
(线程构建模块)这样的框架能否为算法提供更多算法强>观点?? (所以,内部......)
答案 0 :(得分:5)
TBB 4提供concurrent_priority_queue(reference manual中的搜索'优先级')。此外,如果您可以设计具有任务而不是线程的程序,那么使用TBB是很好的。实际上,它提供了很多东西来描述任务之间的依赖关系。此外,TBB似乎相当便携,如果它对你很重要。
答案 1 :(得分:3)
在我看来,你可以通过用更强大的东西替换重型互斥体来获得收益,比如spin_rw_mutex:http://threadingbuildingblocks.org/files/documentation/a00163.html。由于最有可能的插入/删除操作很快,因此您可以从非阻塞锁中获益更多。
答案 2 :(得分:1)
我建议您查看TBB module summary pages并查看是否有任何对您有用的内容。
例如,在Containers部分下,没有concurrent_queue< T, A >
,“高性能线程安全的非阻塞并发队列”。它不是优先级队列,所以无论如何你都必须自己构建它。
另一方面,在Synchronization下,有一些互斥变体可能会让您的生活更轻松。
结论:TBB并不是那么神奇,但它可能会有所帮助。
答案 3 :(得分:0)
TBB可以为您提供:
请注意,即使使用TBB正确而集中地执行所有操作,您也不会注意到与您自己的强制措施相比的任何性能提升。它在很大程度上取决于您的系统,特别是如果通信和特别是同步是一个瓶颈。通常情况下,如果你的任务很小并且有很多任务。
答案 4 :(得分:0)
我使用过并行化框架,包括OpenMP,Cilk。这提供了一个很好的抽象,并使并行化相对容易。但是,我怀疑它们是否直接支持优先级队列,或者即使您可以修改其任务队列。
您可以使用this自定义的TaskQueue来执行基于优先级的队列。
如果你想使用TBB,我已经将它与OpenMP一起使用,它看起来很融洽。另外,您不必担心并发容器。与人们可用的其他实现相比,它非常可靠。
希望这有帮助。