【问题标题】:pthread vs intel TBB and their relation to OpenMP?pthread vs intel TBB 以及它们与 OpenMP 的关系?
【发布时间】:2012-12-29 14:00:36
【问题描述】:
对于多线程编程,考虑到与HPC应用程序(MPI)的组合,哪个更好,在功能上,Intel TBB(thread building block)是否可以与pthread相媲美?我只在open mp方面有经验,但听说TBB和Pthread都提供了比open mp更精细的线程控制,但是TBB或TBB+OpenMP能提供与pthread类似的功能吗?
【问题讨论】:
标签:
c++
multithreading
pthreads
openmp
intel
【解决方案1】:
pthread 是操作系统基础架构之上的一个瘦包装器。它允许您使用给定的线程主函数和一些同步原语(互斥信号量等)创建线程。在 Linux 下 pthread 是在 clone(2) 系统调用之上实现的。 Windows 下的等价物称为CreateThread。所有其他线程的东西都建立在这个基础之上。
英特尔 TBB 更高级别,它提供 parallel_for 和 parallel_reduce 以及类似于 OpenMP 但作为库而不是语言扩展实现的类似更高级别的构造。
OpenMPI 在多机分布式基础架构上仍然更高级别,但它非常老式且有点笨重。
我的建议是先学习 pthread 库,直到完全理解它,然后再查看更高级别的库。
【解决方案2】:
TBB 允许您在本机线程功能之上编写可移植代码,因此它使代码在不同的操作系统架构上更具可移植性。我不认为它比 pthread“更有效”。
我个人没有使用过 open MP,但过去我曾与使用 open MP 的开发人员合作过(作为他们正在使用的处理器的技术专家),它似乎在某些方面工作得相当好,但是其他人在 open mp 中比编写自己的代码更难使用。这完全取决于你在做什么。 openmp 的好处之一当然是你可以在没有 openmp 选项的情况下重新编译代码,并且代码可以直接按照你的预期工作[当然不会散开]。
使用程序线程方法,您可以更好地控制在哪个线程上发生的事情,是的。但这也意味着更多的工作......