混合并行:MPI和TBB

时间:2017-08-08 23:00:36

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  1. MPI将每项任务绑定到某些资源
  2. 线程运行时(TBB,同样适用于OpenMP)通常足够聪明,可以在先前提供的资源中绑定线程。
  3. 底线,如果MPI将其任务绑定到非重叠资源,那么TBB运行时不应该发生冲突。

    典型情况是在双插槽八核心框上运行2个MPI任务,每个任务有8个OpenMP线程。只要MPI将任务绑定到套接字,并且告诉OpenMP运行时将线程绑定到核心,性能将是最佳的。