pthread vs intel TBB及其与OpenMP的关系?

时间:2012-12-29 14:00:37

标签: c++ multithreading pthreads openmp intel

对于多线程编程,考虑到与HPC应用程序(MPI)的组合,哪一个更好,我们可以说,在功能方面,Intel TBB(线程构建块)是否与pthread相当?我只有开放式mp的经验,但我听说TBB和Pthread提供了比开放式mp更精细的线程控制,但TBB或TBB + OpenMP与pthread相比能提供类似的功能吗?

2 个答案:

答案 0 :(得分:5)

pthread是OS基础结构上方的瘦包装器。它允许您创建具有给定线程主函数的线程,以及一些同步原语(互斥信号量等)。在Linux下,pthread是在clone(2)系统调用之上实现的。 Windows下的等效项称为CreateThread。所有其他线程的东西都建立在这个基础之上。

英特尔TBB更高级别,它提供parallel_forparallel_reduce以及类似于OpenMP的类似更高级别的构造,但实现为库而不是语言扩展。

OpenMPI在多机分布式基础设施方面仍处于更高水平,但它非常老式且有点笨重。

我的建议是先学习pthread库,直到你完全理解它为止,然后再看看更高级别的库。

答案 1 :(得分:2)

TBB允许您在本机线程功能之上编写可移植代码,因此它使代码在不同的OS体系结构上更具可移植性。我不认为它比pthread“更有效”。

我个人没有使用过开放式MP,但过去我曾与使用开放式MP(作为他们使用的处理器的技术专家)的开发人员合作过,而且对某些事情来说似乎运行得相当好,但是其他在开放式mp中使用比编写自己的代码更难。这完全取决于你究竟在做什么。当然,openmp的一个好处是你总是可以在没有openmp选项的情况下重新编译代码,而代码只是按你期望的那样直接工作[当然不会扩散]。

使用程序线程方法,您可以更准确地控制在什么线程上发生的事情,是的。但这也意味着更多的工作......