在TBB中,task_scheduler_init()方法经常(并且应该在内部)调用,是一个深思熟虑的设计决策。
但是,如果我们混合TBB和MPI,是否保证线程安全而不控制每个MPI进程的线程数? 例如,假设我们有7个核心(没有超线程)和2个MPI进程。如果每个进程同时使用4个线程生成单个TBB任务,则存在可能导致程序在运行时崩溃的冲突。
我是TBB的新手。 期待您的意见和建议!
答案 0 :(得分:1)
从英特尔TBB运行时的角度来看,它是否是MPI流程并不重要。因此,如果您有两个进程,您将拥有两个独立的Intel TBB运行时实例。我不确定我是否理解与线程安全相关的问题,但它应该正常工作。但是,您可能有超额订阅可能导致性能问题。
此外,如果同时使用MPI例程(来自多个线程),则应检查MPI实现文档,因为它可能会导致一些问题。
答案 1 :(得分:0)
一般来说,这是一个两步探戈
底线,如果MPI将其任务绑定到非重叠资源,那么TBB运行时不应该发生冲突。
典型情况是在双插槽八核心框上运行2个MPI任务,每个任务有8个OpenMP线程。只要MPI将任务绑定到套接字,并且告诉OpenMP运行时将线程绑定到核心,性能将是最佳的。