【问题标题】: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_forparallel_reduce 以及类似于 OpenMP 但作为库而不是语言扩展实现的类似更高级别的构造。

    OpenMPI 在多机分布式基础架构上仍然更高级别,但它非常老式且有点笨重。

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

    【讨论】:

    • OpenMPI 是消息传递接口的特定实现。
    【解决方案2】:

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

    我个人没有使用过 open MP,但过去我曾与使用 open MP 的开发人员合作过(作为他们正在使用的处理器的技术专家),它似乎在某些方面工作得相当好,但是其他人在 open mp 中比编写自己的代码更难使用。这完全取决于你在做什么。 openmp 的好处之一当然是你可以在没有 openmp 选项的情况下重新编译代码,并且代码可以直接按照你的预期工作[当然不会散开]。

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

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 2021-11-13
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多