2012-12-29 83 views
7

对于多线程编程,考虑到与HPC应用程序(MPI)的组合,哪一个更好,我们可以说,就功能而言,英特尔®TBB(线程构建模块)与pthread相媲美吗?我只在开放mp方面有经验,但我听说TBB和Pthread提供了比开放mp更好的线程控制,但TBB或TBB + OpenMP可以提供与pthread相比相似的功能吗?pthread vs intel TBB及其与OpenMP的关系?

回答

4

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

Intel TBB是较高级别的,它给出了parallel_forparallel_reduce以及类似于OpenMP的类似更高级别的构造,但实现为不是语言扩展的库。

OpenMPI仍然是更高级别的多机分布式基础架构,但它非常老式,笨拙。

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

+0

OpenMPI是消息传递接口的特定实现。 –

2

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

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

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