【问题标题】:Hybrid Parallelism: MPI and TBB混合并行:MPI 和 TBB
【发布时间】:2017-08-08 23:00:35
【问题描述】:

在 TBB 中,task_scheduler_init () 方法经常(并且应该?)在内部调用,是经过深思熟虑的设计决策。

但是,如果我们混合使用TBB和MPI,在不控制每个MPI进程的线程数的情况下,是否保证线程安全? 例如,假设我们有 7 个内核(没有超线程)和 2 个 MPI 进程。如果每个进程同时使用 4 个线程生成一个单独的 TBB 任务,则存在可能导致程序在运行时崩溃的冲突。

我是 TBB 的新手。 期待您的cmets和建议!

【问题讨论】:

    标签: c++ multithreading parallel-processing mpi tbb


    【解决方案1】:

    从英特尔 TBB 运行时的角度来看,它是否是 MPI 进程并不重要。因此,如果您有两个进程,您将拥有两个独立的英特尔 TBB 运行时实例。我不确定我是否理解与线程安全相关的问题,但它应该可以正常工作。但是,您的超额订阅可能会导致性能问题。

    此外,如果您同时使用 MPI 例程(来自多个线程),您应该查看 MPI 实现文档,因为它可能会导致一些问题。

    【讨论】:

      【解决方案2】:

      一般来说,这是一个两步探戈

      1. MPI 将每个任务绑定到某些资源
      2. 线程运行时(TBB,同样适用于 OpenMP)通常足够智能,可以在之前提供的资源中绑定线程。

      归根结底,如果 MPI 将其任务绑定到非重叠资源,则不应存在由 TBB 运行时引起的冲突。

      一个典型的场景是在双插槽八核盒上运行 2 个 MPI 任务,每个任务有 8 个 OpenMP 线程。只要 MPI 将任务绑定到套接字,并告知 OpenMP 运行时将线程绑定到内核,性能就会达到最佳。

      【讨论】:

        猜你喜欢
        • 2016-01-20
        • 2014-01-31
        • 2012-10-20
        • 2015-03-26
        • 1970-01-01
        • 2015-12-13
        • 2017-10-09
        • 2016-02-08
        • 2013-11-15
        相关资源
        最近更新 更多