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