C++ 混合并行:MPI和TBB

C++ 混合并行:MPI和TBB,c++,multithreading,parallel-processing,mpi,tbb,C++,Multithreading,Parallel Processing,Mpi,Tbb,在TBB中,task_scheduler_init方法,通常是并且应该是?在内部调用,是经过深思熟虑的设计决策 但是,如果我们混合使用TBB和MPI,是否可以保证在不控制每个MPI进程的线程数的情况下是线程安全的? 例如,假设我们有7个内核,没有超线程和2个MPI进程。如果每个进程同时使用4个线程生成单个TBB任务,则存在冲突,可能导致程序在运行时崩溃 我是TBB的新手。 期待您的意见和建议 从英特尔TBB运行时的角度来看,它是否是MPI进程并不重要。因此,如果有两个进程,则将有两个独立的“英特

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

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

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

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


此外,如果同时从多个线程使用MPI例程,则应查看MPI实现文档,因为这可能会导致一些问题。

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

MPI将每个任务绑定到一些资源 线程运行时TBB(适用于OpenMP的相同内容)通常足够智能,可以在先前提供的资源中绑定线程。 总之,如果MPI将其任务绑定到非重叠的资源,那么TBB运行时应该不会引起冲突

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