2017-08-08 58 views
0

在TBB中,task_scheduler_init()方法通常(而且应该是?)在内部调用,这是一个慎重的设计决策。混合并行:MPI和TBB

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

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

回答

1

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

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

0

一般来说,这是一个两步巴掌拍不响

  1. MPI每个任务结合一些资源
  2. 线程运行时(TBB,同样的事情也适用于OpenMP的)一般是足够聪明的内线程绑定先前提供的资源。

底线,如果MPI将其任务绑定到非重叠资源,则不应该由TBB运行时造成冲突。

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